本博只为复习知识,纯属博主个人碎碎念,不具有普适性,大神绕道。
说了那么多碰撞器,动画,声音什么的,游戏中常见的字幕还没说过。像我们玩消消乐什么的,是不是都会有分数的变化?那这个是怎么实现的呢?
本节会设计到的有Canvas、Text和Image组件。本节要实现的是:现在要限制玩家自由地进入门中——只有在收集到了全部必要物品的情况下才可以进入门中。通过在玩家进入触发区域时,在屏幕上显示相关的提示,就能让玩家意识到他必须收集完所有能源才能进入房中。
思路如下:
添加能源:
通过预制体,拖动到Hierarchy面板产生GameObject这个就不多说了,当人碰到能量石的时候,能量石就消失,所以能量时要有碰撞器,并且是触发式的。我们想让能量石一直在旋转,因此我们写了一个脚本控制它,意思就是这个能量石绕着Y轴进行旋转:
●rotationSpeed乘上Time.deltaTime的原因还是把以帧为单位变化改为以秒为单位变化。
然后添加碰撞检测的代码:
当游戏场景中有物体进入powerCell触发器碰撞器的区域内,就会触发调用如上函数。函数首先会检测这个物体是否为玩家(Player)。
如果是玩家,我们便通过SendMessage()函数发送一个消息给玩家对象,让其执行自身(玩家对象)脚本中一个名为CellPickup的函数。最后,我们移除场景中的这个能源物体,完成拾取操作。
编写玩家脚本:
我们要把玩家当前所收集到的能源数保存到一个变量charge中,为了确保这个变量可以被其它脚本访问到,我们将把它声明为static(静态变量),静态变量是一种可以被其它脚本访问的全局变量,并且不会像公有变量一样出现在检视面板中。
这点考虑一下c++其实也是一样的, 在c++中如果该类中的某个变量想被其他类中的变量访问,一个方法就是把该变量设置为全局变量,一个方法就是把该变量设置为static。
当我们重新加载或测试同一场景时,变量值可能会被系统保留,因此我们在Start()函数中对其进行初始化,确保程序能正确运行。