首先,我想说我对unity3d真的很新。我做了一些教程,现在我玩了一下。所以这是我的问题。我有一个2D场景,中间有一个重力源(比如它的行星)。我的轨道上有一艘宇宙飞船。重力用以下方法模拟:
var myVector = GameObject.Find("middle").transform.position - transform.position;
rigidbody2D.velocity += 0.2 * Time.deltaTime * myVector;
我可以用以下方式旋转宇宙飞船:
if(Input.GetKey(moveLeft)) {
transform.Rotate(Vector3.back * -turnSpeed * Time.deltaTime);
//this value is something like (0, 0, -8)
}
if(Input.GetKey(moveRight)) {
transform.Rotate(Vector3.back * turnSpeed * Time.deltaTime);
//this value is something like (0, 0, 8)
}
我想要的是当宇宙飞船改变与行星的角度时它会自动旋转。因此,如果它在他的轨道上,同一侧总是向前看。我为此做了一个小草图: http://snag.gy/AGJMR.jpg (箭是他的方向的宇宙飞船,它应该旋转,而宇宙飞船和行星之间的角度改变)
基本上:当宇宙飞船在地球上飞行1次时,它也会旋转360°。
我将旧的Vector(从太空船到星球)保存起来并且还有实际的矢量:
var myVector = GameObject.Find("middle").transform.position - transform.position;
lastVector = myVector;
//for example:
myVector is (-1, 1, 0)
lastVector is (-1, -1, 0)
在这2个值中,我应该能够获得transform.Rotate的值(类似于(0,0,2)。但我不知道我是如何到达那里的。
答案 0 :(得分:0)
解决方案非常简单:
var angle = Vector3.Angle(lastVector, myVector);
var cross = Vector3.Cross(lastVector, myVector);
if(cross.z >0) {
angle = -angle;
}
transform.Rotate(Vector3.back * angle);