Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vector 使用变换移动对象。平移使其以错误的方式移动_Vector_Unity3d - Fatal编程技术网

Vector 使用变换移动对象。平移使其以错误的方式移动

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); 这就是我要处理的问题:如果我的计算结果

我很难和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);
这就是我要处理的问题:如果我的计算结果是以下向量:
(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。大约在那里,所以它通常“正常工作”。