Unity入门官方案例---Survival Shooter

介绍一下接触到的好的Unity官方作品。

Survival Shooter

游戏简介:   

       该小游戏是生存类小游戏,在一个小孩子房间中,每隔固定时间会生成某种怪物来追击玩家,玩家需要打死这些怪物,同时尽量躲避,避免被伤害。

游戏制作介绍:

        该游戏比较推荐,涉及到的知识非常多,同时代码部分很简单:只有移动+伤害,以及积分,需要考虑的东西非常少。但是模型部分需要做的内容很多。

        首先是光照部分,使用了静态光照贴图,点光源,以及使用了插件Post Processing(这里只是使用了该插件最简单的效果);然后就是声音控制部分mixer;UI动画+模型动画,以及模型动画中嵌入可执行函数;当然我们可以体会一下模型贴图,理解贴图各个部分是有什么效果;怪物的自动寻路追击,还有动画状态机等等知识点。

        推荐照着这个项目从头做起,能接触到不少东西。

下面简单记录一下从头开始做起的过程:

一.规整所需材料部分

     1.音频文件

     2.模型原文件

     3.图片

     4.字体

    建议在下载好项目后,直接打开文件夹进行复制,同时排除掉unity的设置文件,然后全部自己来设置。

    

二.梳理代码

      该游戏玩法是:

      1.怪物固定间隔下不断生成

      2.怪物靠近玩家能进行攻击,攻击导致玩家掉血,怪物会不断追击靠近玩家

      3.怪物也有固定血量,收到枪击会掉血,归零后死亡消失

      4.玩家的移动操作,以及射击

      5.怪物死亡时,玩家获得积分

      6.镜头跟随,以及声音控制

      7.玩家血量归零,死亡,游戏重新加载

梳理下:

      1)需要对怪物进行:①移动,②攻击,③血量控制,④固定时间自动生成

      2)玩家:①移动,②射击,③血量控制

      3)全局性脚本:①积分,②镜头跟随,③声音控制,④游戏结束、暂停等等动画状态的控制,⑤输入部分抽象。

代码内容很简单,结构清晰,每个函数功能独立,建议细读学习。

       代码中注意一些字符串的拼写,以及GetComponentInChildren与GetComponent的区别。

三.对导入环境模型进行处理

       首先处理固定的环境部分,参照项目对每一个模型进行贴图。

     注意这里,文件自带的压缩比例并不一定刚刚好,需要手动控制一下。

    全部贴好后就可以开始做预制体了。

    由于环境只有一个,可以制作成一个大的预制体。

    

      直接将模型拖到场景中,位置归零后拖到想放置的地方,注意此时没有碰撞体,所以这些模型都是可以穿透的(玩家直接走过,枪激光直接穿透),需要手动添加碰撞体。

      部分模型是不规则的,可以在底下挂多个碰撞体组成一个差不多满足形状的组合碰撞体(因为枪激光射击的时候会打到模型上,为了让激光打在模型表皮上,需要大致造一个适合外型的碰撞体)。

      全部设置好后,选最外层,设置Layer为“Shootable”。同时设置导航和光照贴图需要的静态“static”:即图中右上角直接打勾,全选就行。

       首先可以进行unity自带导航功能的地图渲染:

      仿造着修改参数,然后点击bake进行烘焙。

      自动导航部分的知识点很多,像很多游戏中的鼠标点击地图后,物体自动跑过去的实现,就是用的这个,这里有A*算法等等很多知识点,后面有相关案例的时候再进行介绍。本案例只在一个长方体地板上追击某个移动的点,只用到了初级的“设置目标点”功能。没有“爬梯”、“跳裂缝”、“爬坡”等等知识点。

       设置好后拖成预制体保存起来。

      接着是光照部分:

      这里用到了反射和点光源,因为场景中的玩具等等部件是固定位置的,是可以烘焙成static的,如果还是用实时的,会消耗更多性能(tris值较大)。

     这里用的功能较简单,建议找找湖面倒影、镜子实现等等那些的了解一下。

     这里讨论这个效果不明显,看不出来作用。所以这里可以忽略。

     点光源部分就有的说了。

    常理下,如果只有一个太阳光,在背阴处就会很黑暗了。点光源是为了static而产生的,当物体设置成静态后,相应的光照也会变成static,这样人走过去背阴处,是看不出来光照慢慢变化的(突变)。增加点光源后,在背阴处,是能体现出来一半身体有阳光,一半被遮住这样的效果的(渐变)。

    但是点光源数据点超级多,在面板上又看不到,我们怎么抄项目中已经设置好的点呢?是手动一个一个位置大致拖还是?

    答案是点光源的位置是可以用记事本查看的:

    将物体拖成预制体后,用记事本直接打开。

    可以具体看到点光源的坐标信息。

   点光源的作用蛮多的,后面在具体的案例中再详细讨论该问题。

   设置好环境部分和光照部分后,需要修改项目的Lighting部分。参考项目,是修改了天空盒的相关设置。

四.设置动态物体模型

      这里是游戏的主要功能实现部分。

      需要导入物体模型后,手动切割动画,设置动画状态机。

      注意代码中,我们发现死亡函数是没有显式引用的,Ctrl+F找不到,包括VS附加调试,也看不到有效的调用堆栈。后面注意到,是把函数调用设置在模型中了。动画中是可以插入函数调用的。需要注意这里even的0:000~1:000,实际是一个比例值,播放动画的时候可以看到是同步移动的,并不是表示动画结束后间隔多少时间。(所以后面,玩家死亡后的那个死亡动画30帧,观察到,小人枪丢掉的时候,结束界面就出来了,而不是小人躺地上隔一会才出来)

      这里导入的模型,内部是带了一套完整的动画的,我们需要手动把每一段分割出来,设置一个动画名。由于这里不是人形动画,所以知识点不多,建议找人形的相关案例了解,会有模型动画位移,重心,骨骼等等知识点。

      然后就是创建动画状态机和预制体的操作:

      注意这里,怪兽是有两个碰撞体的,大的那个是攻击范围,是istrigger类型,可以穿透的,小的才是不可穿透、挡子弹的碰撞体。

      知识点较少,就是注意Animator的“Apply Root Motion”不要勾选,不然它会增加模型中自带的位移。参照项目,设置好动画速度,位移步长。

      

五.声音控制的mixer

       这里找到一个比较详细的教程

       这里目前会的知识较少,暂时只记录某些操作过程。

      1.生成两个mixer后,双击打开,在面板中再+group和snapshots

    2.观察到“MasterMixer”的“Exposed Parameters”有参数,是从Groups中设置的,操作方法:点击groups中对应的项“Music”,到“Inspector”面板中,找到"Attenuation"的“Volume”右键“Exposed ”。同样操作"Soundeffects"。

      3.Send和Receive,在教程中有提及,前缀有个S的是发送方,在“Inspector”面板中进行操作即可。

      这个功能很好用,控制多个音效混合,以及声音的大小控制,代码只有一行就能实现。很方便。

六.参考项目完善

     参考项目制作2DUI部分。实现游戏的具体场景。

分享一下自己参照官方代码做的整个工程:

     链接:https://pan.baidu.com/s/1eqqpI-y4QDktvOsfcBVA6g 密码:vkzg

该项目涉及的知识点很多,目前技术有限,不能解说详细,等后面接触到其他案例再记录分享。

猜你喜欢

转载自blog.csdn.net/Yao_2333/article/details/82529826