我有一个附加脚本的画布,可以通过编程方式创建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
函数来预览对象。
答案 0 :(得分:0)
void Awake () {
if (!Application.isPlaying) {
// Your Code Here.
}
}
编辑:或
#if UNITY_EDITOR
// Your Code Here.
#endif
仅当Unity在&#34;编辑器中时才会执行该块。模式而不是&#34;播放&#34;。