Суть проблемы:
если currentXPosition == endPosition (отбросим проблемы точности), я считаю, насколько должна измениться координата за deltaTime и отодвигаю объект влево на это значение.
Сразу же после этого (когда производится обновление положений объектов на следующий фрейм) я попадаю в условие currentXPosition < endPosition и двигаю объект, но уже вправо. Дальше история повторяется и, естественно, что влево он никогда не поедет.
Посоветовали изменить при достижении границы вектор скорости на противоположный, но все безрезультатно. Укажите на мои ошибки .
Привожу весь скрипт для движущейся платформы:
Код
public class theMovingPlatform : MonoBehaviour {
public enum XYZ { X, Y }
public XYZ direction;
public float distance = 1.0f;
public float velocity = 1.0f;
private Vector3 velocityVector;
private float startXPosition;
private float startYPosition;
private float currentXPosition;
private float currentYPosition;
private float endXPosition;
private float endYPosition;
private float projection;
private const float epsilon = 0.0000000001f;
void Start() {
velocityVector = GameObject.FindGameObjectWithTag("movp").rigidbody.velocity;
startXPosition = transform.position.x;
startYPosition = transform.position.y;
endXPosition = startXPosition + distance;
endYPosition = startYPosition + distance;
}
private bool ShouldGoForward()
{
return currentXPosition == startXPosition || currentXPosition < endXPosition;
}
void Update () {
currentXPosition = transform.position.x;
currentYPosition = transform.position.y;
switch( direction.ToString() ){
case "X":
float x = Time.deltaTime * ( ShouldGoForward() ? velocity : - velocity );
transform.Translate(new Vector3( x, 0, 0));
if (( endXPosition - currentXPosition ) < epsilon ) {
velocityVector = - velocityVector
}
break;
case "Y":
break;
}
}
}