【笨木头Unity】入门之旅008:Demo之四处找死(三)_触发器

好了,游戏开始进入奇怪的阶段了,接下来我们要在场景里放上地雷,终结这个帅气的BugPlayer吧。

笨木头花心贡献,啥?花心?不,是用心。

转载请注明,原文地址:http://www.benmutou.com/archives/2157

文章来源:笨木头与游戏开发

1.Sphere物体

除了Cube(立方体)之外,我们还可以创建很多种形状的物体。

这里我们需要做一个地雷,地雷是有一个杀伤范围的,或者叫做触发范围,也就是说,特么的判断你是否踩到我了。

通常范围的判断都是用圆形的,而在3D的世界里,就是一个立体的圆形。

所以,我们需要创建一个球体——Sphere。

和创建Cube的方式一毛一样:【Hierarchy】-【3D Object】-【Sphere】

如图:

但是有一个小细节,我们要在Terrain上面点击右键来创建这个物体,这样物体就创建到地形下面了。

还记得当时创建Cube时的情况吗?它会跑到世界的某个角落,很难找,所以我们要把它创建到Terrian的角落。

2.移动球体到BugPlayer的附近

OK,把球体移动到合适的位置,离BugPlayer近一些。

大家看我的操作,移动物体是有个小技巧的,不需要通过箭头来移动,而是通过物体的某个“面”来移动。

大家自己感受吧:

3.地雷和球体有什么关系?

也许大家觉得很奇怪,地雷为什么要用球体来实现?

这是因为,地雷的技能(自爆)是由外界来触发的,特么的你踩我了,我这暴脾气就出来了,这就是自爆。(小若:特么的好有道理)

而触发某个事件需要触发器,并且需要一个范围,刚刚已经解释了,用球体作为范围来判断是否触发事件,是比较合适的。

当然,你喜欢正方体也行、不规则形状也行,越复杂的形状,会越消耗性能。

4.触发器

刚刚我们提到了触发器,这是游戏开发里一个很重要的东西。

而Cube、Sphere等物体都是自带触发器的,正确地说,是碰撞器。

我们先来看看Sphere的碰撞器,如图:

碰撞器也是物体的一个组件,记住,一切都是组件。

Sphere物体的碰撞器就叫做【Sphere Collider】,Cube的碰撞器就叫做【Cube Collider】,只是形状不一样。

不知道大家发现了没有,我偷偷在【Is Trigger】的属性里打勾了。(小若:没看见,被奇怪的东西挡住了)

这个属性是关键,只有勾上这个属性,【碰撞器】才能真正的称之为【触发器】。

有了Is Trigger属性之后,碰撞器就能检查到是否有物体进入了它的范围,并且会触发回调函数。

而我们只需要在回调函数里做我们想做的事情。

5.触发器事件函数

现在这个地雷是假的,因为它没有任何实际效果,要想有实际效果,就得给它一个AI,没错,我们得给它加个脚本。

新建一个脚本文件,命名为..SomethingGGD吧,一些怪怪的东西。

然后把脚本拖到Sphere物体上。

打开SomethingGGD脚本,加入以下三个函数:

  1. public class SomethingGGD : MonoBehaviour {
  2. void Start()
  3. {
  4. Debug.Log("Start");
  5. }
  6. void OnTriggerEnter(Collider other)
  7. {
  8. Debug.Log("OnTriggerEnter");
  9. }
  10. void OnTriggerStay(Collider other)
  11. {
  12. Debug.Log("OnTriggerStay");
  13. }
  14. void OnTriggerExit(Collider other)
  15. {
  16. Debug.Log("OnTriggerExit");
  17. }
  18. }

Start:这个函数在这里是多余的,只是为了验证这个脚本是否生效了。

OnTriggerEnter:当有物体进入我的触发器范围时调用;

OnTriggerStay:当物体在我的触发器范围内停留时,一直调用;

OnTriggerExit:当物体离开我的触发器范围时调用。

三个函数都很好理解,不多说了。

重点是下面要做的事情。

6.让主角去触发 触发器

我们试试主角现在进入地雷范围时,会不会触发这些函数。

但,在这之前,我们的Sphere有点小,几乎看不到它了,把Sphere的Scale属性设大一些,就设为(10,10,10)吧:

OK,运行游戏,看看主角是否能触发这些函数,在运行游戏时,左下角会出现一些日志。

而我们在代码里调用Debug.Log()函数就可以在这个地方打印日志。

现在运行游戏,可以看到日志“Start”,证明这个SomethingGGD脚本是已经在运作的,如图:

但是当我们尝试让主角去撞地雷的时候,却没有任何新的日志输出,这就代表触发器没生效,这是为什么呢?

因为我们的主角并不是一个“刚体”,也就是说,主角不是一个物理对象。

只有物理对象才有碰撞的说法,只有碰撞了才能让触发器生效。

7.给主角添加刚体组件

我们先来给主角添加一个刚体组件:

添加了刚体组件之后,主角就具备一些物体特性了,但实际上我们不需要主角模拟物体特性,我们只是要它能产生碰撞而已。

所以我在创建了刚体组件后,把【Use Gravity】属性的勾给去掉了,这个属性代表主角是否受重力影响。

如果主角受重力影响,那么,主角会一直往下掉的。

OK,再次运行游戏,让主角去撞地雷,这次就能出现日志了:

8.碰撞器

我们一直在说的触发器,其实是碰撞器,碰撞是需要两个碰撞器相互产生的。

如果大家有留意的话,应该能发现BugPlayer身上也是有一个碰撞器(Collider)的:

如果把这个碰撞器从主角身上移除,那么,地雷的碰撞器也就无法发现主角了。

我们来理一理:

1. 要产生碰撞,需要双方都有一个碰撞器,因为这是判断物体是否碰撞的依据,可以理解为,这是一个碰撞范围。

2. 碰撞器只是判断是否碰撞的依据,但是要真正触发碰撞事件,则必须至少有一个物体是具备刚体组件的。

3. 总结:至少存在一个刚体时,才能触发碰撞事件,而判断物体是否碰撞的依据是碰撞器(碰撞器的碰撞范围是可以调整的,比如球体形、立方体形、不规则形状)

好了,关于碰撞,还是需要慢慢理解的,我也只是处于初步了解的状态,不多说。

9.待续

这一篇写得有点多,下次我们来实现什么功能好呢?

要不,我们来炸死主角吧。

本篇源码:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-19 10:35:39

【笨木头Unity】入门之旅008:Demo之四处找死(三)_触发器的相关文章

【笨木头Unity】入门之旅010(完结):Demo之四处找死(五)_UI

UI是游戏里必不可少的元素,在Unity里添加UI是比较轻松的事情,但要玩好它,可就不那么轻松了. 没关系,先入门. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2196 文章来源:笨木头与游戏开发 1.创建UI 很早之前也介绍过怎么创建UI,这里简单再回顾一下. 在Hierarchy窗口中点击右键,依次选择[UI]-[Text]. 我们会看到窗口中,多了一个Canvas和Text: 2.让UI跟随物体移动 由于

【笨木头Unity】入门之旅006:Demo之四处找死(一)_场景和主角

终于把一些基本的东西介绍完了,我不想再介绍无聊的菜单和快捷键了,这些东西大家自己在折腾的过程中慢慢熟悉就好. 有什么不懂的就问度娘,不喜欢度娘的,可以找谷歌. 这次,我们来开始一个很简单的Demo,我突然想到一个游戏,又或者只能叫做Demo. 一个人物,可以四处走动,地图上有很多暗雷,踩到之后会随机产生一些效果(比如加血.掉血.增加防御.小若失去吐槽能力等等). 人物身上当然得有一些UI,这些UI会跟随着人物一起走动. 虽然是个小Demo,但,入门所需的各种操作应该都涉及到了,包括:人物走动(不

【笨木头Unity】入门之旅009:Demo之四处找死(四)_在代码里操作物体

有没有发现越往后写,旁白出现的次数越少? 是的,最近公司出了点小问题,思绪就变得沉重了一些,思绪一沉重,我的精神分裂就很难发作. 不唠叨了,这次我们来试试在代码里操作物体吧,很简单很简单的. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2176 文章来源:笨木头与游戏开发 1.找遍全世界,只为了发现你--FindGameObjectWithTag 还记得很早之前我们介绍的Tag吗?我知道你们肯定不记得的. 先给我

【笨木头Unity】入门之旅007:Demo之四处找死(二)_主角移动和旋转

上一篇我们仅仅是创建了场景和主角,暂时不具备任何玩法. 这次,我们来看看怎么让主角移动起来. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2131 文章来源:笨木头与游戏开发 1.Update,又是Update 似乎游戏开发里总是无法离开Update,我现在的工作不是游戏开发,没法使用Update,导致我非常不习惯. Update是什么?我们把游戏想象成一个大的while循环,每一次循环都会调用一次Update函

【笨木头Unity】入门之旅004:地形初初初级介绍

我突然有点不知所措,Unity的教程果然很难写,我有点不知道该从哪个话题开始写起. 我想,从地形开始写起?这个用的比较多,嗯,就它吧.(小若:不知道为什么,我总感觉好像很随便的样子) 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2063 文章来源:笨木头与游戏开发 为什么标题是[初初初级介绍]?(小若:我知道,你口吃) 因为我个人对地形也不是很熟悉,仅仅是能使用一些基本功能,所以,我也只能给大家介绍基本功能. 对

【笨木头Unity】入门之旅002:不谈对象,咱们谈组件

今天有人问了一个一直以来都让我很纠结的问题:木头为什么长得这么帅?(小若:不就是一个瞎子随便问了个问题嘛,至于吗?) 这,大家以后别问我这个问题了,我真的不知道怎么回答,我尝试过很多变丑的方法,但是都失败了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/archives/2044 文章来源:笨木头与游戏开发 1.还在谈对象?我们这里流行组件 一定有人告诉过你,在面向对象的世界里,一切都是对象. 现在,你要进入Unity的世界了,

【笨木头Unity】入门之旅001:学游泳的第一步是下水

这次的教程更像是我个人的学习记录,所以不一定是从零开始,更多的是,从另一个引擎转战到Unity的教程. 学游泳的第一步,不用说了,必定要下水. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/archives/2035 文章来源:笨木头与游戏开发 1.Unity安装什么的乱七八糟 首先自己想办法找到Unity官网,然后下载安装,这里有个小提示,官方默认下载的是一个下载器,并不是完整安装包. 如果你想下载完整安装包,请点击下载页面的[

[笨木头Unity3D]杂记003·Unity在Android中读取文件

这周被一个问题给折腾了几个晚上,那就是在Android中读取文件,这本是一件很简单的事情,可想象总是美好的. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2094 文章来源:笨木头与游戏开发 1.在电脑上读取文件 首先要解决的当然是在电脑上读取文件了,这个并不难,网上一堆资料. 比如: public static string LoadFile(string filePath) { string url = Ap

【笨木头Lua专栏】基础补充06:简单的错误处理

昨天遇到另外一位独立游戏开发者,所以多聊了一会,然后-然后就没有看书了.(小若:借口!借口!) 今天来聊聊错误处理吧,不过毕竟这只是前面的章节,书上的内容似乎有点一笔带过的味道. 没关系,简单更好~ 笨木头花心贡献,哈?花心?不,是用心~ 转载请注明,原文地址: http://www.benmutou.com/archives/1728 文章来源:笨木头与游戏开发 1.红色警报--error 我们应该能经常看到类似以下的错误信息: [LUA-print] LUA ERROR: [string "