2

オブジェクトを別のオブジェクトの軌道のように回転させる方法についての修正を行っています。

if (Spin == true)  
{  
  transform.LookAt(ParentOrb.transform);  
  transform.Rotate(90,0,0);  
  transform.Translate(transform.forward*Time.deltaTime*5,Space.World);   
}

ただし、他のオブジェクトの周りを周回することになっているオブジェクトが、ワールドyの値0(真下/真上)に達すると、狂ったように回転し始めます。

lookatの2番目の引数をvector.3.up、transform.up、vector3.zeroに変更しました。

私がvector3.upを持っていたとき、それは回転と同じ問題でした。
私がtransform.upを持っていたとき、それはそれ自体の周りを回転し始めました。
私がvector3.zeroを持っていたとき、それはそれ自体の周りでスピンを開始しましたが、それは実際のオーブに対して相対的ではありませんでしたが、それはそれ自身の軌道です。

私はそれが完全なサイクルで親の周りを周回できるようにしたいと思っています。

私の問題を読んでくれてありがとう。

4

1 に答える 1

3

おめでとうございます、ジンバルロックに遭遇したばかりかもしれません!

Unity3Dのフレームワークの素晴らしい点は、通常、ソリューションに既存のメソッドがあることです。この場合、Transform.RotateAroundがあります。

このコードは、当初の意図に近い形で機能するはずです。

transform.RotateAround(ParentOrb.transform.position, Vector3.back, 40f * Time.deltaTime);

ここで、40fは、1秒あたりの任意の意図された回転速度(度単位)です。

于 2012-12-04T14:30:39.497 に答える