MonoBehaviour中的消息非常多,一共有62个!

除了必须关注的脚本生命周期的一系列函数外,还有其他两组比较常混淆的消息:碰撞和触发。

按3D和2D物体区分,又分为碰撞:Collision、Collision2D。触发:Trigger、Trigger2D。

以3D物体为例做了如下实验,分别测试下OnColiisionXXXX碰撞消息和OnTriggerXXXX触发消息的调用情景。

实验模拟:

1.分别创建物体A 和 物体B,使物体A处于物体B上方

2.在物体A有刚体组件的情况下,对物体A添加受力运动(rigidbody.AddForce),在物体A没有刚体组件的情况下,对物体A添加位移运动(transform.Translate)。

3.在物体有刚体组件的情况下,均取消刚体的受重力影响选项。

4.分别对物体A和物体B在不同组合情景下打印碰撞和触发消息,并观察物体穿越情况

实验结果如下:

绿色字体表示:物体A在仅有Collider组件的情况下,使用transfrom.Translate方法位移运动,在某个数值范围内可以发生碰撞和触发消息,而超出这个范围外(速度过慢或过快)都不会发生。

另外在对物体穿越情况做测试时发现,不论是位移运动,还是受力运动,一旦物体运动的速度大于某个临界值时,即使双方都有碰撞体+刚体组件,也都会发生穿越情况。

最后总结下。

发生碰撞消息(OnCollisionXXXX)的情况如下两种:

一个物体:碰撞体+刚体,另一个物体:碰撞体,两个物体都不要勾选IsTrigger。此时最好用带有刚体的物体为运动体,仅带有碰撞体的物体为静态体(避免绿色字体情况发生)。

两个物体均为碰撞体+刚体,两个碰撞体都不要勾选IsTrigger。

发生触发消息(OnTriggerXXXX)的情况如下两种:

一个物体:碰撞体+刚体,另一个物体:碰撞体,两个物体中至少有一个碰撞体勾选IsTrigger。此时最好用带有刚体的物体为运动体,仅带有碰撞体的物体为静态体(避免绿色字体情况发生)。

两个物体均为碰撞体+刚体,两个物体中至少有一个碰撞体勾选IsTrigger。

结论一》触发消息和碰撞消息的前置条件基本相似,只要某个碰撞体勾选了IsTrigger属性,与其发生的所有碰撞都将变为触发。

结论二》碰撞体勾选IsTrigger后,该物体将会与其他物体发生穿越,该方法比较适合用于做一些区域检测传递消息等

结论三》消息的传递都是双向的,两个物体发生碰撞,则两个物体都会获得碰撞消息;两个物体发生触发,则两个物体都会获得触发消息。因此在涉及到多个刚体碰撞体运动的时候,设计一个优雅的类可以在很大程度上避免混乱的逻辑和重复的代码。

补充另外一点。

游戏中主角(玩家、敌人等)如果是人物角色,使用角色控制器。如果是汽车或者飞机之类的,则需要添加刚体,对刚体的运动最好使用rigidbody操作,避免发生某些消息无法传递的情况。

Unity碰撞消息(OnCollisionXXXX)和触发消息(OnTriggerXXXX)的调用情境的更多相关文章

  1. Unity碰撞器触发关系测试

    本文刚体有关的内容不再赘述,主要测试碰撞器和触发器的消息关系. 刚体在这篇有测试:U3D刚体测试1-刚体非刚体物体非Kinematic等之间的碰撞关系 碰撞器测试结果: 1.A对象为Collider, ...

  2. Unity 游戏框架搭建 (五) 简易消息机制

    什么是消息机制? 23333333,让我先笑一会. 为什么用消息机制?   三个字,解!!!!耦!!!!合!!!!. 我的框架中的消息机制用例: 1.接收者 ``` using UnityEngine ...

  3. C# .net微信开发,开发认证,关注触发消息,自动应答,事件响应,自定义菜单

    成为开发者 string[] ArrTmp = { "token", Request["timestamp"], Request["nonce&quo ...

  4. (转)C# .net微信开发,开发认证,关注触发消息,自动应答,事件响应,自定义菜单

    原文地址:http://www.cnblogs.com/qidian10/p/3492751.html 成为开发者 string[] ArrTmp = { "token", Req ...

  5. springboot集成websocket实现向前端浏览器发送一个对象,发送消息操作手动触发

    工作中有这样一个需示,我们把项目中用到代码缓存到前端浏览器IndexedDB里面,当系统管理员在后台对代码进行变动操作时我们要更新前端缓存中的代码怎么做开始用想用版本方式来处理,但这样的话每次使用代码 ...

  6. 【Unity入门】碰撞检测与触发检测

    版权声明:本文为博主原创文章,转载请注明出处. 在Unity里面,游戏物体的碰撞我们可以通过刚体组件(Rigidbody)和碰撞器组件(Collider)来进行检测.首先在场景里面添加一个Plane面 ...

  7. “一切都是消息”--iMSF(即时消息服务框架)入门简介

    “一切都是消息”--这是iMSF(即时消息服务框架)的设计哲学. MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately) ...

  8. =WM_VSCROLL(消息反射) 和 WM_VSCROLL(消息响应)的区别(控件拥有者自己不处这个理消息,而是反射给控件对象本身来处理这个消息)

    =WM_VSCROLL(消息反射) 和 WM_VSCROLL(消息响应)的区别 所谓消息反射就是控件拥有者自己不处这个理消息,而是反射给控件对象本身来处理这个消息 1.“=WM_VSCROLL”是消息 ...

  9. SpringCloud(六) - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)

    1.安装erlang语言环境 1.1 创建 erlang安装目录 mkdir erlang 1.2 上传解压压缩包 上传到: /root/ 解压缩# tar -zxvf otp_src_22.0.ta ...

随机推荐

  1. 【Java并发知识点汇总】

    1,ArrayList 为什么线程不安全(https://www.jianshu.com/p/41be1efe5d65)

  2. Linux中文解决

    中文编码问题 安装中文语言包 locale -a | grep zh 查看是否有中文语言包 local 查看是否 LC_TYPE 为空 在 /etc/profile.d/ 下创建 lc_type.sh ...

  3. Docker 启动 Nginx

    Docker 启动 Nginx 拉取镜像 docker pull nginx:1.17.9 启动步骤 # 创建 nginx 目录 mkdir -p /usr/local/nginx && ...

  4. 《Java核心技术(卷1)》笔记:第12章 并发

    线程 (P 552)多进程和多线程的本质区别:每一个进程都拥有自己的一整套变量,而线程共享数据 (P 555)线程具有6种状态: New(新建):使用new操作符创建线程时 Runnable(可运行) ...

  5. 精讲RestTemplate第4篇-DELETE、PUT等请求方法使用详解

    本文是精讲RestTemplate第5篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  6. C#LeetCode刷题-分治算法

    分治算法篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  7. C#算法设计查找篇之01-顺序查找

    顺序查找(Sequential Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/697 访问. 顺序查找也 ...

  8. 悄咪咪提高团队幸福感 & Surprise!

    前言 本文的灵感是在几个月以前工作不忙(摸鱼)时想到的,老是自己一个人往前冲冲冲也没啥意思,需要想一点办法,来提高团队的效率,提高团队的幸福感(效率起来了,单位时间内代码写的更多,那不就幸福啦 ),经 ...

  9. 调试备忘录-nRF24L01P的使用(教程 + 源码)

    目录--点击可快速直达 MCU:KEAZ64A MDK:CodeWarrior 11.0 目录 写在前面 什么是nRF24L01P? nRF24L01P模块的简单介绍 nRF24L01P的工作模式 n ...

  10. 带你用 Python 实现自动化群控设备

    1. 前言 群控,相信大部分人都不会陌生!印象里是一台电脑控制多台设备完成一系列的操作,更多的人喜欢把它和灰产绑定在一起! 事实上,群控在自动化测试中也被广泛使用!接下来的几篇文章,我将带大家聊聊企业 ...