首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Unity3D中将对象旋转到另一个

在Unity3D中将对象旋转到另一个
EN

Stack Overflow用户
提问于 2015-11-17 14:47:26
回答 2查看 2.2K关注 0票数 1

我已经从这个问题获得了这个函数。我改变了轮换的标志:

代码语言:javascript
复制
 void rotateBotConnector()
{
    Vector3 diff = (player.transform.position - botConnector.transform.position).normalized;
    float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
    botConnector.transform.localRotation = Quaternion.Euler(0f, 0f, -(rot_z - 90f));
}

但问题是,现在我的目标跟随玩家在XZ平面,但当旋转达到一定程度,左或右,物体停止旋转,向我的球员。

为了更好地理解:http://imgur.com/vWaqc31

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-17 15:53:59

为什么不直接使用:

代码语言:javascript
复制
var target : Transform;

transform.LookAt(Vector3(target.transform.position.x, target.transform.position.y, transform.position.z);

这似乎比使用euler容易得多。这样你就可以看到目标的x&y,但是转换你的z。

另外,我对欧拉不是专家,但它似乎只限于90度转弯,我认为这可能就是为什么:

代码语言:javascript
复制
Quaternion.Euler(0f, 0f, -(rot_z - 90f));
票数 3
EN

Stack Overflow用户

发布于 2015-11-17 16:02:20

除非你绝对有必要通过角度旋转,否则你可能更愿意使用物体的前向矢量,这样更容易理解逻辑:

代码语言:javascript
复制
void rotateBotConnector()
{
    Vector3 targetForwad = botConnector.transform.position - player.transform.position;
    targetForward.y= 0f;
    targetForward.Normalize(); // <-- this is very expensive function try avoid using it whenever possible
    botConnector.forward = Vector3.Lerp(botConnector.forward, targetForward, Time.deltaTime));
}

再一次,如果你的cpu周期短,你可能想尝试计算角度,而不是向量。但在大多数情况下,这是可以的。(代码需要拼写检查)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33759841

复制
相关文章

相似问题

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