Вид сцены не может распознать движение нескольких объектов в редакторе, пока объекты не выбраны - PullRequest
0 голосов
/ 13 октября 2018

Я создал игровой объект и добавил к нему сценарий SpriteStuff, который я создал с различными свойствами и функциями для игрового объекта.Я также сделал несколько копий объекта.После этого я создал GroupSpriteStuff игровой объект со следующим свойством

public List<SpriteStuff> spriteStuffs;

. Я добавил скрипт-редактор для GroupSpriteStuff (GroupSpriteStuffEditor), который перебирает spriteStuffs для перемещения каждого объекта с помощьюслайдер.Движение объектов в spriteStuffs видно только тогда, когда я выбираю объекты после перемещения ползунка, если я не выбираю объекты после перемещения ползунка, изменения не видны на виде сцены.Ниже GroupSpriteStuffEditor:

GroupSpriteStuff groupSpriteStuff;    
float groupSpritesMvmtSliderValue = 0.0f;

void OnEnable()
{
    groupSpriteStuff = (GroupSpriteStuff)target;
}

    public override void OnInspectorGUI()
{
    base.OnInspectorGUI();

    EditorGUI.BeginChangeCheck();

    groupSpritesMvmtSliderValue = EditorGUILayout.Slider("Group Movement", groupSpriteStuff.originalGroupSpritesMvmtSliderValue, 0.0f, 1.0f);

    if (!Mathf.Approximately(groupSpriteStuff.originalGroupSpritesMvmtSliderValue, groupSpritesMvmtSliderValue))
    {
        for (int i = 0; i < groupSpriteStuff.spriteStuffs.Count; i++)
        {
            spriteStuffs[i].UseTestMovement(0.2f);
        }

        groupSpriteStuff.originalGroupSpritesMvmtSliderValue = groupSpritesMvmtSliderValue;
    }

    if (EditorGUI.EndChangeCheck())
    {

        SceneView.RepaintAll();
    }

}

Как получить вид сцены для обновления / распознавания изменений в движении, которые я делаю с помощью ползунка?

1 Ответ

0 голосов
/ 13 октября 2018

OnInspectorGUI вызывается только при перемещении в Инспекторе Объекта.

Вместо этого вы можете использовать OnSceneGUI, который вызывается повторно при перемещении в режиме просмотра сцены.

Вы должны отделить Инспектора от кода SceneView.

OnEnable в Редакторе вызывается, когда Инспектор загружается из-за выбора объекта.Вместо этого инициализируйте ваш инспектор с помощью Awake:

GroupSpriteStuff groupSpriteStuff;    
float groupSpritesMvmtSliderValue = 0.0f;

void Awake()
{
    groupSpriteStuff = (GroupSpriteStuff)target;
}

private void OnSceneGUI()
{
    // to be sure you could also add it here
    groupSpriteStuff = (GroupSpriteStuff)target;

    groupSpritesMvmtSliderValue = EditorGUILayout.Slider("Group Movement", groupSpriteStuff.originalGroupSpritesMvmtSliderValue, 0.0f, 1.0f);
}

private void OnSceneView()
{
    groupSpriteStuff = (GroupSpriteStuff)target;

    if (!Mathf.Approximately(groupSpriteStuff.originalGroupSpritesMvmtSliderValue, groupSpritesMvmtSliderValue))
    {
        for (int i = 0; i < groupSpriteStuff.spriteStuffs.Count; i++)
        {
            //you were also missing groupSpriteStuff again here
            groupSpriteStuff.spriteStuffs[i].UseTestMovement(0.2f);
        }

        groupSpriteStuff.originalGroupSpritesMvmtSliderValue = groupSpritesMvmtSliderValue;
    }
}

Хотя будьте осторожны: вы каждый раз устанавливаете значение с плавающей запятой равным 0.Это также может привести к проблемам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...