前提・実現したいこと
昨日の今日ですみません。
空中で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); } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。