using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveObjects : MonoBehaviour
{
public float movementSpeed;
private Vector3 originPos;
private void Start()
{
originPos = transform.position;
}
// Update is called once per frame
void Update()
{
if (DetectCollision.moveGate == true)
{
transform.position += Vector3.right * Time.deltaTime * movementSpeed;
}
else
{
if (transform.position != originPos)
{
transform.position -= Vector3.right * Time.deltaTime * movementSpeed;
}
}
}
}
尝试:
if (transform.position != originPos)
但它一直不停地向左移动。
然后尝试:
if (Vector3.Distance (transform.position, originPos) <= 0)
但是,转换根本没有移动。
我希望变换移回其原始位置,然后在原始位置停止。
尽管对于Vector3
,==
和!=
运算符仅使用0.00001
的近似精度,但您将每帧移动大约movementSpeed * 0.017
个单位的距离(取决于您的movementSpeed
(,您仍然不可能有帧的位置正好位于0.00001
阈值内!
正如评论中所说,您应该使用Vector3.MoveTowards
,它可以防止任何超出的情况
计算当前和目标指定的点之间的位置,移动不超过maxDistanceDelta指定的距离。
然后,为了确保您真正达到originPos
,而不仅仅是0.00001
阈值,我将结合Vector3.Distance
和Mathf.Approximately
。
或者,您也可以使用Vector3.Equals
如果给定的向量恰好等于此向量,则返回true。
由于浮点不准确,对于本质上(但不完全(相等的向量,这可能会返回false。使用==运算符测试两个向量是否近似相等。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveObjects : MonoBehaviour
{
public float movementSpeed;
private Vector3 originPos;
private void Start()
{
originPos = transform.position;
}
// Update is called once per frame
void Update()
{
if (DetectCollision.moveGate)
{
transform.position += Vector3.right * Time.deltaTime * movementSpeed;
}
else
{
if (!Mathf.Approximately(Vector3.Distance(transform.position, originPos), 0))
// if(transform.position.Equals(originPos)
{
transform.position = Vector3.MoveTowards(transform.position, originPos, Time.deltaTime * movementSpeed);
}
}
}
}