【发布时间】: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