質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1035閲覧

C#スクリプトでQキーを押したらaddforceを使い前進するようにしたいです

UnityTomato

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/10/24 11:56

編集2020/10/25 07:37

#こういうスプリクトにしたいです!
↓これを使ってQキーを押したときだけ前進するようにしたいです。どうすればいいのかわからないのでアドバイスのほどよろしくお願いします!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyObject : MonoBehaviour
{
[SerializeField] //速度制限
float LimitSpeed;
void FixedUpdate()
{
Rigidbody rb = this.GetComponent<Rigidbody>(); // rigidbodyを取得
Vector3 force = new Vector3(50000f, 0.0f, 0.0f); // 力を設定
rb.AddForce(force, ForceMode.Force); // 力を加える
if (rb.velocity.magnitude > LimitSpeed) //制限の高さ
{
rb.velocity = new Vector3(rb.velocity.x / 1.01f, rb.velocity.y, rb.velocity.z / 0.01f);
}
}
}
#重要
スクリプトにあるように、速度制限の要素を消してないこと
#回答への対応
返信が遅れるかもしれませんが対応します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fiveHundred

2020/10/24 12:17

> こうすればいいものを丸ごと貼っていただけるとありがたいです。 と書いてしまうと、そうであろうがなかろうが、以下に該当すると思われてしまいます。 > 何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。 (https://teratail.com/help/avoid-asking)
UnityTomato

2020/10/25 07:35

了解です。修正しますね
guest

回答2

0

void FixedUpdate() { Rigidbody rb = this.GetComponent<Rigidbody>(); // rigidbodyを取得 if(Input.Getkey(KeyCode.Q)) { Vector3 force = new Vector3(50000f, 0.0f, 0.0f); // 力を設定 rb.AddForce(force, ForceMode.Force); // 力を加える } if (rb.velocity.magnitude > LimitSpeed) //制限の高さ { rb.velocity = new Vector3(rb.velocity.x / 1.01f, rb.velocity.y, rb.velocity.z / 0.01f); } }

このようにされるとできるはずです
Input.Getkeyでキーの入力を取得しています
また、forceの値はInspectorから編集できるようにすると楽でいいと思いますよ

[SerializeField] float Speed

これを追加して、

Vector3 force = new Vector3(50000f, 0.0f, 0.0f); rb.AddForce(force, ForceMode.Force);

rb.AddForce(new Vector3(Speed, 0.0f, 0.0f), ForceMode.Force);

に編集すると使いやすくなると思います

投稿2020/10/24 12:36

CraftTable

総合スコア234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fiveHundred

2020/10/24 12:38

私の回答にある通り、FixedUpdate()内でInputを使うとバグの原因になります。
CraftTable

2020/10/24 12:42

本当ですか・・・ 誤った回答をしてしまい申し訳ありません
guest

0

ベストアンサー

(どこで困っているか分からないのでエスパー回答です)

通常であればInputクラスを使うことになりますが、これをFixedUpdate()内で使ってしまうとバグります。
Update()の中で取得→結果を変数に代入→FixedUpdate()内でその変数を取得して処理する、としてください。


追記:

これだとイメージが付きにくいかと思ったので、コードを書いておきます。
なお、意図的に速度制限の要素を削除しています(丸投げなので)が、内容を理解していればどうすればいいか分かるはずです。

C#

1bool keyIsPushed; 2 3void Update() 4{ 5 // キーが押下されているか取得 6 // (設定する必要があるけど、Input.GetButtonのほうがいいかも) 7 keyIsPushed = Input.Getkey(KeyCode.Q); 8} 9 10// FixedUpdate()には物理や当たり判定についての処理を書く 11// それ以外の処理はUpdate()に書けばよい 12void FixedUpdate() 13{ 14 if (keyIsPushed) 15 { 16 // キー押下時の処理をここに書く 17 } 18 19 // キー押下の有無に関係ない処理はここに書く 20}

投稿2020/10/24 12:29

編集2020/10/24 13:02
fiveHundred

総合スコア10152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

UnityTomato

2020/10/25 07:43

参考にさせていただきます!ご迷惑をおかけし申し訳ありませんでした...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問