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

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

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

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

ジャンプ中に移動ボタンを離しても着地後移動し続けてしまう

RYU_L
RYU_L

総合スコア1

C#

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

2回答

0評価

0クリップ

447閲覧

投稿2022/01/05 13:11

前提・実現したいこと

昨日の今日ですみません。
空中でWASD(移動)ボタンを離した後、着地後もX,Zのスピードが保持されてしまい、何も押さずとも移動し続けてしまいます
コメントアウトしてるスクリプトに←失敗と書かれているところが考えて試したところです。
見づらくて申し訳ないのですが、ご教示お願い致します。

着地後のログです

(0.0, 166.2, -50.0) UnityEngine.Debug:Log (object) SHIGURU_move:Update () (at Assets/SHIGURU_move.cs:102)

該当のソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; public class SHIGURU_move : MonoBehaviour { private float Speed = 50F; private float jumpSpeed = 100f; public float Mass = 50f; public float Gravity = -9.8f; [SerializeField] AnimationCurve curve; // movedirection移動方向用変数=zeroでverctor3の(x,y,z)の3軸の数値を0にしてる private Vector3 MoveDirection = Vector3.zero; //移動情報保持用変数 private Vector3 TargetDirection; private Quaternion Rotation; private CharacterController controller; void Start() { //つけられてるコンポーネントの情報(x.y.z)を参照 controller = GetComponent<CharacterController>(); } // Update is called once per frame void Update() { //もしcontrollerの座標がisGrounded(地面に)ついていたら if (controller.isGrounded) { //そもそも移動入力してないときはスピードを0、59行目でスピードを与える //Speed = 0f;←失敗 44行目 //=newで新しい追加情報?を与えて(Input.GetAxis("横"), 0.0f, Input.GetAxis("前後")) //MoveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")); //ボタン入力でTargetDirectionのx,zが変動 TargetDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")); //Input.GetButtonUp("Jump")は押されたか押されてないかの正か負のみで数値ではないから入らない 型が違う //TargetDirection = new Vector3(Input.GetAxis("Horizontal"), Input.GetButton("Jump"), Input.GetAxis("Vertical"));←失敗 //TargetDirectionが(0,0,0)出ない場合 if (TargetDirection != Vector3.zero) { //44行目で0になってるスピードに、入力されたとき50fを与える //Speed = 50F;←失敗 59行目 //キャラクターに入力された移動情報が入る MoveDirection = TargetDirection; //=で新しくさっき格納した(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical"));に入力ボタンでの移動スピードの情報を追加 //さっきの文にInput.GetAxis("Vertical") * Speedでも可能だった、見やすさ重視? MoveDirection = MoveDirection * Speed; //現在の回転情報 = 進行方向に向きを直す(移動方向) transform.rotation = Quaternion.LookRotation(MoveDirection); //Debug.Log(MoveDirection); } //ジャンプ if (Input.GetButton("Jump")) { jumpSpeed += 1.5f; // Mathf.Clampは(現在, 最小, 最大)で最小か最大を超えようとしたとき、最小か最大の値が左辺にあてはめられる jumpSpeed = Mathf.Clamp(jumpSpeed, 100, 250); } if (Input.GetButtonUp("Jump") || jumpSpeed == 250f) { //transform.Translate(0, 10, 0); //変数MoveDirextionのどこに力を加えるかを.yで上下に指定 xだと横 //このスクリプトだと空中でボタン離した後もspeedが0にならず移動し続けてしまう MoveDirection.y = jumpSpeed * curve.Evaluate(Time.deltaTime); //移動ボタンが離されても移動情報が保持されないといけない //このスクリプトだと垂直ジャンプになり、移動慣性がふくまれない //MoveDirection = new Vector3(0, jumpSpeed * curve.Evaluate(Time.deltaTime) ,0);←失敗 //このスクリプトだと空中でボタン離した後もspeedが0にならず移動し続けてしまう MoveDirection.y = jumpSpeed * curve.Evaluate(Time.deltaTime);と同じ意味合い //MoveDirection = new Vector3(Input.GetAxis("Horizontal") * Speed, jumpSpeed * curve.Evaluate(Time.deltaTime) ,Input.GetAxis("Vertical") * Speed);←失敗 //移動用変数に座標をいれる //MoveDirection = transform.position;←失敗 とばなくなった //Debug.Log(jumpSpeed); Debug.Log(MoveDirection); //ジャンプ後 力を初期値に jumpSpeed = 100f; //着地で一旦、移動スピードを0にそのままだと動けなくなるのでその後スピードの値を再定義、だが同じくボタン離した後も移動し続ける /*if (controller.isGrounded) { Speed = 0;  //←失敗 } /*Speed = 50F;*/ } } //重力のかかる方向Y=Y方向の飛ぶ力から - (重力*時間=落下速度で力を引いてる MoveDirection.y = MoveDirection.y + (Gravity * Mass * Time.deltaTime); //controllerにMove機能(格納されてる各方向への移動する力とボタン情報 * 時間)重力による摩擦係数? controller.Move(MoveDirection * Time.deltaTime); } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

C#

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

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。