1. 程式人生 > >unity3d 非執行模式下執行指令碼

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