私は私がように参照する2つの位置の間を移動するための四角形を取得しようとしている_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のオペランドには適用できません。
これは2つの理由で私を混乱させます。まず、両方の値が同じデータ型です。次に、==
2つの値に比較演算子()を使用すると、エラーなしで機能します。なぜ私は、演算子を使用することはできません>=
とVector3
の?
>=
どういう意味Vector3
ですか?コンポーネントごとに比較しますか?それは完全な順序ではありません。使用を検討してくださいVector3.MoveTowards
var vec1 = new Vector3(1, 0, 0)
とvar vec2 = new Vector3(0, 1 ,0)
。あるvec1 >= vec2
真または偽?
Bools
likeの使用は避けてください。必然的に、両方を同期させておくと間違いを犯し、バグにつながります。すべての位置(A、B、おそらく将来は他の位置)を含むを作成し、それを使用することをお_atPosA
_atPosB
enum