Unity 2017.3:预览脚本在编辑器中创建UI元素

时间:2018-01-17 12:09:33

标签: c# user-interface unity3d

我有一个附加脚本的画布,可以通过编程方式创建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函数来预览对象。

1 个答案:

答案 0 :(得分:0)

void Awake () {
    if (!Application.isPlaying) {
        // Your Code Here.
    }
}

编辑:或

#if UNITY_EDITOR
    // Your Code Here.
#endif

仅当Unity在&#34;编辑器中时才会执行该块。模式而不是&#34;播放&#34;。