码迷,mamicode.com
首页 > 其他好文 > 详细

OnCollisionEnter和OnTriggerEnter

时间:2019-05-01 11:51:38      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:图片   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!