我创建了一个游戏对象,并向其中添加了一个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();
}
}
:
if(testData1 == testData2) // DoSomething
如何获取场景视图以更新/识别我使用滑块所做的运动变化?
答案 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。这也可能导致问题。