我正在尝试获得一个矩形,以便在我称为_positionA
和的两个位置之间移动_positionB
。两者都是类型Vector3
。矩形移动得很好。但是,到达时_positionB
它不会像应该的那样朝相反的方向移动。
我回到代码中看一看。我得出的结论是,随着对象的移动,if
代码中的语句错过了rects位置等于的框架_positionB
。如果rects的位置大于或等于, 我决定将代码修改为反向_positionB
。我的代码不太长,因此我将在下面显示它:
using UnityEngine;
using System.Collections;
public class Rectangle : MonoBehaviour
{
private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position
private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position
private Transform _rect_tfm;
private bool _atPosA = false, _atPosB = false;
public Vector2 speed = new Vector2(1f, 0f);
private void Start()
{
_rect_tfm = gameObject.GetComponent<Transform>();
_rect_tfm.position = _positionA;
_atPosA = true;
}
private void Update()
{
/*NOTE: Infinite loops can cause Unity to crash*/
Move();
}
private void Move()
{
if (_atPosA)
{
_rect_tfm.Translate(speed * Time.deltaTime);
if (_rect_tfm.position == _positionB)
{
_atPosA = false;
_atPosB = true;
}
}
if (_atPosB)
{
_rect_tfm.Translate(-speed * Time.deltaTime);
if (_rect_tfm.position == _positionA)
{
_atPosA = true;
_atPosB = false;
}
}
}
}
但是,当我更改它时,它警告我以下错误消息:
运算符> =不能应用于Vector3和Vector3类型的操作数。
这使我感到困惑,原因有两个:首先,两个值的数据类型相同。其次,==
对两个值使用比较运算符()可以正常工作。为什么不能将运算符>=
与Vector3
s一起使用?
>=
意味着什么Vector3
?比较组件?那将不是全部订购。考虑使用Vector3.MoveTowards
var vec1 = new Vector3(1, 0, 0)
和var vec2 = new Vector3(0, 1 ,0)
。是vec1 >= vec2
真的还是假的?
Bools
和_atPosA
和_atPosB
。不可避免的是,您将使两者保持同步会出错,并且会导致错误。最好设置一个enum
包含所有职位(A,B,将来可能还会有其他职位)的职位,并使用该职位