Unity自5.1以后支持新版的网络系统Unet,Unet是什么,优缺点是什么,和以前的网络系统有什么区别,请自行去百度。本篇要实现的功能是创建网络游戏的Player主角,以及实现移动同步。本教程来源于爱奇艺上的Unet教程,由于是英文视频,so对于很多人来说......,所以就准备出一些对应的中文教程,来帮助初学者(偶也是初学者,若是分享的技术有误,还望指出)。废话不多说了,进入正题。
    一 首先创建一个空对象,名字为NetworkManager,为其添加组件Network Manager HUD和Network Manager。
此处插入对这二个组件的介绍
NetworkManager是一个组件,用来管理网络多人游戏的状态。它实际上是完全使用HLAPI实现,所以它所做的一切程序员可以使用其他方式实现。然而,NetworkManager封装好了很多有用的功能到一个地方,使创建、运行和调试多人游戏尽可能简单。NetworkManager可以使用使其完全没有脚本。在编辑器的检视面板,允许配置它的所有特性。NetworkManagerHUD供应一个简单的、默认的用户界面,允许网络游戏在运行时由用户控制。更先进的用法,开发人员可以从派生一个类继承自NetworkManager,并且自定义其行为通过重写任何它所提供的虚拟函数。
    二 创建主角,我在这里创建一个Cube作为主角player,首先player是一个网络物体,所以我们要先要为其添加Network Identity 组件,标识网络身份。并且勾选Local Player Authority,授权本地玩家。再为其添加脚本名为PlayerController,来控制人物的移动,代码如下:
三. 将Hierarchy面板中的Cube,拖入Project面板中作为一个预设体,并且删去Hierarchy面板中的Cube,将预设体Cube拖入Network Manager 中Player Prefab的位置,如图所示:
 
四. 现在开启二个运行程序,一个作为LAN Host(主机),一个作为LAN Client(客户端)
/
五 . 到这一步为主,大家可以自己控制自己创建出来的游戏主角了,然而问题是移动之后并没有进行位置同步,你在本地进行移动,并不能同步给其余客户端。如何解决这个问题呢?最简单的就是在Cube主角身上添加Network Transform组件,并且设置Transform Sync Mode 为 Sync Transform。如图所示:
六 . 现在已经实现了,创建主角并且实现同步的功能,不过我们玩点不一样的,我们不使用Network Transfrom 组件来进行位置同步,我们自己写脚本来实现位置同步,首先先去掉Network Transform组件,为Cube添加脚本名为SynMove。代码如下:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class SynMove : NetworkBehaviour {
//当 SyncVar 发生改变时,UNet 会从 Server 端向所有有效的 Client 端发送这些改变。注意这里的方向,是从 Server 到 Client ,而不是从 Client 到 Server 的方向。
[SyncVar]
private Vector3 synPos;
[SerializeField]Transform myTransform;
[SerializeField]float lerpRate = ; // Update is called once per frame
void FixedUpdate () {
TransmitPosition ();
LerpPosition (); }
void LerpPosition(){
//不是本地玩家
if (!isLocalPlayer) {
//非本地玩家的位置进行更新
myTransform.position = Vector3.Lerp (myTransform.position,synPos,Time.deltaTime*lerpRate);
}
}
[Command]
//命令, 在客户端调用,但是在服务端运行,这是方法必须以 Cmd 开头
void CmdProvidePositionToServer(Vector3 pos){
//在服务器上为synPos 同步变量赋值
synPos = pos;
}
[ClientCallback]
//只在客户端调用
void TransmitPosition(){
//是本地玩家
if (isLocalPlayer) {
//就把本地玩家的位置传给服务器
CmdProvidePositionToServer (myTransform.position);
}
}
}

SynMove

七 . 在Inspector面板中,将Cube主角拖入到 My Transform中,如图所示:

点击查看原文

unity之局域网的更多相关文章

  1. 【一天一个小知识10/20】Unity通过www获取json文本信息。

    前提:领导要我在unity获取局域网服务器的文本信息.给了一个json的网络文本让我测试.我对于json以及服务器比较陌生.就直接去网上找相关的资料. 以下是自己测试的代码,没问题. 测试的网络jso ...

  2. 项目Beta冲刺(团队)--2/7

    课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺 团队名称:葫芦娃队 作业目标:进行新一轮的项目冲刺,尽力完成并完善项目 团队博客 队员学号 队员昵称 博客地址 04160242 ...

  3. 项目Beta冲刺(团队) --1/7

    课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺) 团队名称:葫芦娃队 作业目标:尽力完成 团队博客 队员学号 队员昵称 博客地址 041602421 der himmel ht ...

  4. 关于Unity的网络框架

    注:Unity 5.1里引入了新的网络框架,未来目标应该是WOW那样的,现在还只是个P2P的架子. 网络的框架,无非是如何管理网络数据的收发,通信双方如何约定协议.之前做的框架与GameObject无 ...

  5. Unity连Photon服务器入门详解

    Photon是目前比较好用的游戏服务器.目前网上对于Photon的服务器讲解比较少,最近也对Photon做了初步的了解,做一个极其详细的入门. 首先就是得下载Photon咯 https://www.p ...

  6. Unity Networking API文档翻译(二):The High Level API

    高级API (HLAPI) 是用来提供给Unity 创建多人在线游戏的组件.它是在底层传输层的基础上构建的, 对多人在线游戏提供了很多通用的功能.当传输层支持各种网络拓扑结构的时候,HLAPI是一个功 ...

  7. Unity Networking API文档翻译(一):Networking概述

    写在翻译前的话:      我使用过Photon,研究过Ulink这些Unity提供的多人在线游戏服务器组件,这些商业组件虽然很好很强大.但是对于一个独立开发者来说,4000多软妹币还是点多.总想找一 ...

  8. Unity 3D 连接Mysql数据库

    要想使用Unity直接连接数据库需要以下几个动态库

  9. Unity塔防游戏开发

    Unity3D塔防开发流程 配置环境及场景搭建编程语言:C#,略懂些许设计模式,如果不了解设计模式,BUG More开发工具:Unity3D编辑器.Visual Studio编译器开发建议:了解Uni ...

随机推荐

  1. IIS短文件名漏洞复现

    IIS短文件名漏洞复现 一.漏洞描述 此漏洞实际是由HTTP请求中旧DOS 8.3名称约定(SFN)的代字符(~)波浪号引起的.它允许远程攻击者在Web根目录下公开文件和文件夹名称(不应该可被访问). ...

  2. Python秒算24点,行还是不行?

    周末闲来无事,看到隔壁家的老王在和隔壁家的媳妇玩24点,就进屋看了看.发现老王是真不行啊,那不行,这也不行. 就连个24点都玩不过他媳妇,给他媳妇气的,啥都不能满足,这不能,那也不能. 我坐下来和他媳 ...

  3. JDK容器类Map源码解读

    java.util.Map接口是JDK1.2开始提供的一个基于键值对的散列表接口,其设计的初衷是为了替换JDK1.0中的java.util.Dictionary抽象类.Dictionary是JDK最初 ...

  4. Hadoop自学系列集(三) ---- Hadoop安装

    这节就开始讲述Hadoop的安装吧.在这之前先配置下SSH免密码登录,为什么需要配置这个呢?大家都知道Hadoop集群中可能有几十台机器甚至是上千台机器,而每次启动Hadoop都需要输入密码才能够登录 ...

  5. Nginx安装(详细版本)

    Nginx安装文档 前言: 最近,系统部署人员那边,让我们给写一个傻瓜式的Nginx安装过程.所以就有了这个文档,本着独乐乐不如众乐乐,就分享一下.我觉得对入门小白来说,有图,乃至运行过程图,是很重要 ...

  6. Codeforces Round #219(Div. 2)373 B. Making Sequences is Fun(二分+找规律)

    题目意思大概是给你w,m,k三个数,让你从m开始找 m m+1 m+2 m+3...........m+m', 使得他们的权值之和不超过w,计算权值的方法如下S(n)·k . S(n)表示n有多少位数 ...

  7. 【Vue前端】Vue前端注册业务实现!!!【代码】

    用户注册前端逻辑 1. Vue绑定注册界面准备 1.导入Vue.js库和ajax请求的库 <script type="text/javascript" src="{ ...

  8. java学习-NIO(三)Channel

    通道(Channel)是java.nio的第二个主要创新.它们既不是一个扩展也不是一项增强,而是全新.极好的Java I/O示例,提供与I/O服务的直接连接.Channel用于在字节缓冲区和位于通道另 ...

  9. QT动画时间轴控制 QTimeLine

    QTimeLine类提供用于控制动画的时间轴 比如控制进度条的增长,图片,窗口的旋转,平移等等 QTimeLine有一个frameChanged(int)信号 当调用QTimeLine::start( ...

  10. 11个rsync使用实例

    rsync表示 remote sync,其用于在本地或与远程主机间进行文件或目录备份.相比较scp等工具,rsync有以下优点: 速度:除首次全拷贝外,其他时候实现增量拷贝,加快传输速度 安全:传输数 ...