在选择对象之前,场景视图无法识别编辑器中多个对象的移动

时间:2018-10-13 08:17:32

标签: unity3d unity-editor

我创建了一个游戏对象,并向其中添加了一个GroupSpriteStuff脚本,该脚本具有该游戏对象的各种属性和功能。我还制作了该对象的一些副本。 之后,我制作了一个具有以下属性的public List<SpriteStuff> spriteStuffs; 游戏对象

GroupSpriteStuff

我为GroupSpriteStuffEditorspriteStuffs)添加了一个编辑器脚本,该脚本通过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(); } }

if(testData1 == testData2) // DoSomething

如何获取场景视图以更新/识别我使用滑块所做的运动变化?

1 个答案:

答案 0 :(得分:0)

OnInspectorGUI仅在对象检查器中移动时调用。

相反,您可以使用OnSceneGUI来代替在场景视图中移动时被反复调用。

您必须将Inspector与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;
    }
}

尽管要小心:每次都将float值重新设置为0。这也可能导致问题。