1. 程式人生 > 其它 >SiKi學院 Unity中常用api學習筆記(001-014)

SiKi學院 Unity中常用api學習筆記(001-014)

Api應用程式程式設計介面

前言

筆記是看siki學院中《Unity中常用api》的學習筆記

課程地址:http://www.sikiedu.com/my/course/59

強烈推薦大家去看老師的課

學習方法(001)

學習中切忌死記硬背,尤其是在學習程式碼中,要實際動手操作一下。

常用的方法經常使用,不常用的方法留下印象(看Unity文件和api手冊)。

什麼是事件函式(002)

unity中建立的所有指令碼,都預設繼承MonoBehaviour。

MonoBehavior——Behavior——Component——Object(繼承關係)

預設有Start()方法 開始執行一次;和Update()方法 每幀可執行多次

事件函式的執行順序(Unity中文手冊):https://docs.unity.cn/cn/current/Manual/ExecutionOrder.html

事件函式的執行時機和先後順序(004)

1.Editor

Reset函式,編輯前就會呼叫執行。

2.Initialization

Awake函式,Onenable函式(onDisable函式後也可以呼叫),Start函式在場景啟用或者物體被例項化後,就會被呼叫。

3.Physics

FixedUpdate函式,每秒固定呼叫一定次數(多次)。//與幀數不掛鉤

OnTriggerXXX函式,OnCollisionXXX函式;(用於觸發器和碰撞器)

yleldWaltForFixedUpdate函式。

4.Inputevents

OnMouseXXX函式,輸入事件(滑鼠)。

5.Gamelogic

Update函式,每幀執行一次函式。

(Internalanimatiomupdate)

LateUpdate函式

6.Scenerendering

(與場景渲染有關的函式)

7.Gizmorendering

OnDrawGizmos函式,輔助線

8.GUIrendering

OnGUI函式,(現在基本不用,用UGI)

9.Pausing

OnApplicationPause函式,暫停的時候執行

10.Disable/enable

OnDisable函式

11.Decommissioning

退出場景時運用,物體會被銷燬

OnApplicationQuit函式,OnDisable函式,OnDestroy函式。

Time類中的靜態變數介紹(005)

Unity中文手冊(Time類):https://docs.unity.cn/cn/current/ScriptReference/Time.html

captureFramerate減慢遊戲播放時間,以便在幀之間儲存螢幕截圖。
deltaTime完成上一幀所用的時間(以秒為單位)(只讀)。
fixedDeltaTime執行物理和其他固定幀率更新(如 MonoBehaviour 的 FixedUpdate)的時間間隔(以秒為單位)。
fixedTime最近一次 FixedUpdate 已啟動的時間(只讀)。此為自遊戲啟動以來的時間(以秒為單位)。
fixedUnscaledDeltaTime從上一個固定幀到當前固定幀的獨立於 timeScale 的時間間隔(以秒為單位)(只讀)。
fixedUnscaledTime最近一次 FixedUpdate 已啟動的獨立於 TimeScale 的時間(只讀)。此為自遊戲啟動以來的時間(以秒為單位)。
frameCount已經過的總幀數(只讀)。
inFixedTimeStep如果在固定時間步長回撥(如 MonoBehaviour 的 FixedUpdate)內呼叫,則返回 true,否則返回 false。
maximumDeltaTime幀可以耗用的最長時間。物理和其他固定幀率更新(如 MonoBehaviour 的 FixedUpdate)將僅在每幀的該持續時間內執行。
maximumParticleDeltaTime幀可以在粒子更新上耗用的最長時間。如果幀耗用的時間超過該值,則將更新拆分為多個較小的更新。
realtimeSinceStartup遊戲開始以來的實際時間(只讀)。
smoothDeltaTime經過平滑處理的 Time.deltaTime(只讀)。
time該幀開始的時間(只讀)。此為自遊戲啟動以來的時間(以秒為單位)。
timeScale時間流逝的縮放。可用於慢動作效果。
timeSinceLevelLoad該幀開始以來的時間(只讀)。此為自載入上一個關卡以來的時間(以秒為單位)。
unscaledDeltaTime從上一幀到當前幀的獨立於 timeScale 的時間間隔(以秒為單位)(只讀)。
unscaledTime該幀的獨立於 timeScale 的時間(只讀)。此為自遊戲啟動以來的時間(以秒為單位)。

TimedeltaTime和realTimeSinceStartup的使用(006)

Time.deltaTime

時間間隔,一般用來控制一些動畫效果;比如移動物體可以:Vector3.forward*Time.deltaTime來控制3D物體的移動。

Time.timeScale

控制時間的倍數。(控制Time和deltaTime)

Time.realTimeSinceStartup

計算遊戲開始執行到現在時間,可用於效能測試,比如:

float time1 = Time.realTimeSinceStartup;
for(int i; i < 10000; i++)
{
method();
}
float time2 = Time.realTimeSinceStartup;
Debug.Log(time2 - time1);

建立遊戲物體的三種方法(007)

構造方法

new

在Start函式中new一個GameObjective。(空的遊戲物體)比如:GameObjectgo =new GameObject("Cube")

Instantiate

根據prefab進行例項化(預設一個遊戲物體)比如:GameObject.Instantiate(prefab)

或者可以克隆其他物體。

CreatePrimitive

建立一些原始的圖形,比如:GameObject.CreatePrimitive(PrimitiveType.Plane)

還可以是Capsule ,Cube ,Cylinder ,Plane ,Quad ,Sphere。

如何給遊戲物體通過程式碼新增元件(008)

可以新增內部元件,也可以新增自定義的指令碼

GameObjectgo =new GameObject("Cube")
go.AddComponent<Rigidbody>();  //新增剛體元件
go.RemoveComponent<Rigidbody>();//移除元件

如何禁用和啟動一個遊戲物體(009)

tag 標籤(區分不同的遊戲物體);transform物體的位置;

activeInHerit是否處於**狀態;activeSelf物體是否被禁用(子物體在父物體下有關)

GameObject go = new GameObject();
go.SetActive(false);  //禁用物體
go.SetActive(true);  //**物體

GameObject、Component和Object的千絲萬縷的關係(010)

UnityEngine下Object用有的靜態方法(011)

Unity中文手冊(UnityEngine下Object):

https://docs.unity.cn/cn/current/ScriptReference/Object.html

變數

hideFlags該物件應該隱藏、隨場景一起儲存還是由使用者修改?
name物件的名稱。

公共函式

GetInstanceID返回物件的例項 ID。
ToString返回 GameObject 的名稱。

靜態函式

Destroy刪除 GameObject、元件或資源。
DestroyImmediate立即銷燬物件 /obj/。強烈建議您改用 Destroy。
DontDestroyOnLoad在載入新的 Scene 時,請勿銷燬 Object。
FindObjectOfType返回第一個型別為 type 的已載入的**物件
FindObjectsOfType返回所有型別為 type 的已載入的**物件的列表。
Instantiate克隆 original 物件並返回克隆物件。

運算子

bool該物件是否存在?
operator !=比較兩個物件是否引用不同的物件。
operator ==比較兩個物件引用,判斷它們是否引用同一個物件。

GameObject獨有的靜態方法(012)

Unity中文手冊(UnityEngine下GameObject):

https://docs.unity.cn/cn/current/ScriptReference/GameObject.html

變數

activeInHierarchy定義 GameObject 在 Scene 中是否處於活動狀態。
activeSelf此 GameObject 的本地活動狀態。(只讀)
isStatic僅限 Editor 的 API,指定遊戲物件是否為靜態。
layer該遊戲物件所在的層。
scene該 GameObject 所屬的場景。
tag此遊戲物件的標籤。
transform附加到此 GameObject 的 Transform。

建構函式

GameObject

建立一個名為 name 的新遊戲物件。

靜態函式

CreatePrimitive建立一個具有原始網格渲染器和相應碰撞體的遊戲物件。
Find按 name 查詢 GameObject,然後返回它。
FindGameObjectsWithTag返回標記為 tag 的活動 GameObject 的列表。如果未找到 GameObject,則返回空陣列。
FindWithTag返回一個標記為 tag 的活動 GameObject。如果未找到 GameObject,則返回 null。

遊戲物體間訊息的傳送和接收(013)

Unity中文手冊(UnityEngine下GameObject):

https://docs.unity.cn/cn/current/ScriptReference/GameObject.html

Message類

BroadcastMessage呼叫此遊戲物件或其任何子項中的每個 MonoBehaviour 上名為 methodName 的方法。(廣播訊息)
SendMessage呼叫此遊戲物件中的每個 MonoBehaviour 上名為 methodName 的方法。
SendMessageUpwards呼叫此遊戲物件中的每個 MonoBehaviour 上或此行為的每個父級上名為 methodName 的方法。

得到元件的各種方法函式(014)

Unity中文手冊(UnityEngine下GameObject):

https://docs.unity.cn/cn/current/ScriptReference/GameObject.html

AddComponent將名為 className 的元件類新增到該遊戲物件。
CompareTag此遊戲物件是否使用 tag 進行了標記?
GetComponent如果遊戲物件附加了型別為 type 的元件,則將其返回,否則返回 null。
GetComponentInChildren使用深度首次搜尋返回 GameObject 或其任何子項中型別為 type 的元件。
GetComponentInParent返回 GameObject 或其任何父項中型別為 type 的元件。
GetComponents返回 GameObject 中型別為 type 的所有元件。
GetComponentsInChildren返回 GameObject 或其任何子項中型別為 type 的所有元件。
GetComponentsInParent返回 GameObject 或其任何父項中型別為 type 的所有元件。
SetActive根據給定的值 true 或 /false/,**/停用 GameObject。