Ruby‘s Adventure学习笔记——地形交互

本文讲解了如何通过Unity实现血包收集和地形伤害的交互效果,包括使用onTriggerEnter2D和onTriggerStay2D触发器、角色生命值变化的管理、道具销毁与无敌时间控制。涉及的知识点包括碰撞检测、脚本通信、持续伤害和无敌状态的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.血包收集

①效果要求:角色走到道具上,发送“血量xx/xx”信息,道具消失;血量为最大值时,不产生效果

②分析:是一个简单的触发器,只需要1次碰撞检测,碰撞后,道具Destory(gameobject);牵扯到角色生命值,需要在角色的cotroller脚本上public一个整数作为计数器,Debug.log()发送信息

③知识点:

1)onTriggerEnter2D检测条件,碰撞双方都有collider,其中一方有rigidbody(最好是运动的一方),rigidbody的isTrigger属性打开

2)涉及到生命值的变化,生命值是角色的属性,所以最好这个ChangHealth(int amount)写在角色的controller脚本上,方便管理。道具脚本需要调用这个函数,可以定义一个controller脚本的类的对象,通过对象,找到public的函数

 controller的类名

 

通过类名定义对象,实现不同脚本之间的函数调用 

 

3)实现“被吃掉”的效果,需要在碰撞检测事件结尾,Destory道具的gameobject

2.地形伤害

 

 ①效果要求:角色走上有伤害判定的地图,生命值减少;持续站在伤害地形,持续掉血;有保护时间,方便操作

②分析:

1)依旧是碰撞检测事件(跟上面的相似),但是持续性的碰撞检测,所以不能用onTriggerEnter2D(只有碰撞的时候检测一次),改用onTriggerStay2D,并把角色的rigidbody上的Sleep Mode改为never sleep

2)保护时间,要求碰撞检测的事件的发生中间要有间隔

根据 onTriggerStay2D的描述,碰撞检测是按帧进行的,所以需要一个开关来控制碰撞事件的发生,一个计时器来计算保护时间

③知识点:保护时间其实就是角色的无敌状态,属于角色的属性,所以这个无敌开关invicible挂在角色身上比较好管理(也可以挂在地形的脚本上,能跑通,但是觉得不太好)

设置一个float变量invicibleTime来设定无敌时间的长短,另设float变量invicibletime作为计时器;bool行变量Isinvicible作为开关。

注意,我们要的效果是控制碰撞事件的发生,所以Isinvicible的判断是放在触发事件(这里是ChageHealth())里面;但是计时器invicibletime的计数是需要在游戏运行时一直进行的,所以放在update里面

 小白做笔记用,请参考使用,欢迎批评指正,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值