之前對這兩個的用法不是特別清楚,重新學習了下,再做個測試看看效果如何;
1.新建一個場景test
2.添加一個cube,點擊Inspector面板會發現系統已經默認添加了Box collisder組件。為了增加速度,需添加一個RigidBody,同時去除重力。
3.再添加一個Capsule。
材質用於cube和capsule,以便觀察;
5.新建一個角色的控制腳本PlayerController.CS,完成后掛載到Cube上
1 /*** 2 * 3 * 作用:控制腳本的移動和旋轉 4 * 5 * 6 * 7 */ 8 using System.Collections; 9 using System.Collections.Generic; 10 using UnityEngine; 11 12 public class PlayerController : MonoBehaviour { 13 //移動速度 14 public float FloMovePower=1.0f; 15 //旋轉速度 16 public float FloRotatePower=1.0f; 17 void Update () { 18 //獲取橫向偏移值(按鍵盤A和D時,得到-1到1之間的浮點型值) 19 float floHorizontal=Input.GetAxis("Horizontal"); 20 //獲取縱向偏移值(按鍵盤W和S時,得到-1到1之間的浮點型值) 21 float floVertical=Input.GetAxis("Vertical"); 22 //給角色增加位置的速度 23 this.GetComponent<Rigidbody> ().velocity = this.transform.forward * floVertical*FloMovePower; 24 //給角色增加旋轉的速度 25 this.GetComponent<Rigidbody> ().angularVelocity = this.transform.up * floHorizontal * FloRotatePower; 26 } 27 }
6.再新建一個腳本CollisionTest.CS用於碰撞檢測,完成后掛載到Capsule上。
1 /*** 2 * 3 * 4 * 用於碰撞檢測 5 * 6 * 7 */ 8 using System.Collections; 9 using System.Collections.Generic; 10 using UnityEngine; 11 12 public class CollisionTest : MonoBehaviour { 13 void OnCollisionEnter(Collision col) 14 { 15 print("OnCollisionEnter"); 16 print("Collision's name is "+col.gameObject.name); 17 } 18 void OnCollisionStay(Collision col) 19 { 20 print("OnCollisionStay"); 21 print("Collision's name is "+col.gameObject.name); 22 } 23 void OnCollisionExit(Collision col) 24 { 25 print("OnCollisionExit"); 26 print("Collision's name is "+col.gameObject.name); 27 } 28 29 }
7.開始運行,移動cube到capsule,看下print結果
可以看出,立方體碰到膠囊體發生碰撞檢測,但是兩者沒法穿透。
8.同理,為測試穿透效果,對膠囊體的碰撞器添加一個觸發器(將屬性面板的Is Tigger打鈎)
再運行剛才的代碼發現,OnCollsionEnter已經失效。再增加觸發器的檢測代碼,修改后的CollisionTest.CS如下:
1 /*** 2 * 3 * 4 * 用於碰撞檢測 5 * 6 * 7 */ 8 using System.Collections; 9 using System.Collections.Generic; 10 using UnityEngine; 11 12 public class CollisionTest : MonoBehaviour { 13 void OnCollisionEnter(Collision col) 14 { 15 print("OnCollisionEnter"); 16 print("Collision's name is "+col.gameObject.name); 17 } 18 void OnCollisionStay(Collision col) 19 { 20 print("OnCollisionStay"); 21 print("Collision's name is "+col.gameObject.name); 22 } 23 void OnCollisionExit(Collision col) 24 { 25 print("OnCollisionExit"); 26 print("Collision's name is "+col.gameObject.name); 27 } 28 void OnTriggerEnter(Collider col) 29 { 30 print("OnTriggerEnter"); 31 print("Collider's name is "+col.name); 32 } 33 }
再點擊運行,結果發現兩個游戲對象可以發生穿透,控制台也打印出結果;
以上一點點學習經驗,還要繼續努力,加油!