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

1.血包收集

Ruby‘s Adventure学习笔记——地形交互_第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.地形伤害

 Ruby‘s Adventure学习笔记——地形交互_第2张图片

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

②分析:

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

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

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

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

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

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

Ruby‘s Adventure学习笔记——地形交互_第3张图片

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

你可能感兴趣的:(unity3d)