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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

1171閲覧

ジャンプ中の移動をできるようにしたい

pokkuru

総合スコア8

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2021/05/21 08:50

前提・実現したいこと

unity3D でジャンプを実装している途中です。
CharacterControllerを使っています。
ジャンプ中に移動をしたいのですが、ジャンプ中に矢印キーを押しても移動ができないので、
ジャンプ中の移動ができるようにしたいです。

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

ジャンプ中の移動ができない

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class JumpScript : MonoBehaviour 6{ 7 private float speed; 8 //落ちる速さ、重力 9 public float gravity = 22.5f; 10 private float jumpSpeed; 11 12 //通常時のスピードとジャンプ力 13 public float normalSpeed = 5; 14 public float normalJump = 10; 15 //左Shift押したときのスピードとジャンプ力 16 public float shiftSpeed = 10; 17 public float shiftJump = 20; 18 19 //Playerの移動や向く方向を入れる 20 Vector3 moveDirection; 21 22 //CharacterControllerを変数にする 23 CharacterController controller; 24 25 //マウスの横縦に動かす速さ 26 public float horizontalSpeed = 2.0F; 27 public float verticalSpeed = 2.0F; 28 29 //ジャンプボタン離したことを判定 30 //二段ジャンプを防ぐため 31 private bool jumpUpEnd = false; 32 33 //ジャンプボタン押している時間を判定 34 //その時間を制限するため 35 [SerializeField] float jumpTime; 36 37 void Start() 38 { 39 //CharacterControllerを取得 40 controller = GetComponent<CharacterController>(); 41 } 42 43 void Update() 44 { 45 46 var velocityY = moveDirection.y; 47 //左右どちらかのShift押した場合と離している場合 48 if (Input.GetKey(KeyCode.LeftShift) 49 || Input.GetKey(KeyCode.RightShift)) 50 { 51 speed = shiftSpeed; 52 jumpSpeed = shiftJump; 53 } 54 else 55 { 56 speed = normalSpeed; 57 jumpSpeed = normalJump; 58 } 59 60 //Playerが地面に設置していることを判定 61 if (controller.isGrounded) 62 { 63 //XZ軸の移動と向きを代入する 64 //WASD,上下左右キー 65 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, 66 Input.GetAxis("Vertical")); 67 moveDirection = transform.TransformDirection(moveDirection); 68 moveDirection *= speed; 69 70 // Y軸方向にジャンプさせる 71 if (Input.GetButtonDown("Jump")) 72 moveDirection.y = jumpSpeed; 73 74 75 //ジャンプ中に関わる変数 76 //地面についている時にリセット 77 jumpUpEnd = false; 78 jumpTime = 0; 79 } 80 else 81 { 82 83 moveDirection.y = velocityY; 84 //ジャンプボタン押していると上昇 85 //押している時間3秒まで、jumpUpEndがfalseの場合有効 86 if (Input.GetButton("Jump") && jumpTime < 0.2f && !jumpUpEnd) 87 { 88 //ジャンプボタン押している秒数を加算 89 jumpTime += Time.deltaTime; 90 moveDirection.y = jumpSpeed; 91 } 92 93 //ジャンプ中にジャンプボタン離したことを記録 94 //jumpUpEndがfalseの場合有効 95 if (Input.GetButtonUp("Jump") && !jumpUpEnd) 96 { 97 //二回ジャンプできなくする 98 jumpUpEnd = true; 99 } 100 } 101 102 // 重力を設定しないと落下しない 103 moveDirection.y -= gravity * Time.deltaTime; 104 105 // Move関数に代入する 106 controller.Move(moveDirection * Time.deltaTime); 107 } 108}

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

controller.isGroundedで分岐しているのでそこをいじれば良さそうです。
これがfalseのとき、つまりelseの中を処理しているときは入力による移動が反映されていません(つまり空中にいると移動キーをおしても反映されていない)

cs

1 //XZ軸の移動と向きを代入する 2 //WASD,上下左右キー 3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, 4 Input.GetAxis("Vertical")); 5 moveDirection = transform.TransformDirection(moveDirection); 6 moveDirection *= speed;

ということなので、elseの中でもこの処理ができればよさそうです!
ただしこのまま使おうとするとジャンプによる高さの変動もかき消される場合があるので、その場合はmoveDirection.yは矢印キーの移動で変動しないようにしてあげると良いでしょう

投稿2021/05/21 09:39

hogefugapiyo

総合スコア3302

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問