一些Unity 3D 的筆記

unity 基礎介面:

Scene 窗口 : 場景視圖, 可以用來對場景中的物體進行編輯

Game 窗口 : 遊戲視圖, 是玩家看到的遊戲視角

Hierarchy 窗口: 層級視圖, 和Scene視圖中的物體一一對應

Inspector 窗口:檢視面板, 顯示當前選重的某個物體的詳細屬性

遊戲物體:是一個或多個組件的集合. 我們可以認為, 所有在SCENE視圖中能被我們看到的和在Hierarchy層級視圖中能被我們選中的都是遊戲物體

組件的概念 :在3D遊戲引擎中, 用來表示遊戲物體所具有的功能. 當遊戲物體具有特定功能的組件時, 這個遊戲物體就具有相應的功能.

常用組件:

Transform : 用來描述物體的座標, 朝向, 縮放 (具有唯一性 單一個物體只能有一個).

Mesh Filter: 網格過濾器, 用來承載(確定)當前遊戲物體身上是甚麼形狀.

Mesh Renderer: 用來渲染遊戲物體的網格.

BoxCollider : 碰撞器組件.

Rigidbody: 鋼體組件; 讓遊戲體具有鋼性, 也可以讓遊戲物體受力的影響而產生變化.

Camera : 可以用來渲染遊戲場景

Light: 燈光組件

組件的常用操作

添加組件: Add Component

移除組件: Remove Component

上移/下移組件 : Move Up / Move Down

複製組件: copy Component

貼上組件為一個新的組件 : Paste Component as New

貼上組件的數值 : Paste Component Values

腳本組件: 需要自己編寫代碼來實現想要實現的功能, 然後可以掛載到遊戲物體身上, 讓遊戲物體具有我們編寫的腳組件所具有的功能

MonoBehaviour : Behaviour : Component : Object

聲明週期函數(事件函數) : Unity 引擎提供給我們的, 在特定時間點執行的特定函數

void Awake() : 在遊戲一開始的時候被執行一次, 先於 Start 函數

void Start() : 在遊戲一開始的時候執行一次

void Update() : 在遊戲開始之後每一畫面刷新禎被執行一次

API:

添加組件 : AddComponent<T>();

查找組件 : GetComponent<T>();

移除組件 : Destroy(Object);

查找組件 :

GameObject.Find(string name); / Game Object

GameObject.FindGameObjectWithTag(string name) / Game Object

GameObject.FindGameObjectsWithTag(string name) / Game Object[]

Rigidbody 剛體

mass : 質量

Drag: 空氣阻力

Angular Drag: 空氣中的角阻力

Use Gravity : 是否啟用重力角

is Kinematic : 是否是運動學剛體 : 如果是, 就不受力的影響而產生 Transform 上的變化, 如果不是 受力的影響的

interpolate: 插值計算, 當剛體在碰撞時, 產生了抖動, 就可以選擇其中之一有效解決抖動

CollisionDetection: 碰撞檢測的連續程度, 如果連續性越高, 碰撞檢測就越精準,同時性能消耗也越大

Constraints: 自由度約束

碰撞的必要條件:

1:想要發生碰撞的遊戲物體必須要有碰撞器組件

2:至少一方 (運動的一方) 帶有剛體組件

3:如果有方式運動學剛體,另外一方必須是非運動學剛體

碰撞檢測

OnCollisionEnter(Collision col)

OnCollisionStay(Collision col)

OnCollisionExit(Collision col)

Collision 碰撞訊息的集合(包含Collider)

觸發發生的必要條件

1.雙方必須帶有碰撞其組件

2.至少一方帶有觸發器組件

3.至少一方(運動的一方) 帶有剛體組件

觸發檢測

OnTriggerEnter(Collision col)

OnTriggerStay(Collision col)

OnTriggerExit(Collision col)

collider 觸發器

射線:端點、方向

射線檢測到的必要條件:必須要有碰撞器組件

private Ray ray;

private RaycastHit hitInfo;

ray = new Ray(Vector3.zero, Vector3.forward);

if(Physics.Raycast(ray, out hitInfo, 100))

{

Debug.Log(hitInfo.transform.gameObject.name);

}

協同程序

進程:每一個EXE應用程式在運行的時候,CPU都會分配給其一個進程

線程:至少都有一個主線程可以有多個輔助線程

協程:Unity 為開發者提供的一種模擬多線程的工具

開啟協程的方式:

StartCoroutine(functionName());

StartCoroutine(“functionName”);

停止協程的方式

如果使用的是 StartCoroutine(functionName()); 開啟協程

必須使用 StopAllCoroutines(); 的方式關閉 (必須全部關閉)

如果使用的是StartCoroutine(“functionName”);開啟協程

可以使用 StopCoroutine(“functionName”); 關閉協程

在協程的執行過程中,必須要保證當前開啟協程的對象不會被內存釋放掉 (Destroy();)

延遲函數

Invoke(“functionName”, sec);

InvokeRepeating(“functionName”,sec, sec);

發佈留言