概要
ボールを、上下キーで前進/後退、左右キーで方向転換を行う動作を目的として、以下のコードを作成したところ、同じ場所を行ったり来たりするのみでうまく進まず、方向転換もボールが回転していると、それ自身の傾きを考慮してしまい、y軸でうまく回りません。
ソースコード
c#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class PlayerController : MonoBehaviour 6{ 7 public float speed; 8 public float angleSpeed; 9 10 private Rigidbody rb; 11 12 // Start is called before the first frame update 13 void Start() 14 { 15 rb = GetComponent<Rigidbody>(); 16 } 17 18 void FixedUpdate() 19 { 20 //キー入力を取得 21 var moveHorizontal = Input.GetAxis("Horizontal"); 22 var moveVertical = Input.GetAxis("Vertical"); 23 24 //上下入力は進行、後退を行う 25 rb.AddForce(transform.forward * moveVertical * speed * Time.deltaTime, ForceMode.Force); 26 27 //左右入力は方向転換を行う 28 transform.Rotate(0, angleSpeed * moveHorizontal * Time.deltaTime, 0); 29 } 30}
正確な回答ではないので、こちらへのコメントで失礼します。
>上下入力は進行、後退を行う
球体が回転しているためtransform.forwardの向きが変わってしまうことが行ったり来たりの原因です。
たとえば、該当箇所をCamera.main.transform.forwardとすると、カメラの奥行方向に進んだり、戻ったりできます。
>左右入力は方向転換を行う
おそらく、やりたいことはtransform.RotateAroundではないかと想像します。
ただ、方向転換後には前進/後退の向きはどうなるのでしょうか?
90度方向転換したら、上下キーで左右に進むようになるのでしょうか?
そのあたりの仕様を記述すると、より正確な回答を得られると思います。
余談ですが、十字キーで前進/後退するゲームの多くは、左右キーではカメラの位置と向きを変えているだけな気がします……
回答1件
あなたの回答
tips
プレビュー