CharacterControllerで移動、cinemachineを使いカメラの挙動を取っています。
ジャンプを使いたいと思い、重力の処理を加えましたが起動するとキャラが倒れてしまいます。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class TestMove : Photon.Pun.MonoBehaviourPun 6{ 7 CharacterController character; 8 Animator animator; 9 //Quaternion targetRotation; 10 Vector3 velocity; 11 Vector3 colect; 12 public float gravity = 10f; 13 public float speed = 10f; 14 public float rayDistance = 0.3f; 15 public bool isGround = false; 16 void Awake() 17 { 18 character = GetComponent<CharacterController>(); 19 animator = GetComponent<Animator>(); 20 } 21 void Update() 22 { 23 if(!photonView.IsMine) 24 { 25 return; 26 } 27 //targetRotation = transform.rotation; 28 var x = Input.GetAxisRaw("Horizontal"); 29 var z = Input.GetAxisRaw("Vertical"); 30 var horizontalRotation = Quaternion.AngleAxis(Camera.main.transform.eulerAngles.y,Vector3.up); 31 velocity = horizontalRotation * new Vector3(x * speed,0,z * speed); 32ここに重力の処理を加えました↓ 33 velocity.y -= gravity * Time.deltaTime; 34 35 character.Move(velocity * Time.deltaTime); 36 if(velocity.magnitude > 0.5f) 37 { 38 transform.rotation = Quaternion.LookRotation(velocity,Vector3.up); 39 } 40 41 animator.SetFloat("Speed",Mathf.Abs(z)); 42 animator.SetFloat("Run",Mathf.Abs(x)); 43 44 } 45} 46
以下のような感じになってしまいます。
カメラの向きの力を考慮することで解消するのかと思っていますが、どのように修正するべきかわかりません。よろしくお願いします。
Unityにはプログラムからではなく設定画面から重力(Rigidbody)を付与することが出来るのですが、そちらの方から設定しましたか?
すみません、言葉不足でした。
Rigidbodyで重力を付けても、ジャンプを行った際にキャラのRotation のxが45度傾いてしまうため根本的に、スクリプトのどの部分がこのような回転を引き起こしているか知りたいです。
`var horizontalRotation = Quaternion.AngleAxis(Camera.main.transform.eulerAngles.y,Vector3.up);`
`velocity = horizontalRotation * new Vector3(x * speed,0,z * speed);`
の値を確認した方がいいと思います。予想ですが、その2つのベクトルが原因で、`transform.rotation = Quaternion.LookRotation(velocity,Vector3.up);`を通った時にその向きに向こうとしているのだと思います。
回答1件
あなたの回答
tips
プレビュー