使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)
猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: http://blog.csdn.net/cocos2der/article/details/51006463
本文主要讲述了如何使用Multiplayer Networking开发多人游戏,文中实例、代码来源于Unity官方教程。
原文:INTRODUCTION TO A SIMPLE MULTIPLAYER EXAMPLE
Networking Overview
The High Level API
Network System Concepts
使用Multiplayer Networking做一个简单的多人游戏例子-1/3
使用Multiplayer Networking做一个简单的多人游戏例子-2/3
使用Multiplayer Networking做一个简单的多人游戏例子-3/3
OK,现在可以开始了!
1. 开始创建工程
- 创建一个空的3D工程
- 保存当前场景为”Main”
2. 使用 Network Manager
主要使用NetworkManager和NetworkManagerHUD(一个简易的UI面板)
- 创建一个empty GameObject.
- 修改名称为”Network Manager”
- 选中Network Manager对象体
- 添加组件:Network > NetworkManager
- 添加组件:Network > NetworkManagerHUD
NetworkManager组件的属性:
NetworkManagerHUD组件属性:
运行后,此时运行后效果(该UI就是NetworkManagerHUD):
3. 设置Player prefab
本实例中玩家GameObject效果(后面会加上武器):
开始创建Player GameObject:
- 创建一个Capsule胶囊体
- 修改名称为“Player”
- 选中“Player”
- 创建一个Cube作为Player的子物体
- 修改Cube名称为“Visor”
- 设置Visor Scale (0.95, 0.25, 0.5)
- 设置Visor Position (0.0, 0.5, 0.24)
- 创建一个新材质Material
- 修改材质Material名称为“Black”
- 选中Black Material
- 修改其Albedo color 为黑色
- 将Visor的Material修改为Black Material
为了给Player添加uniqueID作为网络中的唯一ID,我们需要给Player添加NetworkIdentity组件
- 选中Player GameObject
- 添加组件:Network > NetworkIdentity
- 设置NetworkIdentity组件属性Local Player Authority为True,勾选上
将Local Player Authority勾选上,是为了后面Client能够控制Player
最后创建Player的Prefab预制体:
- 将场景中的Player拖拽到Project面板中生成Prefab
- 删除Scene中原来的Player
- 保存场景
4. 注册Player prefab
- 选中Network Manager GameObject 在 Hierarchy 面板中
- 保存Network Manager被选中状态
- 展开Network Manager属性面板中Spawn Info
- 将Player prefab拖拽到Player Prefab框中
5. 创建Player 移动控制脚本
- 新建一个C#脚本为”PlayerController”, 并将其绑定到Player prefab上
PlayerController.cs:
using UnityEngine;
public class PlayerController : MonoBehaviour
{
void Update()
{
var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;
var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
transform.Rotate(0, x, 0);
transform.Translate(0, 0, z);
}
}
- 保存脚本
- 保存场景
6. 测试Player的在线移动
- 运行Unity进入Play模式
运行模式下,NetworkManagerHUD将会显示默认的UI
点击LAN Host(H),将本机作为主机Host开始游戏
此时NetworkManager将会创建一个Player在场景中,NetworkManagerHUD将会显示为游戏中UI
- 键盘WASD控制玩家Player移动方向
- 点击UI中的Stop(X) 回到离线模式
- 点击停止运行Unity,退出运行模式
开始测试在客户端中控制玩家Player
为了测试多玩家,所以我们需要两个客户端。在这里我们可以Build一个Mac版本(或者Windows版本)作为一个玩家,然后Unity自己运行作为一个玩家。OK,下面开始Build一个Mac版本.
- 打开Build Settings面板,并添加当前场景。
- 保存工程
- Build一个Mac standalone application
- 完成之后,点击运行刚才Mac版本,并选择Windows窗口模式运行,不要全屏运行。
- 点击LAN Host(H),作为主机玩家
- 点击WASD按键,移动一下Mac版本中的Player(不然另一个玩家加入的时候,位置在同一个位置,你有可能认为只有一个玩家)
现在回到Unity,将Unity作为另一个玩家加入游戏。
- 运行Unity,进入Play模式
- 点击LAN Client(C)加入游戏。
此时你应该看到了两个玩家在游戏中。
- 关闭Mac客户端
- 停止运行Unity
- 退出Play模式
使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)的更多相关文章
- 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)
使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...
- 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...
- 使用Multiplayer Networking做一个简单的多人游戏例子-1/2
原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 本文主要讲述了如何使用Multiplayer Networking开发多人游 ...
- 使用Multiplayer Networking做一个简单的多人游戏例子-1/2(换一种方法)
SynMove.cs using UnityEngine; using System.Collections; using UnityEngine.Networking; public class S ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十五)——集中式接口文档实现
之前有小伙伴在评论区留言说如何集成swagger,最开始没有想透给了对方一个似是而非的回答.实际上后来下来想了一下,用.NET5 提供的Source Generator其实可以很方便的实现接口集成.今 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护
dapr目前更新到了1.2版本,在之前4月份的时候来自阿里的开发工程师发起了一个dapr集成Alibaba Sentinel的提案,很快被社区加入到了1.2的里程碑中并且在1.2 release 相关 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式
在之前的系列文章中聊过分布式事务的一种实现方案,即通过在集群中暴露actor服务来实现分布式事务的本地原子化.但是actor服务本身有其特殊性,场景上并不通用.所以今天来讲讲分布式事务实现方案之sag ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存
很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录:一.通过Dapr实现 ...
- 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎
Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...
随机推荐
- [图论]最大流问题(Maximum flow)的定义
首先定义网络(network)N =(V,E), V表示顶点(Vertices)集合, E表示边(Edges)集合. s,t是V中的两个顶点,分别表示网络N中的源点(source)和汇点(sink). ...
- 让sublime总是在新选项卡打开新文件
sublime的一个默认设置让人很不爽,比如现在选项卡里面已经打开了一个文件A,当你从左边side bar里面点击一个新文件B时,如果你不是快速的双击,且A没有处于编辑未保存状态,那么B就会覆盖A的选 ...
- Dynamics CRM FORM脚本库加载本地脚本
用传统的开发方式,js脚本都是保存在数据库中的,这样也方便迁移,但如果不想存数据库而是存在物理磁盘上,则可通过下述代码,将脚本存放在CRMWEB文件夹的某个路径下,每次都动态引用本地JS. funct ...
- 在Windows Service 2012上安装IIS 8.0 IIS 6
我的目的是在服务器上安装IIS6 ,但是受到这边文章的启发和按照他的步骤,看到了"IIS 6管理兼容性",我的问题就决解了,我这里是因为要安装vss 2005 和u8等比较早期的软 ...
- 使用 纯JQuery 进行 表单 验证
对于JavaScript而言,进行表单数据的验证可谓是很有必要的,而且一般我们都会在网页上先进行一下表单验证,然后服务器端再次进行验证,来确保用户提交数据的准确性.下面就来分享一个JQuery实现的表 ...
- 高通msm8994手动提升性能脚本
点击打开链接 [plain] view plain copy stop thermald stop mpdecision stop thermal-engine # online A57 echo 1 ...
- Java基础---Java---面试题---交通灯管理系统(面向对象、枚举)
交通灯管理系统的项目需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1.异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆-----直行车辆 由西向而来去往南 ...
- Android 导入v7包常见错误,以及项目引用v7包错误解决
android下v4 v7 v21等包是android系统的扩展支持包,就想windows的系统补丁一个道理. android的扩展包主要是用来兼容低版本的,比如android3.0以后出现 ...
- J2EE学习从菜鸟变大鸟之六 EJB(Enterprise JavaBean)企业级Java组件
EJB (EnterpriseJavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准.其特点包括网络服务支持和核心开发工具(SDK).其称为Java 企业Bean,是 ...
- 【翻译】使用Sencha Ext JS创建美丽的图画(1)
原文:Creating Beautiful Drawings Using Sencha Ext JS – Part 1 许多人可能对Ext JS中的图表包相当熟悉了.通过它可以快速创建相当强悍的可视化 ...