首页 > 解决方案 > 使用脚本在运行时之外创建/更改游戏对象

问题描述

我有一个预制件,它在我的游戏中多次使用(它不会在运行时实例化,我只通过将预制件拖到场景视图中来构建我的关卡)。在这个预制件内有许多位置,其中写入了特定的文本。该文本对于每个预制件都是唯一的。

所以,它就像:

实例A

实例B

等等 ...

目前,我看到了两种选择:

  1. 我在每个实例中手动更改每个文本。这会起作用,但有点烦人,我也可以看到我犯了错误(比如拼写错误或忘记更改其中一个文本)。
  2. 我通过脚本解决它并更改 Awake 或 Start 方法中的文本。这会起作用,但每次我开始游戏时都必须这样做。

我希望的是像 2 那样的解决方案)但不是每次都(因为没有任何变化,它每次都一样)但只有一次 - 所以它是由脚本生成的,但在那之后,它会一直存在。即使我不在运行时,只是在场景视图中工作。

你知道有什么方法可以完成这样的事情吗?

谢谢!

标签: c#unity3d

解决方案


如果您希望在运行时之外运行一段代码,您可以使用以下两个选项之一。

OnValidate 方法

OnValidateMonoBehaviour当您的脚本被加载或检查器值已更改时触发。

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

推荐阅读