这里展示了如何处理和显示血量,如何使用全局变量在多个状态机下传递信息,如何使用类似if的判断,如何进行数据类型转换。
准备工作,血量显示的文本框
加血的道具
模拟玩家的桶
首先,新建一个空的Game Object,命名为HealthManager,管理整个过程
添加Setup、UpdateGUI、AddHealth、Listener状态。
添加Add_Health事件。
添加全局变量
如果在添加全局变量的时候,无法添加并出现以下错误
是因为少了一个目录,在Assets\Plugins\PlayMaker目录下添加一个Resources目录即可。
添加3个全局变量
添加current_health_i存储血量,类型整型
添加current_health_s用于显示血量,类型字符串
添加health_manager用于传递,类型是GameObject
在Health_Cross下添加状态Rotate,添加Rotate动作让十字旋转
添加判断范围的Cube。
昨天看了下playmaker的网站,说,有统一的父的话可以方便的获取全部的子。好像是这个意思。先照着做吧。
在Cube上添加Setup状态和UpdateHealth状态,添加Health_Pick_Up事件。并在Setup状态下添加Trigger Event动作
在UpdateHealth状态下添加Get Parent动作和Destory Object动作,当玩家接触时,销毁自身。
(这里的selfDestory是之前定义的变量,忘记说了。)
这是,要把玩家触碰到信息发送给HealthManager,添加Send Event动作
这个时候,全局变量health_manager就起作用了,设置如下
这个时候,还需要将HealthManager下的Add_Health事件设置为全局事件,
然后把状态机名填入,并选中全局事件Add_Health。
全局变量health_manager还没赋值,在HealthManager的Setup状态下,添加Get Owner动作,
运行预览,当玩家碰触到加血道具的时候,HealthManager的状态正确触发。
在HealthManager的Setup状态下,添加动作:Set Int Value,设置血量为50,
在UpdateGUI状态下,添加Convert Int To String动作,转换数据类型,并添加Set GUI Text动作显示血量。
在AddHealth状态下添加动作Int Add,修改血量。
运行预览,开始状态
接触到加血道具,状态触发,血量显示正确
添加一个减血的平台,就当是火堆啊,怪物放的陷阱啥的就好。
添加Listener、DecreaseHealth状态,
添加decrease_health事件
在Listener状态下添加Trigger Event动作,处理进入
和加血一样,需要在HealthManager下添加Decrease_Health全局事件。
在Cube火堆这边添加Send Event动作,
运行预览
进入Cube时,状态触发正确。
这个时候,当玩家不断拾取加血道具的时候,血量会一直增加,血量小于0也可以继续。
现在来处理这个问题。
由于playmaker插件判断功能的限制,思路如下。
当加完血或减血以后,转到CheckHealth100状态
在这个状态下检测血量是否超过100,
如果超过100,在ResetHealth状态下把血量改回100
如果不超过100,转到CheckHealth0状态下,判断血量是否低于或等于100
当血量小于等于0时,游戏结束。
在CheckHealth100状态添加Int Compare动作,第一个值是血量,第二个值是100,
相等、小于,大于分别触发不同动作。
感觉这一段,写代码来得简单些呢。
血量超过100时,用Set Int Value动作将血量改回100
当血量小于等于0的时候,游戏结束
游戏结束就简单显示文字好了。
运行预览,当玩家血量到100的时候
再吃加血道具,血量不变
当玩家血量小于0,显示Game Over.