Во-первых, здесь есть несколько мест, где вы можете улучшить свою практику кода. В частности, Unity имеет структуру под названием Vector3
, которая по сути является массивом длины 3. Вместо того, чтобы иметь плавающие топоры, ay, az и т. Д., Вы можете использовать что-то вроде Vector3 acoords
, и тогда у вас будет acoords.x
acoords.y
и acoords.z
. Однако, глядя на то, что вы пытаетесь сделать, я не понимаю, зачем вам нужна какая-либо из этих переменных, и вы не можете просто изменить преобразование напрямую, вы можете сделать что-то вроде этого:
if(bcoords.x > acoords.x)
{
footballx.transform.position = new Vector3(footballx.transform.position.x - 1, footballx.transform.position.y, footballx.transform.position.z);
}
While()
Циклы, как правило, являются плохой точкой вызова вне подпрограммы в Unity, потому что они приостанавливают выполнение остальной части кода, пока цикл while повторяется. У вас есть две точки вызова здесь:
1. Поместите цикл while в подпрограмму
Что-то вроде
IEnumerator movement()
{
//your movement code here
yield return null;
}
2. Иметь метод, который неоднократно вызывается в цикле обновления
Вне вашего цикла обновления вы можете использовать функцию, которая может выглядеть следующим образом:
void movement(string direction)
{
if(direction == "right")
{
footballx.transform.position = new Vector3(footballx.transform.position.x - 1, footballx.transform.position.y, footballx.transform.position.z);
}
//your other movements here
}
Затем проверка будет выполняться для каждого кадра в цикле обновления, и, таким образом, в каждом кадре будет происходить движение, но это не приведет к приостановке остальной части программы:
void Update()
{
if(bcoords.x > acoords.x)
{
movement("right");
}
}