yme*_*yds 5 c# unity-game-engine gameobject
这是我的第一个问题。尚未找到有关该主题的任何内容。
我想创建一个编辑器脚本,以更改附加到GameObject的脚本中的一些公共布尔。
我已将此脚本附加到GameObject。GameObject是预制的:
using UnityEngine;
using System.Collections;
public class ScriptWithPublicBools : MonoBehaviour {
public bool b1;
public bool b2;
}
Run Code Online (Sandbox Code Playgroud)
这是我的编辑器脚本:
using UnityEngine;
using System.Collections;
using UnityEditor;
public class EditorHelper : ScriptableObject
{
[MenuItem("Trace/Trace")]
public static void trace()
{
foreach (GameObject g in Selection.gameObjects)
{
ScriptWithPublicBools tb = g.GetComponent<ScriptWithPublicBools>();
if (tb)
{
tb.b1 = false;
tb.b2 = true;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
脚本运行正常,并且在编辑器中正确设置了游戏对象上的布尔值。但是,当我按下“播放”按钮时,两个布尔值将切换回应用脚本之前的值。
预制的值是什么都没有关系,只是在应用编辑器脚本之前将值还原为这些值。
我是在做错什么还是错误?
如果应用编辑器脚本,将场景另存为新场景,然后打开新创建的场景,则值也不正确。
但是,如果GameObject不是预制件,则所有设备都可以完美工作,并且即使在启动游戏模式后,这些值仍保持由编辑器脚本指定的值。
因此,该问题仅在使用预制件时出现。
您需要EditorUtility.SetDirty (tb);在完成所有更改后调用,有关详细信息,请参阅EditorUtility.SetDirty 。
如果您需要更改预制件本身,请查看PrefabUtility
| 归档时间: |
|
| 查看次数: |
12345 次 |
| 最近记录: |