0

我创建了一个游戏对象并向其中添加了一个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();
    }

}

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

4

1 回答 1

0

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

相反,您可以使用OnSceneGUIwhis 在场景视图中移动时重复调用。

您必须将 Inspector 与 SceneView 代码分开。

OnEnable在由于选择对象而加载 Inspector 时调用编辑器。而是使用以下命令初始化您的检查器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。这也可能导致问题。

于 2018-10-13T09:20:11.053 回答