标签:图片 spec 场景 system box 浮点 object onenter void
之前对这两个的用法不是特别清楚,重新学习了下,再做个测试看看效果如何;
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 }
再点击运行,结果发现两个游戏对象可以发生穿透,控制台也打印出结果;
以上一点点学习经验,还要继续努力,加油!
OnCollisionEnter和OnTriggerEnter
标签:图片 spec 场景 system box 浮点 object onenter void
原文地址:https://www.cnblogs.com/jyddpen/p/10799341.html