这里展示了如何处理和显示血量,如何使用全局变量在多个状态机下传递信息,如何使用类似if的判断,如何进行数据类型转换。


准备工作,血量显示的文本框

unity3d的playmaker插件使用教程,六、血量显示及处理_playmaker


加血的道具

unity3d的playmaker插件使用教程,六、血量显示及处理_playmaker_02


模拟玩家的桶

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_03


首先,新建一个空的Game Object,命名为HealthManager,管理整个过程

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_04


添加Setup、UpdateGUI、AddHealth、Listener状态。
添加Add_Health事件。

unity3d的playmaker插件使用教程,六、血量显示及处理_插件_05


添加全局变量

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_06


如果在添加全局变量的时候,无法添加并出现以下错误

unity3d的playmaker插件使用教程,六、血量显示及处理_unity3d_07


是因为少了一个目录,在Assets\Plugins\PlayMaker目录下添加一个Resources目录即可。

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_08


添加3个全局变量

添加current_health_i存储血量,类型整型

添加current_health_s用于显示血量,类型字符串

添加health_manager用于传递,类型是GameObject

unity3d的playmaker插件使用教程,六、血量显示及处理_playmaker_09


在Health_Cross下添加状态Rotate,添加Rotate动作让十字旋转

unity3d的playmaker插件使用教程,六、血量显示及处理_插件_10


添加判断范围的Cube。

昨天看了下playmaker的网站,说,有统一的父的话可以方便的获取全部的子。好像是这个意思。先照着做吧。

unity3d的playmaker插件使用教程,六、血量显示及处理_playmaker_11


在Cube上添加Setup状态和UpdateHealth状态,添加Health_Pick_Up事件。并在Setup状态下添加Trigger Event动作

unity3d的playmaker插件使用教程,六、血量显示及处理_unity3d_12


在UpdateHealth状态下添加Get Parent动作和Destory Object动作,当玩家接触时,销毁自身。

(这里的selfDestory是之前定义的变量,忘记说了。)

unity3d的playmaker插件使用教程,六、血量显示及处理_全局变量_13


这是,要把玩家触碰到信息发送给HealthManager,添加Send Event动作

unity3d的playmaker插件使用教程,六、血量显示及处理_playmaker_14


这个时候,全局变量health_manager就起作用了,设置如下

unity3d的playmaker插件使用教程,六、血量显示及处理_unity3d_15


这个时候,还需要将HealthManager下的Add_Health事件设置为全局事件,

unity3d的playmaker插件使用教程,六、血量显示及处理_unity3d_16


然后把状态机名填入,并选中全局事件Add_Health。

unity3d的playmaker插件使用教程,六、血量显示及处理_unity3d_17


全局变量health_manager还没赋值,在HealthManager的Setup状态下,添加Get Owner动作,

unity3d的playmaker插件使用教程,六、血量显示及处理_全局变量_18


运行预览,当玩家碰触到加血道具的时候,HealthManager的状态正确触发。

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_19


在HealthManager的Setup状态下,添加动作:Set Int Value,设置血量为50,

unity3d的playmaker插件使用教程,六、血量显示及处理_全局变量_20


在UpdateGUI状态下,添加Convert Int To String动作,转换数据类型,并添加Set GUI Text动作显示血量。

unity3d的playmaker插件使用教程,六、血量显示及处理_全局变量_21


在AddHealth状态下添加动作Int Add,修改血量。

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_22


运行预览,开始状态

unity3d的playmaker插件使用教程,六、血量显示及处理_playmaker_23


接触到加血道具,状态触发,血量显示正确

unity3d的playmaker插件使用教程,六、血量显示及处理_unity3d_24


添加一个减血的平台,就当是火堆啊,怪物放的陷阱啥的就好。

unity3d的playmaker插件使用教程,六、血量显示及处理_playmaker_25


添加Listener、DecreaseHealth状态,

添加decrease_health事件

unity3d的playmaker插件使用教程,六、血量显示及处理_全局变量_26


在Listener状态下添加Trigger Event动作,处理进入

unity3d的playmaker插件使用教程,六、血量显示及处理_unity3d_27


和加血一样,需要在HealthManager下添加Decrease_Health全局事件。

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_28


在Cube火堆这边添加Send Event动作,

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_29


运行预览

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_30


进入Cube时,状态触发正确。

unity3d的playmaker插件使用教程,六、血量显示及处理_unity3d_31


这个时候,当玩家不断拾取加血道具的时候,血量会一直增加,血量小于0也可以继续。

现在来处理这个问题。

由于playmaker插件判断功能的限制,思路如下。
当加完血或减血以后,转到CheckHealth100状态
在这个状态下检测血量是否超过100,
如果超过100,在ResetHealth状态下把血量改回100
如果不超过100,转到CheckHealth0状态下,判断血量是否低于或等于100
当血量小于等于0时,游戏结束。

unity3d的playmaker插件使用教程,六、血量显示及处理_playmaker_32

在CheckHealth100状态添加Int Compare动作,第一个值是血量,第二个值是100,

相等、小于,大于分别触发不同动作。

感觉这一段,写代码来得简单些呢。

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_33


血量超过100时,用Set Int Value动作将血量改回100

unity3d的playmaker插件使用教程,六、血量显示及处理_全局变量_34


当血量小于等于0的时候,游戏结束

unity3d的playmaker插件使用教程,六、血量显示及处理_全局变量_35


游戏结束就简单显示文字好了。

unity3d的playmaker插件使用教程,六、血量显示及处理_全局变量_36


运行预览,当玩家血量到100的时候

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_37


再吃加血道具,血量不变

unity3d的playmaker插件使用教程,六、血量显示及处理_Game_38


当玩家血量小于0,显示Game Over.

unity3d的playmaker插件使用教程,六、血量显示及处理_unity3d_39