Я пытаюсь создать сценарий движения, в котором персонаж перемещается из стороны в сторону и просто остается на одной стороне экрана... (Unity 2D)

Вот мой код, если кому поможет... Я действительно не знаю, что с этим не так, но когда я искал ответ в Интернете, ничего полезного не появилось. Это были все скрипты, контролируемые игроком, а не то, что я мог бы использовать. Любая помощь будет принята с благодарностью, спасибо. '''

[HideInInspector] public bool moving;
[HideInInspector] public int direction;
public float restTime;
public float speed = 0.1f;
private float maxX = 2f;
private float minX = -2f;
private float currentX;
void Start()
{
    SpriteAnimator animator = gameObject.GetComponent<SpriteAnimator>();
    currentX = gameObject.transform.position.x;
    string message = "Moving: " + moving + ", Dirrection: " + direction + ", Current X: " + currentX;
    Debug.Log(message);
}
void Update()
{
    if (restTime > 0f)
    {
        restTime -= Time.deltaTime;
    }
    else
    {
        if (direction == 0 && currentX < minX)
        {
            moving = true;
            while (currentX >= minX)
            {
                currentX = gameObject.transform.position.x;
                gameObject.transform.position -= new Vector3(speed * Time.deltaTime, 0f, 0f);
            }
            moving = false;
            restTime = 5f;
        }
        else
        {
            moving = true;
            while (currentX <= maxX)
            {
                currentX = gameObject.transform.position.x;
                gameObject.transform.position += new Vector3(speed * Time.deltaTime, 0f, 0f);
            }
            moving = false;
            restTime = 5f;
        }
    }
}

'''

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
14
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На первый взгляд я вижу, что вместо if (direction == 0 && currentX < minX) должно быть if (direction == 0 && currentX > minX). Другая проблема, которую я вижу, заключается в том, что каждый кадр будет видеть объект с одной или другой стороны без кадров в позициях между двумя местоположениями. Если это предназначено для того, чтобы всегда работать с объектом, который почти постоянно перемещается вперед и назад по экрану, я бы предложил попробовать это.

IEnumerator MoveObject() {
    while(true) {
        if(direction == 0) {
            while(currentX >= minX) {
                gameObject.transform.position -= new Vector3(speed * Time.deltaTime, 0f, 0f);
                currentX = gameObject.transform.position.x;
                yield return null; // waits for the next frame before continuing
            }
            direction == 1;
        } else {
            while(currentX <= maxX) {
                gameObject.transform.position += new Vector3(speed * Time.deltaTime, 0f, 0f);
                currentX = gameObject.transform.position.x;
                yield return null; // waits for the next frame before continuing
            }
            direction == 0;
        }
        yield return new WaitForSecondsRealtime(5f); // how long to wait before continuing
        // If you want to allow for the "pausing" of the coroutine by modifying the passage of in-game time, you would call
        // yield return new WaitForSeconds(5f);
    }
}

И вы можете вызвать его из метода запуска следующим образом

private void Start() {
    // Other Code Here //
    _= StartCoroutine(MoveObject());
}

Другие вопросы по теме