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。 |