gpt4 book ai didi

c# - 无法更改附加到游戏对象的脚本上的公共(public)变量。播放时恢复值

转载 作者:太空狗 更新时间:2023-10-29 23:25:17 25 4
gpt4 key购买 nike

这是我的第一个问题。无法找到有关该主题的任何内容。

我想创建一个编辑器脚本来更改附加到游戏对象的脚本中的一些公共(public) bool 值。

我将此脚本附加到游戏对象。 GameObject 是一个预制件:

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;
}
}
}
}

脚本运行良好,游戏对象上的 bool 值在编辑器中设置正确。但是当我按下 PLAY 按钮时,两个 bool 的值切换回它们在应用脚本之前的值。

预制件的值是什么并不重要,这些值只是恢复到应用编辑器脚本之前的值。

我是做错了什么还是错误?

如果我应用编辑器脚本,将场景另存为新场景,然后打开新创建的场景,值也是错误的。

但是,如果 GameObject 不是预制件,则一切正常,并且即使在启动播放模式后,这些值也会保持编辑器脚本给定的值。

所以这个问题只有在使用预制件时才会出现。

最佳答案

您需要在所有更改完成后调用 EditorUtility.SetDirty (tb);,请参阅 EditorUtility.SetDirty有关这方面的更多信息。

如果您需要更改预制件本身,请查看 PrefabUtility

关于c# - 无法更改附加到游戏对象的脚本上的公共(public)变量。播放时恢复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10226044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com