Vector 使用变换移动对象。平移使其以错误的方式移动
我很难和unity一起翻译一个简单的对象。对象在三维世界中移动,但仅在x轴和z轴上移动。我正在使用的函数是我的游戏对象转换的Translate函数。x和z是我试图移动对象的位置Vector 使用变换移动对象。平移使其以错误的方式移动,vector,unity3d,Vector,Unity3d,我很难和unity一起翻译一个简单的对象。对象在三维世界中移动,但仅在x轴和z轴上移动。我正在使用的函数是我的游戏对象转换的Translate函数。x和z是我试图移动对象的位置 transform.Translate (( new Vector3(x - transform.position.x ,0,z - transform.position.z)).normalized * Time.deltaTime * speed,Space.World); 这就是我要处理的问题:如果我的计算结果
transform.Translate (( new Vector3(x - transform.position.x ,0,z - transform.position.z)).normalized * Time.deltaTime * speed,Space.World);
这就是我要处理的问题:如果我的计算结果是以下向量:(0,0,-1.0)
,我的对象会朝着错误的方向缓慢移动
例如:
起始位置(25.16,1.0,12.0)
翻译功能后的最终位置:(25.6、1.0、12.1)
任何帮助都可以帮助我理解这一点。我正在我的一个项目中使用此脚本将游戏对象移动到一个点,只需将其附加到游戏对象上并在FinPos中输入x和y即可
using UnityEngine;
public class MovementAnimation : MonoBehaviour
{
public Vector3 FinPos;
public bool Loop = true;
public int Speed = 1;
private Vector3 StartPos;
private float startTime;
private float lenght;
void Start ()
{
StartPos = this.transform.position;
startTime = Time.time;
lenght = Vector3.Distance(StartPos, FinPos);
}
void Update ()
{
if (this.transform.position == FinPos)
{
if (Loop)
{
this.transform.position = StartPos;
startTime = Time.time;
}
}
else
{
float distance = (Time.time - startTime) * Speed;
this.transform.position = Vector3.Lerp(StartPos, FinPos, distance / lenght);
}
}
}
只需执行此
.Translate(3f*Time.deltaTime,2f*Time.deltaTime,2f*Time.deltaTime)代码>您也可以像这样输入三个参数。如果你告诉它要移动多少,你就不会再摆出你现在的位置。如果你想“跳”到某个地方,只需设置位置<代码>transform.position=新矢量3(5f..
Hmm,在我的.Translate函数中,我使用我的transform.position来计算新向量,它告诉我在我的targetPos x和y和我的对象之间需要移动多少。我在标准化后得到我需要移动多少。谢谢Joe!它工作得很好!这通常是完全错误的。你无法比较浮点值是否相等。在任何情况下l world project您不能这样做this.transform.position==FinPos
。但是,Unity确实执行了一个文档记录不完整的Mathf。大约在那里,所以它通常“正常工作”。