unity3d 非執行模式下執行指令碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[ExecuteInEditMode]//在非執行模式下也會執行,改指令碼是更改畫布的拉伸
public class CanvasHelper : MonoBehaviour
{
public float minAspect, maxAspect, minMatch, maxMatch;
private CanvasScaler canvasScaler;
private void Start() { canvasScaler = GetComponent<CanvasScaler>(); Update(); } private void Update() { float aspect = Screen.width / (float)Screen.height; if (aspect > maxAspect) canvasScaler.matchWidthOrHeight = maxMatch; else if (aspect < minAspect) canvasScaler.matchWidthOrHeight = minMatch; else { canvasScaler.matchWidthOrHeight = (aspect - minAspect) / (maxAspect - minAspect) * (maxMatch - minMatch) + minMatch; } }
}
ExecuteInEditMode屬性的作用是在EditMode下也可以執行指令碼。Unity中預設情況下,指令碼只有在執行的時候才被執行,加上此屬性後,不執行程式,也能執行指令碼。
與PlayMode不同的是,函式並不會不停的執行。
Update : 只有當場景中的某個物體發生變化時,才呼叫。
OnGUI : 當GameView接收到一個Event時才呼叫。
OnRenderObject 和其他的渲染回撥函式 : SceneVidw或者GameView重繪時,呼叫。
Awake與Start呼叫規則:
Awake:載入時呼叫。
Start:第一次啟用時呼叫。
這個與執行模式下的呼叫規則一致。參見《unity—–函式執行順序》。
需要注意的是,由於在兩種模式下都可以執行,所有,切換模式的那一刻,值得我們留 意一下。
不管是從編輯模式進入執行模式,還是從執行模式進入編輯模式,unity都會重新載入資源,所以:
當該MonoBehavior在編輯器中被賦於給GameObject的時候,Awake, Start 將被執行。
當Play按鈕被按下游戲開始以後,Awake, Start 將被執行。
當Play按鈕停止後,Awake, Start將再次被執行。
當在編輯器中開啟包含有該MonoBehavior的場景的時候,Awake, Start將被執行。
轉載:https://blog.csdn.net/u012085988/article/details/21445803