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

工欲善其事必先利其器,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了。

Unity3D学习笔记(十六)血条的实现_第1张图片 

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


  • 创建两个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(需要获取数值的目标生物)

Unity3D学习笔记(十六)血条的实现_第2张图片


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

  • 通过修改贴图的宽度来实现进度条的功能,以血条为例,若100%生命值时HealthBar的贴图宽度为Width, 当生命值为x%时,只要修改HealthBar的宽度为Width*x%即可。
  1. HealthBar.pixelInset = new Rect()
  2. {
  3. x = HealthBar.pixelInset.x,
  4. y = HealthBar.pixelInset.y,
  5. width = m_StandardHealthBarWidth * Creature.Health / Creature.MaxHealth,
  6. height = HealthBar.pixelInset.height, 
  7. };
复制代码

  • 在Update中除了要加入实时修改进度条宽度的功能外,还要再加入实时改变状态文本的功能: HealthText.text = string.Format(“{0:f0}/{1:f0}”, Creature.Health, Creature.MaxHealth);
测试运行一下游戏,PlayerFrame已经能够正确地反应出FirstPersonController这个生物的属性值了。但是由于一直是满生命状态,看不出之前编写血条代码的正确性。赞一下Unity的即时修改参数功能,直接在测试运行游戏的状态下调整生命值属性,在测试游戏视图中会立即变更,并且在停止测试后又会还原到初始值:

Unity3D学习笔记(十六)血条的实现_第3张图片 

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

所以想成为一个优秀的游戏制作人,各方面的能力都必须不求专家但求行家……如此这般才能更精确地把控风险,长路漫漫其修远兮,吾将上下而求索。

你可能感兴趣的:(Unity3D学习笔记(十六)血条的实现)