Unity 官网教程 -- Multiplayer Networking
1. 新建一个3D工程,在菜单 "File" - "Save Scenes" ,保存场景为 "Main"。注意,保存的文件放在Assets目录下。
2.菜单"GameObject" -- "Create Empty",新建一个GameObject,右键重命名为 "NetworkManager"。
3.在Hierarchy面板,选择NetworkManager。然后,在Inspector面板,点击 "Add Component" 按钮,搜索添加两个组件:NetworkManager 和 NetworkManagerHUD。
NetworkManager组件管理游戏的网络状态。
NetworkManagerHUD组件与NetworkManager一起工作,并提供了一个简单的用户界面来控制游戏运行时游戏的网络状态。
4.菜单 "GameObject" - "3D Object" ,新建两个物体: "Cube" 和 "Capsule" 。在 "Hierarchy" 面板,拖拽 "Cube" 到 "Capsule" ,Capsule 为Cube的父组件。分别重命名Capsule 和 Cube为 "Player" 和 "Visor"。此物体,作为一个游戏角色的代替品。
5.在Hierarchy面板,选择Visor。然后,在Inspector面板的Transform选项卡,更改两个属性:Position和Scale。
- Set the Visor GameObject’s Scale to (0.95, 0.25, 0.5).
- Set the Visor GameObject’s Position to: (0.0, 0.5, 0.24)
6. 为了让Player更生动的模仿一个游戏角色,需要改变Visor的颜色。在Project面板,右键 "Create" -- "Material",新建一个Material对象,并命名为"Black"。选中"Black"对象,在Inspector面板的Main Maps里面,更改Albedo的颜色为黑色。 拖拽Material到Hierarchy面板的Visor对象上面。
7.给网络中的游戏角色一张身份证。选择Hierarchy面板的Player,然后,选择菜单 "Component" -- "NetworkManager" -- "NetworkIdentity"。接着,在Inspector面板,选择Network Identity中的 "Local Player Authority"。这样可以允许客户端控制Player的行为。
8.拉拽Hierarchy面板中的Player对象到Project面板中,此时,生成一个Player的预制对象,暂且叫Player预制件。然后,可以删除Hierarchy面板中的Player对象了。
9.保存一下。
10.选中Hierarchy面板的NetworkManager对象,展开Inspector面板的Spawn Info选项,有一个Platyer Prefab。拖拽Assets的Player预制件到Player Prefab中。(官网的意思:应该是很多的游戏都是只有的一个游戏主角由玩家控制,所以,在客户端连接到服务器的时候,这里会生成一个对应的游戏对象,方便管理。
11.Assets面板,新建一个player目录,右键该目录 "Create" -- "C# Script" ,命名新文件为 "PlayerController",打开,复制下面的代码到该文件。用此脚本控制游戏角色的行为。
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(, x, );
transform.Translate(, , z);
}
}
By default, Input.GetAxis(“Horizontal”) and Input.GetAxis(“Vertical”) allow the player to use the WASD and arrow keys, a controller pad or other device to move the player. For more information, please see the page on the Input Manager。
12.选中Hierarchy面板的NetworkManager对象,拖拽新建的脚本到Inspector的底下的 "Add Component" 按钮上。
13.返回Unity,保存Scene。
14.点击上方三角形运行按钮。运行后,点击 "LAN Host(H)" ,之后可以按 "AWSD" ,或者箭头按键,控制物体移动。

15. LAN Host(H) : Client和Server一起运行
LAN Client(C) :只有Client的模式
LAN Server : 只有Server模式。
16.在一个独立的窗口运行该程序。"File" - "Building Settings ..."

弹出窗口保存可执行文件


17.现在有两个可以运行的程序,一个是Unity模拟器,一个运行的独立窗口,可以自己选择哪个作为服务器,哪个作为客户端了。
18.为了同步不同客户端的对象,更改 "PlayerController" 脚本。 脚本编辑后,代码如下:
using UnityEngine;
using UnityEngine.Networking; public class PlayerController : NetworkBehaviour
{
void Update()
{
// 只处理本地对象
if (!isLocalPlayer) {
return;
}
var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;
var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; transform.Rotate(, x, );
transform.Translate(, , z);
}
}
PlayerController对象不再继承MonoBehaviour,而是继承NetworkBehaviour,跟网络打交道的脚本都是要继承这个类的。
增加了using UnityEngine.Networking命名空间;
update函数里面,增加是否是本地对象的判断。
保存后,关闭。
19.选中Assets中的Player预制件,菜单 "File" -- "Component" -- "Network" -- "NetworkTransform" ,这样,就可以同步多个客户端的行为了。
Unity 官网教程 -- Multiplayer Networking的更多相关文章
- Unity官网教程之Tips
前言 翻译整理unity官网教程的tips部分,原文:http://unity3d.com/cn/learn/tutorials/topics/tips Snap 按住Ctrl键,并用鼠标拖动Game ...
- unity官网安装教程
于今天起记录与回忆游戏开发相关一些小目标 2020-12-01 第一篇正式的博客就从软件的安装开始吧 unity个人版是免费的不用刻意去找破解版什么的 unity官网安装 1.unity.cn uni ...
- Unity官网针对IOS开发有比较好的建议
Unity官网针对IOS开发有比较好的建议,我总结了翻译如下,后面附上原文. 尽量控制定点数量(注意所谓顶点不是建模时的顶点,而是引擎渲染时的顶点.例如,模型一个顶点如果设置了2个法向,那么对引擎来说 ...
- [pytorch] 官网教程+注释
pytorch官网教程+注释 Classifier import torch import torchvision import torchvision.transforms as transform ...
- Unity 官网无法访问|国外网站访问过慢|国外网站访问加速器
目录 1. 文档地址 2. 按 3. 工具下载地址 1. 文档地址 GitHub博客 https://coco5666.github.io/blog/articles/20190704-01/ 2. ...
- MongoDB 官网教程 下载 安装
官网:https://www.mongodb.com/ Doc:https://docs.mongodb.com/ Manual:https://docs.mongodb.com/manual/ 安装 ...
- ECharts概念学习系列之ECharts官网教程之在 webpack 中使用 ECharts(图文详解)
不多说,直接上干货! 官网 http://echarts.baidu.com/tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD%BF%E7%94% ...
- ECharts概念学习系列之ECharts官网教程之自定义构建 ECharts(图文详解)
不多说,直接上干货! 官网 http://echarts.baidu.com/tutorial.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%9E%84%E5%BB%BA%2 ...
- KnockoutJs官网教程学习(一)
这一教程中你将会体验到一些用knockout.js和Model-View-ViewModel(MVVM)模式去创建一个Web UI的基础方式. 将学会如何用views(视图)和declarative ...
随机推荐
- python2.7初学(〇)
为什么学习Python Python为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作“内置电池(batteries included)”.而且pytho ...
- openssl+前端jsrsa签名+后端nodejs验签
内容如标题所示,总体分为三个部分: 一.win10下安装openssl,然后通过openssl工具生成RSA的公钥和私钥 (1)win10下安装openssl需要的工具有:VS2013,Perl,na ...
- Java处理 文件复制
try { InputStream in = new FileInputStream(new File(oldPath)); OutputStream out = new FileOutputStre ...
- AngularJS模型
1. AngularJS模型主要就是使用的AngularJS的ng-model指令. ng-model指令可以将输入域的值与 AngularJS 创建的变量绑定. <!DOCTYPE html& ...
- 阻止pc端浏览器缩放js代码
阻止pc端浏览器缩放js代码 众所周知:移动端页面禁止用户缩放界面只需加上<meta name="viewport" content="user-scalable= ...
- Code Conventions for the Java
Oracel官方JAVA编码规范指引 http://www.oracle.com/technetwork/java/codeconvtoc-136057.html
- [C#] 日志类
在程序发布到服务器上的时候,不能在像本地执行一样可以调试,在发生错误时候,往往不能很方便的查找错误.将错误信息写入文件是一种比较常用的处理方法.以下是一个日志类,实现以下功能: 1)按日期每天生产不同 ...
- Day8-面向对象进阶&&socket基础
抽象类 python2中的写法 import abc class Alert(object): '''报警基类''' __metaclass__ = abc.ABCMeta @abc.abstract ...
- OOP,WEB开发实用小技巧
偶然读到一篇博客,记录一下心得.这种设计对于新手来说一般是想不到的,它充分的发挥了OOP语言的特性,让代码专用而清爽.这是不是重构的思想呢? 我们在写业务层的时候,有很多方法是重复功能的,我们就可以使 ...
- 美国在研新药_读取单个PDF
QQ:231469242 读取下载美国在研新药PDF内数据:unii,分子式,分子重量,药品名,who,编码,.... PDF无逻辑规则,不能百分之百提取,只能部分提取 几个默认字段为空 # -*- ...