我似乎陷入了使用Unity UnityEditor类的OnInspectorGUI方法捕获的情况。我想在检查器中命名数组元素以便于编辑,目前我正在使用,根据文档:
git push ssh://jenkins.server:34841/scriptler.git HEAD:refs/heads/master
在我的J_Character脚本中,我初始化aBaseStats数组,如下所示:
public override void OnInspectorGUI()
{
J_Character charScript = (J_Character)target;
charScript.aBaseStats[0] = EditorGUILayout.FloatField("Base Health", charScript.aBaseStats[0]);
}
问题在于,每当我尝试在编辑器中执行任何操作(因此调用OnInspectorGUI)时,我会得到指向行的索引超出范围错误
public float[] aBaseStats = new float[35];
我猜这是因为我的数组在游戏开始时初始化,而编辑器代码在开发过程中一直在运行。
我怎样才能解决这种情况?
非常感谢。
答案 0 :(得分:4)
您必须在仅运行一次的函数中初始化aBaseStats
。
以下代码为 BAD :
public float[] aBaseStats = new float[35];
void Start(){
}
以下代码为 GOOD :
public float[] aBaseStats;
void Start(){
aBaseStats = new float[35];
}
在运行一次的编辑器回调函数中初始化它。
修改强>
我不知道将在Start
函数()之前运行的OnInspectorGUI
回调函数。下面的黑客应该可以工作。
public float[] aBaseStats;
bool initialized = false;
public override void OnInspectorGUI()
{
if (!initialized)
{
initialized = true;
aBaseStats = new float[35];
}
J_Character charScript = (J_Character)target;
charScript.aBaseStats[0] = EditorGUILayout.FloatField("Base Health",aBaseStats[0]);
}
答案 1 :(得分:0)
作为程序员回答的补充,我想指出以下内容:
http://docs.unity3d.com/ScriptReference/ExecuteInEditMode.html
这似乎正是您在功能方面所寻求的。 (即使播放模式未激活,它也会运行该方法)
using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class ExampleClass : MonoBehaviour {
public Transform target;
void Update() {
if (target)
transform.LookAt(target);
}
}