キャラクターの左右前後ろ移動にはvelocityを使い、ジャンプの上昇と落下にはAddForceを使いたいのですが
提示コードのf_move()関数部の処理は正しく使えてるのでしょうか?
質問 無理やり同時に使っているため何か対処法があれば教えていただきたいです。
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 Vector3 jump_force = new Vector3(0,-10.0f,0); private const float walk_speed = 40.0f;//移動速度 // Use this for initialization void Start() { rb = GetComponent<Rigidbody>(); ani = GetComponent<Animator>(); // Physics.gravity = new Vector3(0,-100,0); } // Update is called once per frame void Update() { f_Animation(); f_Move(); // Physics.gravity = new Vector3(0, -10, 0); } /*移動*/ void f_Move() { input_h = Input.GetAxis("Horizontal"); input_v = Input.GetAxis("Vertical"); Vector3 move_x = new Vector3(); Vector3 move_z = new Vector3(); 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; Vector3 t_move = move_x + move_z + new Vector3(0,rb.velocity.y,0); move = move_x + move_z + new Vector3(0,0,0); if (move != Vector3.zero) { //Debug.Log(move.normalized); Vector3 v = Vector3.Scale(t_move , new Vector3(1, 0, 1)); transform.rotation = Quaternion.LookRotation(v.normalized); // transform.rotation = Quaternion.LookRotation(move.normalized); } Debug.Log(t_move.normalized); // rb.velocity = move; rb.velocity = t_move; if(rb.velocity.y > 0) { rb.velocity = Vector3.Scale(t_move , new Vector3(1,0,1)); } rb.AddForce(jump_force); } /*アニメーション管理*/ 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) { rb.velocity = new Vector3(0,0,0); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/09/29 09:02
2019/09/30 00:01