私は現在、スクリーン上の任意のx位置から文字が画面の一番下の点に向かって動いているUnityでゲームをしています。彼らは一定のスピードを保たなければならない(そして、後で特定のパターンで動くことができる)ので、私はこれにVector3.Lerp
を使用することはできません。Unityで数学を使ってスプライトを動かす
代わりに、私は単純な数学を使って試しました。 StaticInfo.instance.GetPlayerPosition()
が目標位置です。コードはキャラクターのFixedUpdate()で発生します。
float aVal = (myTransform.localPosition.y - StaticInfo.instance.GetPlayerPosition().y)/
(myTransform.localPosition.x - StaticInfo.instance.GetPlayerPosition().x);
float degrees = Mathf.Atan(aVal) * Mathf.Rad2Deg;
Vector3 newPos = new Vector3(myTransform.localPosition.x - (distance * speed * Mathf.Cos(degrees)),
myTransform.localPosition.y - (distance * speed * Mathf.Sin(degrees)),
1);
myTransform.localPosition = newPos;
私の問題は、これらの文字が作成された(プリファブからインスタンス化された)ときに、希望の方向に移動する前に小さな180度ループを作成することです。その後、彼らは望みどおりに動きます。
数値計算を使用していますか?それがそうであれば、なぜ初期化されたときにそれはファンキーなドリフトをしますか?
てみてくださいAtan2(y、x)を使用して –