1. 程式人生 > >Unity 重要基礎知識點

Unity 重要基礎知識點

收集並整理一些基礎知識備忘,順帶分享給小白們

 

指令碼生命週期

//每當指令碼被載入時呼叫一次

// 1.   在Awake中做一些初始化操作

void Awake(){

//初始化public成員

}

// 2.   在每次啟用腳步時呼叫

void OnEnable(){}

//在第一次呼叫Update之前呼叫一次Start,即使取消啟用,再啟用也不會再執行

// 3.   在Start中做一些初始化操作

void Start(){

//一般做一些私有成員

}

// 4.   每幀呼叫一次Update

void Update(){}

// 5.   在Update方法呼叫完之後呼叫

void LateUpdate(){}  //如重新整理完邏輯操作

// 6.   取消啟用狀態後呼叫

void OnDisable(){}

// 7.   腳步被銷燬時呼叫

void OnDestroy(){}  //如怪物死亡爆東西

  

// 8.   持續呼叫  - IMGUI程式碼需要寫在OnGUI 方法中和UGUI,NGUI

void OnGUI(){

}

// 9.   以固定的頻率呼叫,不會受到影象重新整理幀速率的影響

//一般我們會把處理物理的程式碼放在這裡

void FixedUpdate(){}

 

 

 

Input

//n引數 0 滑鼠左鍵

//n引數 1 滑鼠右鍵

//n引數 2  滑鼠中建

Input.GetMouseButtonDown(n)  //檢測滑鼠按鍵按下事件

Input.GetMouseButtonUp(n) //檢測滑鼠按鍵彈起事件

Input.GetMouseButton(n) //檢測滑鼠持續按下的事件

 

 

GameObject

//gameObject 獲取當前指令碼所掛載的遊戲物件

//一般來說,在屬性檢視中能看到或修改的屬性,我們同樣可以在指令碼中獲取並修改

gameObject屬性如

1. name  、tag  、

2. gameObject.activeSelf   //獲取當前遊戲物件的啟用狀態 bool型別

3. gameObject.SetActive   //設定遊戲物件的啟用狀態

//4. 獲取遊戲物件身上的元件 如

controller c = gameObject.GetComponent<objectname>();

//5. 給遊戲物件新增指定型別的元件

Light l = game.AddComponent<Light>();

//6. 通過tag值查詢遊戲物件

GameObject g  = GameObject.FindGameObjectWithTag(“TagName”);

GameObject gg = GameObject.FindWithTag(“TagName”);

//7. 通過遊戲物件名查詢遊戲物件

GameObject g = GameObject.Find(“Object Name”):

g.name = “改名”;

//8. 通過Tag值查詢多個遊戲物件

GameObject [] gs = GameObject.FindGameObjectWithTag(“Object Name”); 

 

//9. 銷燬遊戲物件  可加引數2:延遲時間(s)後銷燬

GameObject.Destroy(gameObject,2f);

 

 

 

 

Vector

1. 一個類,表示向量,向量既有大小又有方向的量

Vector3  v = new  Vector3();

成員方法:

2. //獲取V的單位向量 V的長度會變成1,但方向不變

v.Normalize();

3. //返回V方向上的單位向量,但是V本身不會發生變化

Vector3 vn = v.normalized;

4. //獲取V的長度

float l = v.magnitude;

5. 類方法:

// x=0,y=1,z=0

Vector3.up 表示世界座標系中Y軸正方向的單位向量

// x=0,y=-1,z=0

Vector3.down 表示世界座標系中Y軸負方向的單位向量

// x=1,y=0,z=0

Vector3.right 表示世界座標系中X軸正方向的單位向量

// x=-1,y=0,z=0

Vector3.left 表示世界座標系中X軸負方向的單位向量

// x=0,y=0,z=1

Vector3.forward 表示世界座標系中Z軸正方向的單位向量

// x=0,y=0,z=-1

Vector3.back 表示世界座標系中Z軸負方向的單位向量

// x=0,y=0,z=0

Vector3.zero 表示原點

 

 6. //求兩個向量的夾角 引數都是Vector的物件

float f = Vector.Angle(V1,V2);

7. //求兩個向量的距離

float f = Vector.Distance(V1,V2);

8. //向量點乘

float d = Vector3.Dot (v1,v2);

//兩個向量的叉積

Vector vc  = Vector3.Cross(v1,v2);

 

 

Transform

//獲取當前指令碼所掛載的遊戲物件身上的Transform元件

//transform

1. //控制遊戲物件的位置、旋轉、縮放

//position  屬性 - 世界座標系中的位置

Vector3 pos = transform.position;

2. //localPosition 屬性 - 區域性座標系中的位置

transform.localPosition

3. //一般不直接修改四元數 

transform.rotation

transform.localRotation

4. 快捷鍵:物件

Q平移 W移動 E旋轉 R縮放

5. //localScale - 控制遊戲物件的縮放

Vector3 v = transform.localScale;

6. //變換當前遊戲物件

transform.Translate (new Vector3(0,1,0));

7. //旋轉當前遊戲物件

transform.Rotate (Vector.up,10f);

8. //尤拉角 - 屬性(直接旋轉角度,不會重複旋轉)

transform.eulerAngles = new Vector(0f,45f,0f);  

9. //控制遊戲物件間的父子關係

//獲取/重新指定 當前遊戲物件父物件的transform元件

transform.parent;

10. //獲取當前遊戲物件的根父物件

transform.root;

11. //獲取當前遊戲物件  叫做name 的子物件

transform.Find(“name”);

transform.FineChild(“name”);

 

 

Time

1. //Time類用來進行時間控制

float t = Time.time; (從遊戲開始到當前所用時間)

2. //從上一幀開始到當前幀結束,這兩幀之間的時間間隔

Time.deltaTime

 

3. //讓當前遊戲物件每秒準確地旋轉 30 度

transform.Rotate(Vector3.up , Time.deltaTime * 30f);

4. //表示時間流逝的快慢

// 1 - 表示正常時間流逝

// 2- 表示時間流逝加快,是正常速度的兩倍

// 0 - 表示時間停止,遊戲暫停

float ts = Time.timeScale;

 

Mathf 

1. //求絕對值

int i  = Mathf.Abs(-12);

2. //求最大最小值

int m =  Mathf.Max(12,15,15,17);

int ni = Mathf.Min(12,14);

3. //三角函式

Mathf.Sin();

Mathf.Cos();

Mathf.PI();

Mathf.Sqrt(); //平方根

Prefab 預設體

例子:

public GameObject playerPrefab;  //預設體 從外面掛載進來

Vector pos = new Vector3 ();

pos.y  =  0.5;

pos.x  =  Random.Range(-5f,5f); //給一個範圍隨機數產生座標

pos.z  =  Random.Range(-5f,5f); 

float angle = Random.Range.Range (0f,360f);

1. 動態新增預設體

//引數1:預設體  

引數2:  創建出的遊戲物件初始位置  

引數3:  創建出的遊戲物件初始旋轉角度  四元數旋轉角 (不需要的引數都可不加)

Instantiate (plagerPrefab , pos , Quaternion.AngleAxis (angle, Vector3.up));

2. 若要接收,Instantiate返回的型別是object,所以要轉換

GameObject g =  Instantiate (plagerPrefab , pos , Quaternion.AngleAxis (angle, Vector3.up)) as GameObject;

g.AddComponent<Light>(); 可往新增元件

 

 

滑鼠事件

必須物體的Collider被啟用,否則無法觸發 

1. 當滑鼠點選下去時呼叫

void OnMouseDown(){}

2. 當滑鼠持續按下左鍵不放時呼叫(可在物體外鬆開取消呼叫)

void OnMouseDrag(){}

3. 當滑鼠取消點選時呼叫

void OnMouseUp(){}

4 當滑鼠進入到內部時呼叫

void OnMouseEnter(){}

5. 當滑鼠持續停留在遊戲物件身上時呼叫

void OnMouseOver(){}

6. 當滑鼠離開內部時呼叫

void OnMouseExit(){}

7. 當我們像點選按鈕一樣點選遊戲物件(在物件內部鬆開才能生效,離開物體無效)

void OnMouseUpAsButton

 

 

 

剛體 Rigidbody

剛體使用使物體位移和transform同時使物體位移是不對的,只能使用其中一個

屬性:

Mass質量

Drag空氣阻力

Angular Drag角阻力(旋轉時受的)

Use Gravity 重力影響

Is Kinematic  是否使用運動學

Interpolate 插值 (如物體不停的顫抖時可試用)

內插值 Interpolate

根據上一幀的位置推算這一幀的位置

外插值 Extrapolate

預測下一幀的位置推算這一幀的位置

Constrains Detection 碰撞檢測

Discrete 離散碰撞檢測

Continuous 連續碰撞檢測 (如子彈速度太快,上下幀時已經傳過障礙物,對高速運動)

Continuous Dynamic 連續動態碰撞檢測 (兩個都是高速的碰撞)

Constraints 約束

讓物體在某個軸上無法位移

freezePosition

讓物體在某個軸上無法旋轉

freezeRotation

Rigidbody rb = GetComponent<Rigidbody>();

 

//新增力  力的物體上必須有剛體

要有新增爆炸力指令碼的物件才會受影響

1. //給當前遊戲物件施加一個力

rb.AddForce(new Vector3(0f,10f,0f));

2. //給當前遊戲物件新增力矩/扭矩,扭矩可以使物體旋轉

rb.AddTorque(new Vector3(0f,10f,0f));//y軸施力

3. //給遊戲物件在指定的位置上新增一個力

rb.AddForceAtPosition(new Vector3(0f,10f,0f), new Vector(0.5f,0.5f,0.f));

4. //在指定位置新增一個爆炸力

//引數1:爆炸力大小       引數2:爆炸位置  引數3:爆炸範圍半徑

rb.AddExplosionForce(1500f, Vector.zero,4f);

 

 

Collider

發生碰撞的條件: 

1.雙方都有Collider,2.至少一方有剛體, 3.兩個物體之間發生相互運動

(去碰撞的物體最好要有剛體,否則可能發生穿越,無觸發碰撞 )

1. //碰撞相關的三個事件

//碰撞開始時會呼叫一次

void OnCollisionEnter (Collision other){}

2. //當碰撞持續發生的時候呼叫

void OnCollisionStay (Collision other){//檢測跟誰發生了碰撞

if(string.Equals (“Cube2” , other,gameObject.name))

}

3. //碰撞結束時呼叫一次

void OnCollisionExit (Collision other){}

Trigger

如果Collider中的 is Trigger選中了,那麼該物體無法使用剛體,但能使用觸發器

 

觸發器事件條件

1.雙方有Collider 2.一方勾選Trigger 3.一方有剛體 (或角色體Character)

4.進入觸發範圍後不用一定要有相對運動

觸發器相關的三個事件 //如 CS進入安全區

4. //剛剛進入觸發範圍時呼叫一次

void OnTriggerEnter (Collider other){}

5. //持續待在觸發範圍內會一直呼叫

void OnTriggerStay (Collider other){}

6. //離開觸發範圍時會呼叫一次

void OnTriggerExit (Collider other){}

 

材質

Create -> Physic Material 只有在有Collider得物體上才能新增

Physic Material 物理材質

屬性

Dynamic Friction 動摩擦力  A在B運動受到的摩擦力

Static Friction 靜摩擦力

Bounciness 彈性

彈力摩擦力結合情況

Friction Combine

Bounce Combine

子屬性: Average 平均值

  Minimum 最小值

  Multiply 相乘

  Maximum 最大值

 

更多Unity學習資料請前往paws3d平臺尋找。連結https://www.paws3d.com/learn/,最近又有專業人士直播講解開放世界遊戲關卡設計,詳情可加群935714213