Вот мой код, если кому поможет... Я действительно не знаю, что с этим не так, но когда я искал ответ в Интернете, ничего полезного не появилось. Это были все скрипты, контролируемые игроком, а не то, что я мог бы использовать. Любая помощь будет принята с благодарностью, спасибо. '''
[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;
}
}
}
'''
На первый взгляд я вижу, что вместо 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());
}