前提・実現したいこと
【前提】
・現在チュートリアルのシューティングゲームを改良しています。
・敵機が、1体ずつ出現して、一直線(同一X軸線上)に停止するようにしたいです。
・transformで進めれば、狂いなく同じ位置に停止すると思うのですが、
慣性を働かせたく、停止する位置に、スーッと徐々に減速して止まるようにしたいです。
・そのため、Addforce
で前進させ、GetComponent<Rigidbody2D>().velocity = Vector2.zero;
で停止させています。
【実現したいこと】
慣性が働いているような、進み方・停まり方で、同一直線状に停止させたい。
発生している問題・エラーメッセージ
・しかしVector2.zeroが問題なのか?停止位置にバラつきが出ます。
(下記画像の通り、敵機6体を、一直線に停止させたいのですが、バラついた位置に停止してしまいます。)
該当のソースコード
C#
1void Update() 2 { 3 Rigidbody2D rb = this.GetComponent<Rigidbody2D>(); // rigidbodyを取得 4 Vector2 force = new Vector2(0.0f, -1.0f); // 力を設定 5 rb.AddForce(force); // 力を加える 6 7 8 myTransform = this.transform.position; 9 10 //Y軸が1.7より小さくなったら止める 11 if (myTransform.y < 1.7f) 12 { 13 GetComponent<Rigidbody2D>().velocity = Vector2.zero; 14 } 15 }
試したこと
Lerpなどで、やれば出来そうですが…
もっと、簡易な方法がありそうなので、アドバイスをいただきたいです。
myTransform.y < 1.7f
だと、ifに入る数値が、コンマ数秒ずれているようで、それが原因のようです。
しかし、myTransform.y == 1.7f
なら同じ位置に停止するかと思いきや、Update関数なので、1.7ジャストの時が無いようで、
今度は停止しません。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/26 15:09
退会済みユーザー
2020/04/27 01:27
2020/04/27 18:47