首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Unity3D -如何在自定义检查器代码中使用数组?

Unity3D -如何在自定义检查器代码中使用数组?
EN

Stack Overflow用户
提问于 2016-05-18 19:42:25
回答 2查看 1.3K关注 0票数 0

在使用Unity的UnityEditor类的OnInspectorGUI方法时,我似乎陷入了困境。我想在检查器中命名数组元素,以便于编辑,根据文档,我目前正在使用:

代码语言:javascript
运行
复制
public override void OnInspectorGUI()
{
   J_Character charScript = (J_Character)target;

   charScript.aBaseStats[0] = EditorGUILayout.FloatField("Base Health", charScript.aBaseStats[0]);

}

在我的J_Character脚本中,我像这样初始化aBaseStats数组:

代码语言:javascript
运行
复制
public float[] aBaseStats = new float[35];

问题是,每当我试图在编辑器中执行任何操作(因此调用了OnInspectorGUI )时,我都会得到指向该行的索引超出范围的错误

代码语言:javascript
运行
复制
charScript.aBaseStats[0] = EditorGUILayout.FloatField("Base Health", charScript.aBaseStats[0]);

我猜这是因为我的数组是在游戏开始时初始化的,而编辑器代码在开发过程中一直在运行。

我该如何解决这种情况呢?

非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2016-05-18 19:51:14

你必须在一个只运行一次的函数中初始化aBaseStats

下面的代码是BAD

代码语言:javascript
运行
复制
public float[] aBaseStats = new float[35];
void Start(){

}

下面的代码是GOOD

代码语言:javascript
运行
复制
public float[] aBaseStats;
void Start(){
aBaseStats = new float[35];
}

在一个只运行一次的编辑器回调函数中初始化它。

编辑:

我不知道会在OnInspectorGUI函数()之前运行的Start回调函数。下面的hack应该可以工作。

代码语言:javascript
运行
复制
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]);

}
票数 4
EN

Stack Overflow用户

发布于 2016-05-18 21:28:53

作为程序员回答的补充,我想向您指出以下几点:

http://docs.unity3d.com/ScriptReference/ExecuteInEditMode.html

这似乎正是您在功能方面所要寻找的。(即使播放模式未激活,它也会运行该方法)

代码语言:javascript
运行
复制
using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
public class ExampleClass : MonoBehaviour {
    public Transform target;
    void Update() {
        if (target)
            transform.LookAt(target);

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37298579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档