Объект движется немного дальше точки, которую он должен остановить (Unity 2D) - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь заставить объект в Unity2D остановиться в определенной точке.Объект остановится, но положение все равно будет больше / меньше того, что мне нужно для моей программы.Мне нужно, чтобы объект остановился в точке патрулирования, а логическое значение должно быть ложным, если объект прошел точку патрулирования.Мой код выглядит следующим образом:

 private void FixedUpdate()
{
    enemyLocation = GetComponent<Transform>();

    Debug.Log("Enemy Location: " + enemyLocation.position.x + "Patrol Location: " + patrolList[1].position.x);
    if (enemyLocation.position.x >= patrolList[0].position.x && enemyLocation.position.x <= patrolList[1].position.x)
    {
        inPatrolRange = true;
    }
    else
    {
        inPatrolRange = false;
    }

    // Used for randomness
    gameTime = Time.time;

    if (inPatrolRange)
    {
        Patrol();
    }

}

Выход на консоль выглядит следующим образом:

Местоположение врага: 1.527214 Расположение патруля: 1.521

Для правильной работы моего сценарияМне нужно, чтобы расположение врага было равным местоположению патруля.Что я могу сделать, чтобы это исправить?Заранее спасибо!

1 Ответ

0 голосов
/ 30 сентября 2018

Чтобы ваше преобразование enemyLocation оставалось в пределах вашего патруля, вы можете использовать Mathf.Clamp:

float min = patrolList[0].position.x;
float max = patrolList[1].position.x;
float x = Mathf.Clamp(enemyLocation.position.x, min, max);
enemyLocation.position = new Vector3(x, enemyLocation.position.y);

Если вам не нужно делать какие-то вещи сФизика, используйте Update вместо FixedUpdate.Вам также следует рассмотреть возможность перемещения GetComponent из цикла обновления для оптимизации.

...