[置顶] unity官方内置网络unet的实例教程(七)
2017-11-10 09:33
676 查看
游戏制作到了这里,已经实现非常简单的打打杀杀了,不过大家控制的角色都是露面就开打,缺少了一点浪漫气息。接下来,制作些非游戏里面的怪物或者敌人吧,这样可以稍微增加些游戏的趣味性。
当我们的客户端连接服务端的时候,生成了我们的角色,那些敌人应该也被服务端生成。首先,需要一个Enemy Spawner来生成敌人。
回到Unity编辑器,在Hierarchy面板中新建一个空物体,重命名为:Enemy Spawner,在属性面板进行重置,重置后值为默认值
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/310e7b518ae240a30e842539d7d8cda4)
然后选中它,在属性面板添加NetworkIdentity组件,在组件属性中将Server Only选中:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/47a0a246884899b09f5692afdf4ab852)
将Server Only打上对勾,即设置bool为true,这样此Enemy Spawner只运行在服务端。接下来,创建c#脚本,重命名为:EnemySpawner,将它拖放到Enemy Spawner的属性面板中,书写代码如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/73d32e35d27e8be58cc44fae463a7a4c)
EnemySpawner
这个脚本有如下几个关键点:
1. 引入 UnityEngine.Networking 命名空间
2.继承关系变为NetworkBehaviour
3.使用该类的虚拟函数OnStartServer进行重写
4.当服务器启动时,会随机产生许多敌人有不同的位置和旋转,然后使用NetworkServer.Spawn产生这些敌人。
这里引用官方的介绍:
OnStartServer与OnStartLocalPlayer非常相似,稍早的时候用它来改变玩家控制的角色的颜色。在这种情况下,每当服务端开始监听网络时,服务端就会调用OnStartServer。
OK,保存脚本,接着我们得制作敌人得预制体了。为了方便起见,我们将使用玩家预制作为敌人的原型。
回到Unity编辑器,将Player预制件拖到Hierarchy中,将Player的名称更改为“Enemy”,然后删除子物体Gun和BulletSpawn,然后删除属性面板中PlayerController脚本。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/1b56da4811ec2558a205e54dce3c822b)
1
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/9e02fe3c708b26b8549e26a5fd89ed84)
2
接着,将角色颜色更改为黑色,墨镜的颜色更改为默认的白色。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/e69a2546ac872c653302feec94ea7e3e)
然后再给它弄个帅气的发型:)
首先,选中Enemy,右键新建一个Cube物体,并重命名为:Mohawk,选中它,将位置Position调整至(0.0. 0.55, -0.15),缩放Scale调整至(0.2, 1.0, 1.0)。最后删除掉 Mohawk’的碰撞体 BoxCollider。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/94a74ba9ffe7fcf7484368a0ffa40594)
敌人的样子最终是这样的:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/9d50cd56a0ab3f8b12c49ed2741c77ab)
最后,将这个Enemy GameObject 拖回到Prefabs文件夹中,创建一个新的敌人预制。(注意千万不能跟以前一样点Apply),最后删除Hierarchy中的敌人。
接下来,我们做点缝缝补补的收尾工作:
1. 在Hierarchy窗口选中 NetworkManager,打开属性面板中的Spawn Info,在Registered Spawnable Prefabs下面再点击 ”+“ 创建一个空白位置,将敌人预制体拖放进去。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/9cd54e8f3f8c462db606c3e7592d40b8)
接着,选中Enemy Spawner,将敌人预制拖进空白窗口并将敌人数量改为4,保存。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/6165239d736a70db19a482e6f9ede675)
现在敌人也有生命值和血条跟我们控制的角色是一样的,子弹还会调用造成伤害的函数,所以不需要改变。
好吧,重新生成游戏,联网,然后进行测试下看看。
还有有些问题,比如:敌人被击中会掉血,但是当他们的生命值为0的时候,他们只是在原地死了,在原地重生。
好吧,关闭测试,进入unity编辑器。首先,得将玩家控制得角色和敌人区分开,让它们产生不同得效果。这里使用最简单得办法,即利用bool值判断。
打开Health脚本,
添加一个公有得bool值:public bool destroyOnDeath;并在脚本中进行下判断,具体如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/b0215c91649fc35da7188e7d858795a2)
保存 脚本,回到Unity编辑器,在Prefabs文件夹选中Enemy预制体,将destroyOnDeath得框勾选:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/10/d9b7bcb6c0189d3e1f60b2fecb5f976c)
保存,重新生成游戏,并联网测试,现在敌人被攻击后,生命值为0时,会死亡并消失,玩家生命值为0,会在原点重生。
当我们的客户端连接服务端的时候,生成了我们的角色,那些敌人应该也被服务端生成。首先,需要一个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,会在原点重生。
相关文章推荐
- [置顶] unity官方内置网络unet的实例教程(一)
- [置顶] unity官方内置网络unet的实例教程(二)
- [置顶] unity官方内置网络unet的实例教程(三)
- [置顶] unity官方内置网络unet的实例教程(四)
- [置顶] unity官方内置网络unet的实例教程(六)
- unity官方内置网络unet的实例教程(八)
- unity官方内置网络unet的实例教程(八)
- Unity5.1 新的网络引擎UNET(九) UNET 官方推荐视频教程
- Unity官方实例教程 Space Shooter
- 对《[Unity官方实例教程 秘密行动] Unity官方教程《秘密行动》(十二) 角色移动》的一些笔记和个人补充,解决角色在地形上移动时穿透问题。
- Unity官方实例教程 Space Shooter(太空射击游戏)
- Unity5.1 新的网络引擎UNET(二) UNET 官方推荐Demo案例
- Unity官方实例教程 Roll-a-Ball 学习笔记(一)+(二)
- [置顶] Unity官方视频教程 自制中文字幕 1080p
- Unity官方实例教程 Space Shooter
- Unity官方实例教程 Roll-a-Ball 学习笔记
- Unity官方实例教程 Roll-a-Ball(一)
- Unity官方实例教程 Roll-a-Ball(二)
- Unity官方游戏实例视频中文教程之太空射击学习笔记
- [置顶] Unity 3D - 【AssetBundle】 官方教程