Unity полностью виснет если используется While
Прочитал что это происходит когда цикл бесконечный, но вот я не пойму Есть код
void BigSize()
{
while(sum < 30)
{
sum = x + y + z;
x = x + 1f;
y = y + 1f;
z = z + 1f;
}
}
учитывая что изначально X Y Z = 1 то SUM = 3, значит из цикла должно выйти на 10 разе. Но Юнити не хочет стартовать, подскажите что делаю не так. Весь код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SizeChange : MonoBehaviour
{
public float x = 1.0f;
public float y = 1.0f;
public float z = 1.0f;
private float sum;
// Start is called before the first frame update
private void Awake()
{
sum = x + y + z;
}
void Start()
{
}
void BigSize()
{
while(sum < 30)
{
x = x + 1f;
y = y + 1f;
z = z + 1f;
sum = x + y + z;
}
}
// Update is called once per frame
void Update()
{
transform.localScale = new Vector3(x, y, z);
if(sum < 30)
{
BigSize();
}
}
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
- А зачем вы в Update вызываете код, который выполняется всего однажды? Вызывайте такой код в
Start - Не вижу причин для зависаний. Исследованию может помочь отладка кода и пошаговое выполнение.
- Научитесь складывать 2 вектора.
Если я верно понял, можно сделать как-то так. То есть весь этот скрипт можно свести вот к такому
public class SizeChange : MonoBehaviour
{
void Start()
{
transform.localScale = new Vector3(10f, 10f, 10f);
}
}
Если это не то что вы хотели написать, то я не знаю, что на самом деле хотели, но написали по смыслу именно это. Вы берете грубо говоря вектор (1,1,1), далее 9 раз к нему добавляете по 1, при чем делаете это мгновенно, получается (10,10,10). Тогда какой смысл во всех этих циклах?
Как складывать векторы:
Vector3 v = Vector3.one; // 1,1,1
v += Vector3.one; // 2,2,2
float sum = v.x + v.y + v.z; // 6