Unity 官网教程 -- Multiplayer Networking

教程网址:https://unity3d.com/cn/learn/tutorials/topics/multiplayer-networking/introduction-simple-multiplayer-example?playlist=29690

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",打开,复制下面的代码到该文件。用此脚本控制游戏角色的行为。

 1 using UnityEngine;
 2
 3 public class PlayerController : MonoBehaviour
 4 {
 5     void Update()
 6     {
 7         var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;
 8         var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
 9
10         transform.Rotate(0, x, 0);
11         transform.Translate(0, 0, z);
12     }
13 }

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并没有相关的代码,可以自己作为学习开发。

时间: 2024-10-17 04:42:01

Unity 官网教程 -- Multiplayer Networking的相关文章

Java Web框架-----------------------struts2(官网教程版HelloWorld)

Java Web框架------------------struts2(官网教程版HelloWorld) 我们都知道Struts是Java Web 常用的三大框架之一,另外还有Spring.Hibernate.学习Struts很有必 要!那么怎么学习呢?我的建议是: 1.对于英语能力还可以的人,学技术我们要从官网文档学起,再结合中文别人所写的论文.博客,视频 等.这样可以达到事半功倍的效果. 2.对于阅读英语稍微吃力的人,我们可以下载有道词典,再来本计算机专业英语书,不懂就查,但是, 我们决不能

Django学习笔记 官网教程纠正 代码

原文: Django学习笔记 官网教程纠正 代码 Django学习笔记 4.模板初学中,照书例django book 出现以下异常 raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE) ImportError: Settings cannot be imported, because environmen

[pytorch] 官网教程+注释

pytorch官网教程+注释 Classifier import torch import torchvision import torchvision.transforms as transforms transform = transforms.Compose( [transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) trainset = torchvision.datasets.CIF

Unity官网教程之Tips

官网链接:http://unity3d.com/cn/learn/tutorials/topics/tips Snap 按住Ctrl键,并用鼠标拖动Gameobject,一次移动的值 预览窗口 在查看动画预览时,右键点击Bar,窗口独立出来 Forum API转到定义 在论坛上的代码,可以点击跳到API页面. Camera移到现在的视图 选中Camera,按 gameobject - align with view ,camera的位置就调整到你现在所在Scene位置. 效果:http://un

RabbitMQ官网教程---路由

(使用python客户端pika 0.9.8) 在前面的教程中我们构建了一个简单的日志系统.我们可以给许多接收者广播日志消息. 在这个教程中我们将添加一个特性给它-我们将订阅仅仅一种消息子集成为可能.例如,我们可以指挥仅仅错误消息到日志文件(保存到磁盘空间),它任然可以在控制台打印所有的日志消息. 绑定 在前面的例子中我们已经创建了绑定,你可以重新调用像这样的代码: channel.queue_bind(exchange=exchange_name, queue=queue_name) 绑定是e

RabbitMQ官网教程---发布/订阅

(使用python客户端pika 0.9.8) 在前面的教程中我们创建了一个工作队列.假设在一个工作队列后面是每一个被传递给正确的工作者的任务.在这部分中我们将做一些完全不同的事情--我们将给多个消费者传递一个消息.这种模式被称为"发布/订阅". 为了阐明这个模式,我们将构建一个简单的日志系统.它将由两个程序构成--第一个将发出日志消息并且第二个将接收并且打印它们. 在我们的日志系统中每个运行的接收程序副本将获得这个消息.用这种方式我们将可以运行一个接收器并且直接日志到磁盘:而且同时我

RabbitMQ官网教程---主题

(使用python客户端pika 0.9.8) 在前面的教程中我们提高了我们的日志系统.我们使用一个direct类型的exchange代替使用一个fanout类型的exchange的虚拟广播,获取一个可选的接收日志. 尽管使用direct类型的exchange提高了我们的系统,但是它任然是有限的-它不基于多个判断标准路由. 在我们的日志系统中,我们也许想不仅订阅基于严重程度的日志,而且还有基于源的生产日志.你也许从unix的syslog工具中知道了这个概念,它基于严重程度路由日志和设施. 那将给

Gatling官网教程翻译之Advanced Tutorial

高级教程 在这一部分,我们假设读者已经完成了前面Quickstart的学习部分.而且你已经有了一个基础的simulation. 我们在这一部分将通过一系列的重构,向读者介绍更多Gatling的高级用法和DSL结构. 回顾下已有的Simulation: 1 package computerdatabase 2 import io.gatling.core.Predef._ 3 import io.gatling.http.Predef._ 4 import scala.concurrent.dur

Postman 官网教程,重点内容,翻译笔记,

json格式的提交数据需要添加:Content-Type :application/x-www-form-urlencoded,否则会导致请求失败 1. 创建 + 测试: 创建和发送任何的HTTP请求,请求可以保存到历史中再次执行2. Organize: 使用Postman Collections为更有效的测试及集成工作流管理和组织APIs3. document: 依据你创建的Clollections自动生成API文档,并将其发布成规范的格式4. collarorate: 通过同步连接你的tea