游戏名称:秘密行动,也就是类似于合金弹头。
游戏是在泰课在线老师的讲解下完成的。由于自己是第一次尝试做游戏,所以很多不懂的地方,还有很多Bug没有解决。写下播客是一方面是记录这个过程,一方面是提升下自己的专业知识。
一.登录界面
这方面包括搭建登录界面的UI,添加动画,控制UI逻辑,添加声音管理
登录界面UI:
在将资源全导入之后开始,首先Assets目录下创建会用到的Folder,例如Scenes,Prefabs等,一定要养成良好的习惯。
然后该游戏创建了两个场景,一个用来登录UI展示,一个用来游戏内容展示。创建游戏场景的时候不要忘记添加索引,方便后期切换场景。下图是我的场景:
注意:
场景不要忘记在Build Settings中导入,因为自己在UI控制脚本中切换场景的时候没有首先导入场景,所以出现了错误。
接下来在第一个场景中也就是索引为0的场景中创建相应的UI。第一个登录界面展示如下图:
在Hierarchy中创建Image,Button,拖拽相应的贴图资源。因为游戏UI界面需要实现点击上图的Play按钮实现切换到下一个UI界面,所以在第一个UI界面下继续创建相应的Image和Button。下图是第二个UI界面展示。
Hierarchy界面如下:
Operation就是另一个UI。在这已经将所有的UI效果展示了出来,接下来该考虑怎么点击图中的Play按钮实现UI切换。于是在这我创建了一个Manager空物体。在空物体中添加了相应的C#脚本。
因为游戏一开始是显示第一个UI,所以应该将第二个UI手动隐藏掉。那么意味着在脚本中需要将Operation设置为true。才能切换之后展示出Operation的效果。在脚本中第一步应该是切换到第二个UI,所以应该具备一个公开的方法。
public void OnPlay1Click() {
Operation.SetActive(true);
}
除了在脚本中提供这个公开的方法以外还需要在Inspector中给该按钮的On Click赋值。如图:
在此方法之前需要Public GameObject operation;
此外补充一点:
上图出现的子弹孔是一个接一个出现的,也就是在第一个出现完成后第二个出现,依次类推。实现这个效果的方法;导入DoTween,点击子弹孔在Inspector中添加DoTweenAnimation脚本。此时Inspector中会出现Event,在Event中选择OnComplete,将下个要显示的子弹孔拖入,并且改变它们的SetActive为true。如图:
二,UI界面声音管理
关于声音的管理,首先需要提供一个管理音效的脚本,在这个脚本中存放的是一些播放背景音乐或者一些特效的音乐。这个音乐管理的脚本最好设置成为单例模式。
有关于声音的:AudioSource,AudioClip,AudioListener。
AudioSource:
表示在3D空间中的音频源。
AudioSource附加到一个GameObject用于在3D环境中播放声音。单声道声音以3D播放。为了播放3D声音,也需要有一个AudioListener。音频监听器通常附加在使用的相机上。立体声总是不以距离为基础衰减。你可以使用Play,Pause,Stop来播放音频剪辑。也可以在播放时使用volume属性调整音量,或者使用time来定位。多个声音可以使用PlayOneShot在一个AudioSource上播放。可以使用PlayClipAtPoint在3D空间中的一个静态位置播放剪辑。
AudioClip:
用于音频数据的一个容器。
一个音频剪辑储存压缩的ogg vorbis 或未压缩的音频文件。AudioClips被引用和被用于AudioSources播放声音。
AudioListener:
表示三维空间的一个侦听器。
这个类实现像麦克风一样的设备。它记录周围的声音并通过玩家的扬声器播放。在场景中只能有一个侦听器。
在这个脚本中,需要提供播放的方法:我的脚本中是有两个方法,一个是通过音频文件来播放,一个是通过按照名字来播放,通常播放名字会比音频文件方便的多。
public void PlayAudio(AudioClip ac) {
AudioSource.PlayClipAtPoint(ac,Camera.main.transform.position);
}
public void PlayByName(string name)
{
AudioClip ac = Resources.Load<AudioClip>("Sounds/" + name);
PlayAudio(ac);
}
AudioClips被AudioSource引用播放,所以在第一个方法中参数是AudioClip,也就是将想要播放的音频文件作为参数。因为AudioListener是挂载到MainCamera上的,所以PlayClipAtPoint()第二个参数表示位置就应该写主摄像机的位置。如果一直使用第一种方法会比较麻烦,于是提供了一个通过名字来播放音效的方法。
在这提到了一个方法Resource.Load(),因为自己本身也是第一次接触到,所以到处找了很久,对此方法有了一个大致的了解。在使用这个方法的时候一定要在Project面板中创建一个Resource文件,可以在继续在Resource下创建子目录。我的方法中就存在一个"Sound/"目录
整个游戏开始的UI中,当子弹孔出现的时候会有音效,(我的控制UI脚本名叫做LoginManager,音乐播放脚本叫做SoundManager),所以应该在LoginManager中去调用SoundManager的方法。并且类似于上文补充的一点,应该在子弹孔的Inspector下的DoTweenAnimation的Event中将OnStart赋值。
注意:
DoTweenAnimation中的Event:
OnStart(),OnComplete();
OnStart()表示开始做什么,OnComPlete表示结束做什么。