Notifications
Article
Animationでの重力制御メモ
Published 2 years ago
386
0
メモ
子オブジェクトにUnity標準のカプセル型の3Dオブジェクト、親オブジェクトはPlayerという空オブジェクトになっている。
Playerにはスクリプトがアタッチされていて以下のコードになる。
public GameObject capsule; Animator animator; Rigidbody rd; public float speed; public float rotationSpeed; // Start is called before the first frame update void Start() { //capsule = transform.GetChild(0).gameObject; animator = capsule.GetComponent<Animator>(); rd = GetComponent<Rigidbody>(); } // Update is called once per frame void Update() { float move = Input.GetAxis("Vertical") * speed; move *= Time.deltaTime; float rotate = Input.GetAxis("Horizontal") * rotationSpeed; rotationSpeed *= Time.deltaTime; transform.Translate(new Vector3(0,0,move)); if(move != 0) { Debug.Log("ok"); animator.SetBool("isWalk", true); rd.useGravity = false; } else { animator.SetBool("isWalk", false); rd.useGravity = true; } }
移動するとanimatorのidleステートからwalkステートへのトランジションに設定したboolパラメーターをtrueにして、移動しないとfalseにするようにした。
walkのアニメーションではcapsuleのオブジェクトが上下に動くのでGravityがオフだとどんどん上昇して行ってしまうためidle時には宙に浮かないようrigidbodyクラスの変数であるusegravityを使って切り替えるようにした。
ジャンプモーション時にも飛んでから着地までの間だけはusegravityを適応するようにすればうまくいくような気がする。
Tags:
Satoshi Watanabe
Unity Beginner - Other
6
Comments