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 最大值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM