您的位置:首页 > 移动开发 > Unity3D

Unity3D学习笔记(十六)血条的实现

2016-02-23 17:49 781 查看
工欲善其事必先利其器,MonoDevelop实在不太符合我的口味,虽然提供了VS的语法高亮,但是对类名的高亮识别却不尽如人意。最大的问题还是因为我找不到快速格式化代码缩进的快捷键—___—!由于家里的机子经常莫名其妙抽风,导致我养成了有事没事Ctrl+E+D(自动排版)然后再Ctrl+S(快速保存)的强迫症。

在Unity的主菜单Edit→Preferences→External Tools→External Script Editor里可以设置默认的脚本编辑器,点击Browse浏览,并找到Visual Studio 2010的安装目录,选择devenv.exe即可。比如我的安装环境是64位Win7,装在D盘后路径为:

D:Program Files (x86)Microsoft Visual Studio 10.0Common7IDEdevenv.exe

成功选择好exe后就可以在列表中选择Microsoft Visual Studio 2010了。



有了趁手的工具后再回到正题,开始血条的制作:

创建两个GUI文本和两个GUI贴图,分别用来显示生物的生命值和能量值,贴图在之前我已经创建过了,因此只需要再创建文本和设置字体风格、位置之类的了。

创建一个Creature脚本组件,以后如果要添加新的怪物或者敌人,还可以重复利用这个组件。 其中包含: Health(生命值) Max Health(最大生命值) Power(能量值) Max Power(最大能量值)。



目前暂时把这个脚本附加到First Person Controller上。

注意:如果要让脚本参数能够在Unity编辑器的检视面板中设置,脚本中声明的成员变量必须为public,且不可以使用自动属性(get/set访问器),否则在Unity编辑器的检视面板中不会显示出来。

创建一个PlayerFrame脚本组件,用来获取玩家信息,并实时更新玩家头像框体的状态。 其中包含: Health Bar(生命GUI贴图) Health Text(生命GUI文本) Power Bar(能量GUI贴图) Power Text(能量GUI文本) Creature(需要获取数值的目标生物)



把这个脚本附加到层次面板中的PlayerFrame游戏对象,并且把第一个步骤中的对象拖放到相应的位置。

通过修改贴图的宽度来实现进度条的功能,以血条为例,若100%生命值时HealthBar的贴图宽度为Width, 当生命值为x%时,只要修改HealthBar的宽度为Width*x%即可。

HealthBar.pixelInset = new Rect()

{

x = HealthBar.pixelInset.x,

y = HealthBar.pixelInset.y,

width = m_StandardHealthBarWidth * Creature.Health / Creature.MaxHealth,

height = HealthBar.pixelInset.height,

};

复制代码

在Update中除了要加入实时修改进度条宽度的功能外,还要再加入实时改变状态文本的功能: HealthText.text = string.Format(“{0:f0}/{1:f0}”, Creature.Health, Creature.MaxHealth);

测试运行一下游戏,PlayerFrame已经能够正确地反应出FirstPersonController这个生物的属性值了。但是由于一直是满生命状态,看不出之前编写血条代码的正确性。赞一下Unity的即时修改参数功能,直接在测试运行游戏的状态下调整生命值属性,在测试游戏视图中会立即变更,并且在停止测试后又会还原到初始值:



其实本文中的Creature脚本还大有文章可以做,比如可以让生物支持经验值、等级、攻击防御等等,不怕做不到就怕想不到。另外虽然我使用这样的方法来制作血条的效果,只能当作一个参考思路,不能局限于这么一种方式。不过正因为同一个制作目标,而实现方式却有千千万万,多种游戏策划需求交错在一起,才导致游戏的制作成本和进度难以预估。

所以想成为一个优秀的游戏制作人,各方面的能力都必须不求专家但求行家……如此这般才能更精确地把控风险,长路漫漫其修远兮,吾将上下而求索。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: