提示コード「/////////////ここのコードです。」
質問 なのですがなぜ移動できなくなるのでしょうか?毎フレームgrivity_forceの値を-10ずつ加算したいのでそうすると移動できず固定されてしまいます。
※また new vector3(0,gravity_force,0);の加算処理を無くすと移動速度がwalk_speedの値を思われる正常の値?で移動されます。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { private float input_h; private float input_v; private Vector3 move; private Rigidbody rb; private Animator ani; /*調整量関係*/ private float gravity_force = -10.0f; private const float walk_speed = 20.0f;//移動速度 private const float jump_force = 40.00f; /*状態判定 系*/ private bool isJump; private bool isGround; // Use this for initialization void Start() { rb = GetComponent<Rigidbody>(); ani = GetComponent<Animator>(); isJump = false; isGround = false; } // Update is called once per frame void Update() { f_Animation(); input_h = Input.GetAxis("Horizontal"); input_v = Input.GetAxis("Vertical"); Vector3 move_x = new Vector3(); Vector3 move_z = new Vector3(); //Vector3 move_y = new Vector3(0,-10.0f,0); move_z = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized * input_v * walk_speed; move_x = Camera.main.transform.right * input_h * walk_speed; move = move_x + move_z; Vector3 v = Vector3.Scale(move, new Vector3(1, 0, 1)); if (v != Vector3.zero) { transform.rotation = Quaternion.LookRotation(v.normalized); } gravity_force += -10.0f; rb.velocity = move + new Vector3(0,gravity_force,0);///////////ここのコードです。 //rb.velocity = move; Debug.Log(rb.velocity); } /*移動*/ void f_Move() { } /*アニメーション管理*/ void f_Animation() { float speed = Mathf.Sqrt((move.z * move.z) + (move.x * move.x)); // ani.SetFloat("Walk_Speed", speed); ani.SetFloat("Run_Speed", speed); // ani.speed = speed / 10; } void OnCollisionEnter(Collision c) { isGround = true; isJump = false; // gravity_force = 0; rb.velocity = new Vector3(0,0,0); // rb.velocity = new Vector3(rb.velocity.x, 0, rb.velocity.z); //rb.velocity = new Vector3(rb.velocity.x, 0, rb.velocity.z); } }
試しに
rb.velocity = move + new Vector3(0,gravity_force,0);
のところを
rb.MovePosition(transform.position + (move + new Vector3()0, gravity_force, 0));
にしても固定されるか教えてもらってもいいですか?
またRigidBodyコンポーネントのConstraintsのFreeze Positionのチェックが入っていませんか?入っていたらたぶん外さないと動かないです。
単純にY軸への力の加えすぎです。
毎フレーム増加するY軸の力によって押さえつけられることによって移動が出来なくなっています。
また、velocityの値を直接操作は推奨されていません。(前回の質問でも同じ指摘をされているはず)
同様に自身の回答がついている質問を未解決のまま放置するのはよくありません。解決しているのであれば解決済みにし、未解決なのであれば回答者とやり取りをし解決してください。
未解決のまま、ノーリアクションなのは回答者に失礼に値します。
回答2件
あなたの回答
tips
プレビュー