zoukankan      html  css  js  c++  java
  • Unity3d碰撞检测中碰撞器与触发器的区别

    要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动。碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞。如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过。

    物体发生碰撞的必要条件

    两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。

    在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器。

    碰撞器: 一群组件,它包含了很多种类,比如:Box Collider(盒碰撞体),Mesh Collider(网格碰撞体)等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上。

    触发器 ,只需要在检视面板中的碰撞器组件中勾选IsTrigger属性选择框。

    触发信息检测:

    1.MonoBehaviour.OnTriggerEnter(Collider collider)当进入触发器

    2.MonoBehaviour.OnTriggerExit(Collider collider)当退出触发器

    3.MonoBehaviour.OnTriggerStay(Collider collider)当逗留触发器

    碰撞信息检测:

    1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器

    2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器

    3.MonoBehaviour.OnCollisionStay(Collision collision)  当逗留碰撞器

    两个物体相接触时到底执行OnTriggerEnter还是执行OnCollisionEnter方法,这两个又有什么区别呢?

    为了验证碰撞器与触发器的区别,现设计一个简单的游戏,让小汽车与小球发生碰撞。新建一个C#脚本文件,把它拖给小汽车对象,双击该脚本文件进入脚本编辑器,在该脚本中加入如下两个方法,并分别设置一个断点:

    当未勾选碰撞器的Is Trigger选项时汽车与球体发生碰撞,进入方法OnCollisionEnter,碰撞之后汽车产生被球体撞飞的效果:

    如果将碰撞器的Is Trigger属性选中,再次启动游戏让球体与汽车产生接触,这时进入方法OnTriggerEnter。之后球体直接穿过汽车,但球体与汽车都没有产生碰撞效果:

    unity3d中的碰撞器和触发器的区别?

    碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性

    当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;

    当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。

    如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器

    例子:

    碰撞器:汽车被撞飞、皮球掉在地上又弹起效果

    触发器:人站在靠近门的位置门自动打开效果





    你以为你在合群,其实你在浪费青春
  • 相关阅读:
    javaHTTP请求工具类-使用HttpURLConnection实现
    windows 无法启动redis 服务(位于本地计算机上)错误1053 服务没有及时响应启动或控制请求
    Redis 教程
    谢娜离开《快本》103天,暴露了芒果一姐的假相:有一种天真,叫错把平台当本事
    Api 在线文档目录:java8 中文、java11中文
    Linux关闭防火墙命令red hat/CentOs7
    Win10使用RedisDesktopManager工具连接虚拟机(CentOS 7)Redis
    如何win10 上访问虚拟机(linux)上redis方法
    汽车车牌JS正则表达式验证(含新能源车牌)
    vue 直接输入路由地址进入_vue地址栏直接输入路由无效问题
  • 原文地址:https://www.cnblogs.com/soviby/p/10013364.html
Copyright © 2011-2022 走看看