无法更改附加到游戏对象的脚本上的公共变量.游戏时恢复价值
本文关键字:游戏 变量 恢复 脚本 对象 | 更新日期: 2023-09-27 18:31:49
这是我的第一个问题。无法找到有关该主题的任何内容。
我想创建一个编辑器脚本,用于更改附加到游戏对象的脚本中的许多公共布尔值。
我已将此脚本附加到游戏对象。游戏对象是一个预制件:
using UnityEngine;
using System.Collections;
public class ScriptWithPublicBools : MonoBehaviour {
public bool b1;
public bool b2;
}
这是我的编辑器脚本:
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;
}
}
}
}
脚本工作正常,游戏对象上的布尔值在编辑器中设置正确。但是当我按下 PLAY 按钮时,两个布尔值会切换回应用脚本之前的值。
预制件的值是什么并不重要,这些值只是在应用编辑器脚本之前恢复为值。
我做错了什么还是错误?
如果我应用编辑器脚本,将场景另存为新场景,然后打开新创建的场景,则值也是错误的。
但是,如果游戏对象不是预制件,则一切正常,并且即使在启动游戏模式后,这些值也会保留编辑器脚本给出的值。
因此,仅在使用预制件时出现问题。
您需要在所有更改完成后调用EditorUtility.SetDirty (tb);
,请参阅 EditorUtility.SetDirty 以获取更多信息。
如果您需要更改预制件本身,请查看预制件实用程序