Свойство unity3d сбрасывается в значение по умолчанию во время работы скрипта - PullRequest
1 голос
/ 30 апреля 2020

Я новичок ie в сценариях Unity3D и пытаюсь узнать, как это работает внутри для моих простых проектов, каковы лучшие практики. Здесь у меня есть простая сцена с кубом в нем, и я пытаюсь его анимировать, переходя влево к определенному моменту времени, затем возвращаясь к отрицательному значению, а затем обратно в l oop (по оси x). Направление задается в булевом свойстве класса publi c. По умолчанию это отрицательное значение (что означает go в положительном направлении, извините за путаницу). Если оно положительное, оно должно go отрицательное. Однако я заметил, что когда я изменяю это логическое значение в методе Update скрипта, оно возвращается к исходному значению? (если установлено значение true, по умолчанию установлено значение false). Тогда мой объект получает стек между истинным и ложным и не движется в любом направлении. Однако если я установлю это свойство как stati c свойство в классе, оно не будет сброшено и будет работать так, как задумано (циклы в порядке). Я не знаю, почему он сбрасывается, и здесь я полностью сбит с толку.

public class CubeAnim : MonoBehaviour
{    
    public bool directionnegative;

    // Update is called once per frame
    void Update()
    {
        float nv = 25.0f * Time.deltaTime;

        float posx = transform.position.x;

        if (posx > 20.0f)
        {
            if (!directionnegative)
            {
                directionnegative = true;
            }
        }
        else if (posx < -20.0f)
        {
            if (directionnegative)
            {
                directionnegative = false;
            }
        }

        if(directionnegative)
        {
            nv = -(nv);
        }

        transform.Translate(nv, 0, 0);

        deltaTime += (Time.deltaTime - deltaTime) * 0.1f;
        float fps = 1.0f / deltaTime;
        string log = "posx: " + transform.position.x + "\ndir: " + directionnegative + " transx: " + nv + "\nfps: " + Mathf.Ceil(fps).ToString();
        Debug.Log(log);
    }
}

И если я объявляю directionalgative как stati c Сценарий bool работает нормально, и анимация куба правильно движется в одном направлении, тогда в другом направлении, затем меняет направление:

        public static bool directionnegative;
...