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
→ Ссылка