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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

1084閲覧

unity 運転シミュレーター キーボードで加速減速を操作するには

hm8mhm

総合スコア1

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2023/01/25 06:18

前提

unityを使い始めて2か月の初心者です。
現在、車の運転シミュレーターゲーム(3D)を作成中です。
運転シミュレーターと言ってもドリフトやハンドル操作はなく、アクセルとブレーキの機能だけ付けたいと考えております。
(電車シミュレーターの方が完成イメージに近いです)

実現したいこと

・キーボードで加速減速の操作をできるようにしたい

発生している問題・エラーメッセージ

様々なサイトを参考に、車をコースに沿って走らせることはできたのですが、
キーボードで加速減速の操作をすることができません。
(再生すると勝手に道に沿って走り出します)
コードが間違っているのでしょうか?それとも車側に何か他の設定が必要でしょうか?
もしくは全く違うアプローチをした方が良いのでしょうか?

ご教授いただけますと幸いです。
よろしくお願いいたします。

エラーメッセージはありません

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine.AI; 4using UnityEngine; 5 6public class moveCarCon : MonoBehaviour 7{ 8 public Transform[] points; 9 private int destPoint = 0; 10 private NavMeshAgent agent; 11 12 // Start is called before the first frame update 13 void Start() 14 { 15 agent = GetComponent<NavMeshAgent>(); 16 17 // autoBraking を無効にすると、目標地点の間を継続的に移動します 18 //(つまり、エージェントは目標地点に近づいても 19 // 速度をおとしません) 20 agent.autoBraking = false; 21 22 GotoNextPoint(); 23 } 24 25 void GotoNextPoint() 26 { 27 // エージェントが現在設定された目標地点に行くように設定します 28 agent.destination = points[destPoint].position; 29 30 // 配列内の次の位置を目標地点に設定し、 31 // 必要ならば出発地点にもどります 32 destPoint = (destPoint + 1) % points.Length; 33 } 34 35 void Update() 36 { 37 if (Input.GetKey(KeyCode.UpArrow)) 38 { 39 agent.speed += 1f; 40 } 41 if (Input.GetKey(KeyCode.DownArrow)) 42 { 43 agent.speed -= 1f; 44 } 45 46 47 // エージェントが現目標地点に近づいてきたら、 48 // 次の目標地点を選択します 49 if (!agent.pathPending && agent.remainingDistance < 0.5f) 50 GotoNextPoint(); 51 } 52 53}

試したこと

下記のコードでも車を走らせてみましたが、移動時間の変え方?が分からず、こちらでもキー操作できませんでした。(再生すると勝手に道に沿って走り出します)

C#

1using System.Collections; 2using System.Collections.Generic; 3using DG.Tweening; 4using System.Linq; 5using UnityEngine; 6 7public class waypath : MonoBehaviour 8{ 9 [SerializeField] 10 private List<GameObject> _targets; 11 12 void FixedUpdate() 13 { 14 Rigidbody rb = this.GetComponent<Rigidbody>(); // rigidbodyを取得 15 Vector3 force = new Vector3(0.0f, 0.0f, 0.0f); // 力を設定 16 if (Input.GetKey(KeyCode.UpArrow)) 17 force.z += 0.5f; 18 if (Input.GetKey(KeyCode.Space)) 19 force.z -= 0.5f; 20 rb.AddForce(force, ForceMode.Force); // 力を加える 21 } 22 23 // Start is called before the first frame update 24 void Start() 25 { 26 27 transform.DOPath( 28 path: _targets.Select(target => target.transform.position).ToArray(), //移動する座標をオブジェクトから抽出 29 duration: 10f, //移動時間 30 pathType: PathType.CatmullRom//移動するパスの種類 31) 32 .SetLookAt(0.05f, Vector3.forward); 33 34 } 35 36 // Update is called once per frame 37 void Update() 38 { 39 40 } 41} 42 43

補足情報(FW/ツールのバージョンなど)

unityのバージョン…2021.3.15f1

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

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

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

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

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

isimasa

2023/01/25 08:47

float型で別の変数を作り、agent.speed += accelSpeed;とするか、force.z += accelSpeed;とするとスピードの調整がしやすくなると思います。また、本題についてですが、「再生すると勝手に道に沿って走り出します」とあったので、操作していなかったらスピードは0にするコードに変更すればキーボードで加速減速の操作が実現できると思います。実現方法ですが、if(accelSpeed!=0)だったら操作可能(Input等の処理を中に入れる)とします。
hm8mhm

2023/01/29 05:49

返事が遅くなり申し訳ございません。ご助言いただきありがとうございます。 何が分からないかも分からない状態だったので、道を示していただき希望が見えました。 キー操作はできるようになりましたが、まだまだ上手くスピードを調整できないので、変数などもっと勉強します。
guest

回答1

0

ベストアンサー

インスペクターでNavMeshAgentのSpeed(速度)の初期値が0になっているか確認してください。

投稿2023/01/25 09:36

UnchFullburst

総合スコア656

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

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

hm8mhm

2023/01/29 05:50

返事が遅くなり申し訳ございません。 ご回答いただきました通り、NavMeshAgentのSpeed(速度)を0にするとキーで操作できるようになりました。 初心者丸出しの質問にもかかわらず、ご対応いただきありがとうございました。 もっと勉強して精進します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.54%

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

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

質問する

同じタグがついた質問を見る

C#

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

Unity3D

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

Unity

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