首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2D游戏,从2个向量中计算transform.Rotate的值

2D游戏,从2个向量中计算transform.Rotate的值
EN

Stack Overflow用户
提问于 2014-07-22 22:55:50
回答 1查看 73关注 0票数 0

首先,我想说我对unity3d来说真的很陌生。我已经做了一些教程,现在我会尝试一下。这就是我的问题所在。我有一个2D场景,中间有一个重力源(假设它是一个行星)。我有一艘飞船在他的轨道上。重力可以通过以下方式模拟:

代码语言:javascript
复制
var myVector = GameObject.Find("middle").transform.position - transform.position;
rigidbody2D.velocity += 0.2 * Time.deltaTime * myVector;

我可以用以下命令旋转宇宙飞船:

代码语言:javascript
复制
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 (箭头是带有他的方向的宇宙飞船,它应该随着宇宙飞船和行星之间的角度变化而旋转)

简单地说:当宇宙飞船绕地球飞行一圈时,它也会旋转360度。

我保存了旧的Vector (从宇宙飞船到行星),也保存了实际的vector:

代码语言:javascript
复制
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)。但我不知道我是怎么做到的。

EN

回答 1

Stack Overflow用户

发布于 2014-07-23 00:25:38

解决方案非常简单:

代码语言:javascript
复制
var angle = Vector3.Angle(lastVector, myVector);
var cross = Vector3.Cross(lastVector, myVector);
if(cross.z >0) {
    angle = -angle;
}
transform.Rotate(Vector3.back * angle);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24890785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档