猴子原创,欢迎转载。转载请注明: 转载自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开发之二十五)的更多相关文章

  1. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

  2. 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...

  3. 使用Multiplayer Networking做一个简单的多人游戏例子-1/2

    原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 本文主要讲述了如何使用Multiplayer Networking开发多人游 ...

  4. 使用Multiplayer Networking做一个简单的多人游戏例子-1/2(换一种方法)

    SynMove.cs using UnityEngine; using System.Collections; using UnityEngine.Networking; public class S ...

  5. 通过Dapr实现一个简单的基于.net的微服务电商系统(十五)——集中式接口文档实现

    之前有小伙伴在评论区留言说如何集成swagger,最开始没有想透给了对方一个似是而非的回答.实际上后来下来想了一下,用.NET5 提供的Source Generator其实可以很方便的实现接口集成.今 ...

  6. 通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护

    dapr目前更新到了1.2版本,在之前4月份的时候来自阿里的开发工程师发起了一个dapr集成Alibaba Sentinel的提案,很快被社区加入到了1.2的里程碑中并且在1.2 release 相关 ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式

    在之前的系列文章中聊过分布式事务的一种实现方案,即通过在集群中暴露actor服务来实现分布式事务的本地原子化.但是actor服务本身有其特殊性,场景上并不通用.所以今天来讲讲分布式事务实现方案之sag ...

  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存

    很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录:一.通过Dapr实现 ...

  9. 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...

随机推荐

  1. HDFS基本原理及数据存取实战

    ---------------------------------------------------------------------------------------------------- ...

  2. Android程序员必须掌握的知识点-多进程和多线程

    当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程.默认情况下,同一应用的所有组件在相同的进程和线程(称为"主" ...

  3. Linux下创建软链接

    创建软链接: ln -s /newdisk/app-tpl/apache-tomcat-7.0.47/webapps/app-tpl-webapp/ /newdisk/UCMSServer/tomca ...

  4. Android必知必会-Android Studio下配置和使用Lambda

    移动端如果访问不佳,请访问–>Github版 背景 和朋友讨论 JAVA8 的新特性,聊到Lambda,正好在掘金上看到一篇相关的文章,结合资料,作一个总结,特别是记录下实际使用中遇到的问题. ...

  5. FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  6. linux crontab定时任务详解

    1.  为当前用户创建cron服务: crontab  -e 例如 文件内容如下(每隔1分钟执行sql脚本): */1 * * * * mysql -h127.0.0.1 -uroot -proot ...

  7. 1068. Find More Coins (30)

    题目如下: Eva loves to collect coins from all over the universe, including some other planets like Mars. ...

  8. Android support library支持包常用控件介绍(二)

    谷歌官方推出Material Design 设计理念已经有段时间了,为支持更方便的实现 Material Design设计效果,官方给出了Android support design library ...

  9. Linux下利用ssh远程文件传输 传输命令 scp

    在linux下一般用scp这个命令来通过ssh传输文件. 一.scp是什么? scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进 ...

  10. UNIX环境高级编程——线程同步之互斥锁、读写锁和条件变量(小结)

    一.使用互斥锁 1.初始化互斥量 pthread_mutex_t mutex =PTHREAD_MUTEX_INITIALIZER;//静态初始化互斥量 int pthread_mutex_init( ...