【发布时间】:2017-01-04 12:27:38
【问题描述】:
我有一个编辑器脚本,它应该允许我更改瓷砖的纹理(我正在制作一个游戏板)。它的工作原理是创建一个具有不同“瓷砖类型”的下拉菜单,然后当我从菜单中选择新的瓷砖类型时,它会将纹理更改为适当的类型。
[CustomEditor(typeof(Tile))]
public class TileEditor : Editor {
enum Type {
Blank,
Portal
}
// Represents the type of tile this is
Type type;
public override void OnInspectorGUI() {
Tile tile = (Tile)target;
// Create a dropdown list of tile types
type = (Type)EditorGUILayout.EnumPopup ("Type", type);
switch (type) {
case Type.Blank:
tile.GetComponent<Renderer> ().material = Resources.Load ("Materials/Blank Tile", typeof(Material)) as Material;
break;
case Type.Portal:
tile.GetComponent<Renderer> ().material = Resources.Load("Materials/Portal Tile", typeof(Material)) as Material;
break;
}
}
}
如果我删除了设置材质的行,下拉菜单会按预期工作,但是包含这些行时,当我从下拉菜单中选择 Portal 时,它会暂时更改纹理,然后纹理和菜单将自己重置回枚举中的第一项(空白)。
这里发生了什么,如何让我的选择持续存在?
编辑
我已经稍微缩小了范围。当我选择 Portal 类型时,它执行 Type.Portal 案例,但随后 type 立即变回 Type.Blank 并执行 Type.Blank 案例。因此,在对OnInspectorGUI() 的调用之间,似乎有些东西正在改变我的type 变量。
【问题讨论】:
-
为什么不发布您的 Tile 脚本?
-
@Programmer 目前是空白的。只是一个空班。
-
好的,你的“Portal Tile”放在什么目录下?
-
@Programmer
Resources/Materials。纹理正确加载,并在图块上显示片刻,然后恢复。 -
有趣。只是想确保 Resources.Load 不为空。我能够复制这个问题。有点奇怪。这看起来像一个错误.....