c# - 使用脚本在运行时之外创建/更改游戏对象
问题描述
我有一个预制件,它在我的游戏中多次使用(它不会在运行时实例化,我只通过将预制件拖到场景视图中来构建我的关卡)。在这个预制件内有许多位置,其中写入了特定的文本。该文本对于每个预制件都是唯一的。
所以,它就像:
实例A
- TextA(在实例内多次)
实例B
- TextB(在实例内多次)
等等 ...
目前,我看到了两种选择:
- 我在每个实例中手动更改每个文本。这会起作用,但有点烦人,我也可以看到我犯了错误(比如拼写错误或忘记更改其中一个文本)。
- 我通过脚本解决它并更改 Awake 或 Start 方法中的文本。这会起作用,但每次我开始游戏时都必须这样做。
我希望的是像 2 那样的解决方案)但不是每次都(因为没有任何变化,它每次都一样)但只有一次 - 所以它是由脚本生成的,但在那之后,它会一直存在。即使我不在运行时,只是在场景视图中工作。
你知道有什么方法可以完成这样的事情吗?
谢谢!
解决方案
如果您希望在运行时之外运行一段代码,您可以使用以下两个选项之一。
OnValidate 方法
OnValidate
MonoBehaviour
当您的脚本被加载或检查器值已更改时触发。
using UnityEngine;
public class TestScript : MonoBehaviour
{
private void OnValidate()
{
Debug.Log("test");
}
}
ExecuteInEditMode 属性
添加ExecuteInEditMode
到一个MonoBehaviour
类将使它在运行时和运行时之外都起作用。如果您不希望脚本在运行时运行,也可以随意使用Application.isPlaying
.
using UnityEngine;
[ExecuteInEditMode]
public class TestScript : MonoBehaviour
{
private void Update()
{
if (!Application.isPlaying)
Debug.Log("test");
}
}
推荐阅读
- javascript - Rust wasm:如何访问当前实例的 Webassembly.Memory(来自 Rust)?
- react-datepicker - 为什么“时刻”在这里未定义?
- python - 如何将此字符串从列表转换为二进制?
- html - 如何从顶部中心剪切图像并在那里添加一个标志,其中一半在导航栏中,一半在横幅中,如下所示
- swift - 调用 didSet 时 UILabel.text 未更新
- optimization - 如何在 SCIP 中显示截断的信息?
- php - JS:当第一个选择选项值为“选择开始时间”时禁用第二个选择选项
- ios - Flurry IOS SDK 错误 - 未定义符号:___isPlatformVersionAtLeast
- powershell - 加快脚本创建的 Powrshell 模板
- swift - 如何设置 SKSpriteNode 图像以填充屏幕