【问题标题】:Unity 2017.3: Preview script created UI elements in editorUnity 2017.3:预览脚本在编辑器中创建了 UI 元素
【发布时间】:2018-01-17 12:09:32
【问题描述】:

我有一个带有附加脚本的画布,它以编程方式创建 UI。我想要实现的是能够在编辑器中看到 UI。我试图将这个类标记为[ExecuteInEditMode],但问题是每次进入播放模式时都会调用我创建 UI 的Awake 方法,因此会创建 UI 元素的新副本和新副本,并且永远不会删除它们。

这是我正在使用的示例代码:

[ExecuteInEditMode]
public class InGameCanvas : MonoBehaviour {
    protected InGameCanvas() { }

    private Canvas canvas;

    private void Awake() {
        if ((canvas = gameObject.GetComponent<Canvas>()) == null) {
            Debug.LogError("InGameCanvas script not connected to a Canvas.");
            return;
        } 

        var balanceTextObject = new GameObject("BalanceText");
        balanceTextObject.transform.SetParent(gameObject.transform);
        var balanceText = balanceTextObject.AddComponent<Text>();
        var balanceTextTransform = balanceTextObject.GetComponent<RectTransform>();

        balanceText.text = "Balance: 0";
        balanceText.font = Defaults.consolasFont;

        balanceTextTransform.sizeDelta = new Vector2(100, 20);
        balanceTextTransform.pivot = new Vector2(0, 1);
        balanceTextTransform.anchorMin = new Vector2(0, 1);
        balanceTextTransform.anchorMax = new Vector2(0, 1);

        balanceTextTransform.anchoredPosition = new Vector2(10, -10);
    }
}

我还希望能够预览脚本创建的其他一些对象,因为它们将在播放模式下运行,但我遇到了同样的问题。 [ExecuteInGameMode] 还说,它也会运行脚本的其他代码,我真的不需要。我只需要在编辑器中运行Awake 函数来预览对象。

【问题讨论】:

    标签: c# user-interface unity3d


    【解决方案1】:
    void Awake () {
        if (!Application.isPlaying) {
            // Your Code Here.
        }
    }
    

    编辑:或者

    #if UNITY_EDITOR
        // Your Code Here.
    #endif
    

    仅当 Unity 处于“编辑器”模式而不是“播放”时才会执行该块。

    【讨论】:

    • 你没有写一个简单的词来解释或者为什么你的解决方案应该是正确的
    • 你试过了吗?
    • 另外,如果我理解正确,你的建议,这根本解决不了任何问题。它会在编辑器中显示,但是当应用程序在实际产品中启动时,它会跳过创建代码。
    • 在我退出播放模式后它也在创建副本。
    • 我改变了答案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2018-10-03
    相关资源
    最近更新 更多