Unityでオブジェクトの回転する方向をランダムにしようと思ったのですが、うまくいきません。
原因は恐らく、回転途中にOnCollisionStay()が呼ばれてしまうので、
そこでまたランダムな回転が設定されてしまい、向きが定まらないのでカクカクしてしまうのだと思います。
これを回避しようと思い、
一度、90度の回転が設定されたら、90度を向き終わるまでは
ランダムな回転処理が呼ばれないようにしようとフラグで管理しようと思ったのですが、
うまくいきませんでした。
+90度(-90度)まで向き終わったら、次の処理に移るというところを
どうやって実装するかがわかりません。
C#
1using UnityEngine; 2 3public class Test : MonoBehaviour 4{ 5 [SerializeField] 6 private Rigidbody rigidBody = null; 7 8 [SerializeField] 9 private float moveSpeed = 0.1f; 10 11 [SerializeField] 12 private float rotationSpeed = 0.1f; 13 14 void Start() 15 { 16 17 } 18 19 void FixedUpdate() 20 { 21 var pos = rigidBody.position; 22 23 pos += transform.forward * moveSpeed * Time.fixedDeltaTime; 24 rigidBody.MovePosition(pos); 25 } 26 27 private void OnCollisionStay(Collision collision) 28 { 29 // 地面は除く 30 if (collision.gameObject.CompareTag("Plane")) 31 { 32 return; 33 } 34 35 var randomRot = 0; 36 37 if (Random.Range(1, 3) % 2 == 0) 38 { 39 randomRot = 90; 40 } 41 else 42 { 43 randomRot = -90; 44 } 45 46 var rot = randomRot * rotationSpeed * Time.fixedDeltaTime; 47 48 transform.Rotate(new Vector3(0, rot, 0), Space.Self); 49 } 50 51} 52
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。