猴子原创,欢迎转载。转载请注明: 转载自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. Android自定义异常类

    当一个项目中,异常可能出现地方非常多的时候就需要考虑封装处理异常信息.本篇博客就对自定义异常做一个封装,模拟实际开发中的异常处理. 新建一个基类异常HException: public class H ...

  2. Android support library支持包常用控件介绍(一)

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

  3. Linux下一次数据仓库进行迁移记录

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52768613 前言:数据库每天的 ...

  4. 联想G510 在新的SSD上安装Win8.1系统,启动的时候自己加载机械硬盘的Win8.1系统

    进入BIOS,选择Boot,将Boot Priority(优先),修改为Legacy(传统) First: 启动的时候就不会使用UEFI First的windows Boot Manager(wind ...

  5. iOS 用RunTime来提升按钮的体验

    用RunTime来提升按钮的体验 载请标明出处:http://blog.csdn.net/sk719887916/article/details/52597388,作者:Ryan 经常处理按钮问题都是 ...

  6. 【BAT经典算法面试题系列】求和为n的连续正整数

    马上就要到9月份了,意味着一年一度的秋招就要开始了,相信不论是正在实习的童鞋还是马上就要找工作的童鞋,BAT无疑是国内的"明星企业",是每个学计算机的小伙伴们心之向往的企业,但是呢 ...

  7. 前端面试题-----js和jquery的区别是什么?

    最近我有一个朋友问我js和jquery的区别是什么,于是我打算写一篇文章说下到底有什么区别. 首先你要知道: 1.js是网页的脚本语言,记住哈,js是语言! 2.jquery是用js语言写出来的一个框 ...

  8. Spring入门介绍(一)

    Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发的复杂性而诞生的. 目的:解决企业应用开发的复杂性. 功能:使用基本的javaBean代替EJB. ...

  9. Android View架构总结

    View和Activity的区别 android的四大组件,Activity是四大组件中唯一一个用来和用户进行交互的组件.可以说Activity就是android的视图层. 如果再细化,Activit ...

  10. 手把手带你走进MVP +Dagger2 + DataBinding+ Rxjava+Retrofit 的世界

    0.0 Android开发现在的变化用一个词来形容就是 :翻天覆地 越来越多的项目使用了MVP + Rxjava+Retrofit +Dagger2 + DataBinding等等东西.. 但是这些东 ...