いつも大変お世話になっています。
今回も質問失礼します。
タイトル通りの動きを実装したいのですが、現在自分が考えたコードだとプレイヤーに向かって直線的に追ってしまいます。
実装したい動きの動画
動画と違って画面は固定された状態です。
C#
1public class Sun : MonoBehaviour 2{ 3 4 public Rigidbody2D theRB; 5 //太陽が追ってくるスピード 6 public float moveSpeed; 7 //位置 8 private Vector3 moveDirection; 9 //時間設定 10 public static float time; 11 /太陽が戻る位置 12 public Transform point; 13 14 void Update() 15 { 16 //時間 17 time += Time.deltaTime; 18 } 19 20 21 22 void FixedUpdate() 23 { 24 25 //時間が1になったらプレイヤーを追いかける 26 if (time > 1f) 27 { 28 //プレイヤーを追う 29 moveDirection = Player.instance.transform.position - transform.position; 30 moveDirection.Normalize(); 31 theRB.velocity = moveDirection * moveSpeed; 32 33 } 34 //時間が5になったら太陽を元の位置に戻す 35 if (time > 5.0f) 36 { 37 38 moveDirection = point.transform.position - transform.position; 39 theRB.velocity = moveDirection; 40 41 } 42 43}
void FixedUpdate()内で何度も位置を更新してしまう為それを改善しました。
countで制御する
↓
C#
1 void FixedUpdate() 2 { 3 //プレイヤーを追いかける 4 if(count == 0) 5 { 6 Invoke(nameof(SunP), 0.8f); 7 } 8 9 } 10 11 12 //太陽が画面の外に出たら戻る 13 private void OnBecameInvisible() 14 { 15 moveDirection = point.transform.position - transform.position; 16 theRB.velocity = moveDirection; 17 } 18 19//プレイヤーを追う 20 void SunP() 21 { 22 moveDirection = Player.instance.transform.position - transform.position; 23 moveDirection.Normalize(); 24 theRB.velocity = moveDirection * moveSpeed; 25 count = 1; 26 27 } 28 29 30 31//太陽がコライダーで指定した範囲に戻ったら慣性を0にして再度プレイヤーを追う 32 void OnTriggerEnter2D(Collider2D collision) 33 { 34 if (collision.gameObject.tag == "Sun") 35 { 36 theRB.velocity = Vector3.zero; 37 count = 0; 38 39 } 40 } 41 42 43 44
説明が足りない所があると思いますが、ご指摘頂ければありがたいです。
お時間が少し空いている方が居ましたら、お手隙で良いので助言よろしくお願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/22 01:16
2021/10/22 01:27
2021/10/22 12:59
2021/10/22 15:17
2021/10/26 10:35