Math 2D游戏,计算变换值。旋转出2个向量

Math 2D游戏,计算变换值。旋转出2个向量,math,unity3d,Math,Unity3d,首先我想说我对unity3d真的很陌生。我已经做了一些教程,现在我玩了一点。这就是我的问题。我有一个2D场景,中间有一个重力源,让我们假设它是一颗行星。我有一艘宇宙飞船在他的轨道上。重力通过以下方式模拟: var myVector = GameObject.Find("middle").transform.position - transform.position; rigidbody2D.velocity += 0.2 * Time.deltaTime * myVector; 我可以用以下方

首先我想说我对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)
    } 
我想要的是,当宇宙飞船改变与行星的角度时,它会自动旋转。因此,如果它在他的轨道上,同一侧一直向前看。我为此做了一个小草图: 箭头是有方向的宇宙飞船,当宇宙飞船和行星之间的角度改变时,它应该旋转

基本上:当宇宙飞船绕行星飞行1圈时,它也会作360°旋转

我保存了从宇宙飞船到行星的旧矢量,还有实际矢量:

var myVector = GameObject.Find("middle").transform.position - transform.position;
lastVector = myVector;
//for example:
myVector is (-1, 1, 0)
lastVector is (-1, -1, 0)

从这2个值中,我应该能够得到转换的值。旋转类似于0,0,2的东西。但我不知道我是如何做到这一点的。

解决方案非常简单:

var angle = Vector3.Angle(lastVector, myVector);
var cross = Vector3.Cross(lastVector, myVector);
if(cross.z >0) {
    angle = -angle;
}
transform.Rotate(Vector3.back * angle);

我不能打开你的素描,你能上传一张图片吗?@JayKazama-thx&doneUnity有一些技巧,我知道这样的案例有一个。如果你想要简单的方式,我可以推荐你把宇宙飞船作为这个星球的孩子。然后旋转那颗行星也会移动宇宙飞船,使它像你的草图一样。我从unity官方教程中得到灵感。@JayKazama我知道你的意思,但我认为你误解了我。我的问题是,我不是数学高手,也从来没有听说过欧拉格尔斯。无论如何,我已经完成了一半。”transform.rotativector3.back*角度;'这就是诀窍。现在我只需要正确的角度符号