unity官方内置网络unet的实例教程(七)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq744886227/article/details/78496360

游戏制作到了这里,已经实现非常简单的打打杀杀了,不过大家控制的角色都是露面就开打,缺少了一点浪漫气息。接下来,制作些非游戏里面的怪物或者敌人吧,这样可以稍微增加些游戏的趣味性。

当我们的客户端连接服务端的时候,生成了我们的角色,那些敌人应该也被服务端生成。首先,需要一个Enemy Spawner来生成敌人。

回到Unity编辑器,在Hierarchy面板中新建一个空物体,重命名为:Enemy Spawner,在属性面板进行重置,重置后值为默认值



然后选中它,在属性面板添加NetworkIdentity组件,在组件属性中将Server Only选中:



将Server Only打上对勾,即设置bool为true,这样此Enemy Spawner只运行在服务端。接下来,创建c#脚本,重命名为:EnemySpawner,将它拖放到Enemy Spawner的属性面板中,书写代码如下:



EnemySpawner

这个脚本有如下几个关键点:

1. 引入 UnityEngine.Networking 命名空间

2.继承关系变为NetworkBehaviour

3.使用该类的虚拟函数OnStartServer进行重写

4.当服务器启动时,会随机产生许多敌人有不同的位置和旋转,然后使用NetworkServer.Spawn产生这些敌人。

这里引用官方的介绍:

OnStartServer与OnStartLocalPlayer非常相似,稍早的时候用它来改变玩家控制的角色的颜色。在这种情况下,每当服务端开始监听网络时,服务端就会调用OnStartServer。

OK,保存脚本,接着我们得制作敌人得预制体了。为了方便起见,我们将使用玩家预制作为敌人的原型。

回到Unity编辑器,将Player预制件拖到Hierarchy中,将Player的名称更改为“Enemy”,然后删除子物体Gun和BulletSpawn,然后删除属性面板中PlayerController脚本。



1



2

接着,将角色颜色更改为黑色,墨镜的颜色更改为默认的白色。



然后再给它弄个帅气的发型:)

首先,选中Enemy,右键新建一个Cube物体,并重命名为:Mohawk,选中它,将位置Position调整至(0.0. 0.55, -0.15),缩放Scale调整至(0.2, 1.0, 1.0)。最后删除掉 Mohawk’的碰撞体 BoxCollider。



敌人的样子最终是这样的:




最后,将这个Enemy GameObject 拖回到Prefabs文件夹中,创建一个新的敌人预制。(注意千万不能跟以前一样点Apply),最后删除Hierarchy中的敌人。

接下来,我们做点缝缝补补的收尾工作:

1. 在Hierarchy窗口选中 NetworkManager,打开属性面板中的Spawn Info,在Registered Spawnable Prefabs下面再点击 ”+“ 创建一个空白位置,将敌人预制体拖放进去。



接着,选中Enemy Spawner,将敌人预制拖进空白窗口并将敌人数量改为4,保存。



现在敌人也有生命值和血条跟我们控制的角色是一样的,子弹还会调用造成伤害的函数,所以不需要改变。

好吧,重新生成游戏,联网,然后进行测试下看看。

还有有些问题,比如:敌人被击中会掉血,但是当他们的生命值为0的时候,他们只是在原地死了,在原地重生。

好吧,关闭测试,进入unity编辑器。首先,得将玩家控制得角色和敌人区分开,让它们产生不同得效果。这里使用最简单得办法,即利用bool值判断。

打开Health脚本,

添加一个公有得bool值:public bool destroyOnDeath;并在脚本中进行下判断,具体如下:



保存 脚本,回到Unity编辑器,在Prefabs文件夹选中Enemy预制体,将destroyOnDeath得框勾选:



保存,重新生成游戏,并联网测试,现在敌人被攻击后,生命值为0时,会死亡并消失,玩家生命值为0,会在原点重生。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章