这两天在学习的过程中,发现一个讲Unity的unet组件的好教程,在这里分享给大家。 
新建一个 UnetProject。 
新建一个GameObject重命名为Network Manager,给它添加Network Manager组件,这是Unet提供的一个核心管理组件,可以在脚本里访问Network Manager进行网络开发。 
还需要添加一个 Network Manager HUD 组件,这个用来显示UI,UI上的按钮会跟Network Manager交互。这时候运行屏幕上会出现如下: 

LAN Host(H):把本机作为Server + Client,即服务端加客户端 
LAN Client(C):与服务器连接,后面填ip地址(localhost就是本机) 
LAN Server Only(S):本机只作为服务端 
一般在测试时才会用这个组件。 
现在用unity自带的模型拼装一个Player出来(随便就行),给他添加Network Identity 组件,这是一个网络标识符,拥有标识符的物体可以在网络上生成,也就是同步到其他客户端。 

标注的地方:Server Only:只会在服务器端时才有权限对他进行操作 
Local Player Authority: 会在客户端时有权限,是一个局部角色 
我们给Player选中Local Player Authority,表示运行时连接上服务端我们也可以对他进行操作。 
为了让他能在局域网生成, 
 
这表示我们要生成的角色是哪个,这样在每次联机时Network Manager会自动根据Player Prefab 创建一个角色。 
Auto Create Player : 每次服务器,客户端连接都会创建一个Player 
现在运行看见的效果不明显,我们先把控制角色做了,在运行,效果明显。

新建PlayerController脚本并编辑:

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;//为了能让脚本在连上局域网的同时还能分别控制物体,所以要继承 NetworkBehaviour
public class PlayerController : NetworkBehaviour {public float traSpeed = 3;  //移动的速度public float rotSpeed = 120;  //一秒旋转的角度// Update is called once per framevoid Update () {// isLocalPlayer 是 NetworkBehaviour 的内置属性if (!isLocalPlayer)    //如果不是本地客户端,就返回,不执行下面的操作{return;}float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");transform.Translate(Vector3.forward * v * traSpeed * Time.deltaTime);   //朝某个方向移动transform.Rotate(Vector3.up * h * rotSpeed * Time.deltaTime);  //围绕某轴旋转}
}

这里还需要给Player添加一个Network Transform组件才行,这是一个同步Transform的组件,包括:position、rotation、scale。它的同步是单向的,就是将你控制的物体同步到其他客户端,当你在服务端改变该物体时,客户端不会跟着改变。

按Ctrl+B打包工程,选好路径后,以后按Ctrl+B会自动打包,现在把打包后的程序和unity都运行起来,毕竟是联机,肯定要有两个才能看出效果,我默认是unity作为服务端+客户端,打包后的程序作为单纯的客户端。下面是效果图: 

这里运行是没有问题的。但是两个角色看起来一样,无法区分,现在来区分一下。编辑脚本:

 //这是重写 NetworkBehaviour 内的方法//这个方法只会在创建本地角色时调用public override void OnStartLocalPlayer(){GetComponent<MeshRenderer>().material.color = Color.blue;}

添加以上代码,然后运行,


这是我们发现只有自己控制的那个才是蓝色,另外一个还是默认的白色,这样我们就可以区分角色了。 
现在我们给角色添加上枪和子弹,让他可以射击。还要给子弹添加上Rigidbody组件,取消重力。把枪的碰撞器去掉,它不需要做检测。 

如图,这只是效果图。。我给角色添加了一个Gun作为枪,在枪前面添加一个空物体作为生成子弹的地方。。编辑脚本

  //类下添加public GameObject bulletPre;   //子弹的prefabpublic Transform bulletTrans;  //生成子弹的位置//update方法中添加if (Input.GetKeyDown(KeyCode.Space)){Fire();}//添加一个方法void Fire (){GameObject bullet = Instantiate(bulletPre, bulletTrans.position, Quaternion.identity) as GameObject;bullet.GetComponent<Rigidbody>().velocity = transform.forward * 10;Destroy(bullet, 2);   //2秒后销毁子弹}

现在子弹也能射击了,只不过不同步,现在我们让他同步。联机游戏会把所有的功能处理都放到Server上处理,例如敌人的生成,游戏逻辑的判断,所以这里的子弹我们也让他在Server上生成,然后同步到客户端。给子弹添加Network Identity组件,然后修改Network Manager

修改 PlayerController脚本:

[Command]    //在客户端调用,但是在服务端运行,这是方法必须以 Cmd 开头void CmdFire(){GameObject bullet = Instantiate(bulletPre, bulletTrans.position, Quaternion.identity) as GameObject;bullet.GetComponent<Rigidbody>().velocity = transform.forward * 10;Destroy(bullet, 2);   //2秒后销毁子弹NetworkServer.Spawn(bullet);    //在所有客户端都生成一个物体}

注意:调用的哪里也改成CmdFire。。在给子弹添加Network Transform组件,Transform Sync Mod对应Sync Rigidbody 3D,这是同步刚体组件,Network Send Rate 改为0,表示只同步一次,就是添加速度就行了。 
好了现在已经可以连上局域网,单独控制并且发射子弹了,还有的内容我将会在接下来的博客中进行讲解。 
本博客用作新手学习讨论,如有不好或错误的地方也请指出来,谢谢。

Unity3D UNET 模仿局域网游戏相关推荐

  1. Unity3D UNET 模仿局域网游戏(二)

    紧接着上一篇博客,上一篇博客中,我们已经能够分别移动角色,并且控制他射击了,而且还稍微区分了一下不同的角色.这篇博客中我们继续讲解后面的内容.  既然角色都已经可以射击了,那肯定还得需要一个血量对吧, ...

  2. unity之使用unet创建局域网游戏

    教程译文连接:http://blog.sina.com.cn/u/2596401895

  3. Unity3D是怎么提升游戏运行效率的?

    2019独角兽企业重金招聘Python工程师标准>>> 先感谢一下作者软件民工,今天要分享3d素材unity3d是怎么提升游戏运行效率的? 用c#写的i++和c写的i++,编译后的机 ...

  4. Unity3D休闲射击类游戏《Survival Shooter》完整源码

    Unity3D休闲射击类游戏<Survival Shooter>完整源码分享给大家学习,这个对于那些想要制作u3d射击类游戏有很大帮助. 运行环境是:Unity5.3.1 下载地址: ht ...

  5. Unity3D 2D射击小游戏瞄准线的实现

    Unity3D 2D射击小游戏瞄准线的实现 0. 前言 本片文章是对 https://www.bilibili.com/video/bv1sY411V7tx 视频中瞄准线是如何实现的一个讲解教程,欢迎 ...

  6. 一例vmware 虚拟机造成局域网游戏魔兽争霸看不到对方

    问题:windows8/win8不能连局域网玩魔兽争霸,cs等局域网游戏,确认是连的同一台路由器,防火墙已关. 我经过检查后发现,主机使用vmware 虚拟机软件,vmware 虚拟机会产生VMwar ...

  7. Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----04--修改菜单窗口

    Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----04--修改菜单Shop窗口 此脚本用于创建商店以销售商品 --------------------------------- ...

  8. unity3D第一人称射击游戏(推荐)

    unity3d第一人称射击游戏(推荐) 第一部分:简介   这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS).其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思 ...

  9. 内网计算机游戏不被检测,两台未联网的Win7电脑建立局域网游戏的方法

    说到游戏,可能很多同学都会想到在学校时的光辉岁月,每当看到多个同学在玩同一个游戏时,就会有一个疑问,两台未联网的Win7电脑怎么建立局域网游戏的?下面小编将为大家分享两台未联网的Win7电脑建立局域网 ...

最新文章

  1. python要不要装pycharm-Python和pyCharm安装
  2. html中样式控制的问题
  3. PHP基于数组的分页函数(核心函数array_slice())
  4. 如何用SAP ABAP编程语言实现一个简单的区块链模型
  5. 旅行者 问题_门槛项目:没有旅行者回到他的原籍城市。
  6. 信息学奥赛C++语言:由大到小输出1~100的整数
  7. idea database 添加字段不更新_如何借助IDEA数据库管理工具可视化使用TDengine?
  8. Spring Boot 2.X 如何优雅的解决跨域问题?
  9. Struts2 中 Session 的使用
  10. Java I/O 全面详解
  11. 马里兰帕克分校计算机研士排名,2020年马里兰大学帕克分校QS世界排名
  12. Linux平台下rar, 7z, zip压缩文件密码破解
  13. 单月营业额一个亿,任泉李冰冰黄晓明追着投钱!这家企业是谁
  14. lempel ziv matlab,精讲Lempel-Ziv压缩算法
  15. android9自动安装权限9,按键精灵所有者读写权限安卓9.0如何获取?设置
  16. 计算机毕业设计Python+uniapp学生课堂考勤小程序(小程序+源码+LW)
  17. Tumbler QML Type
  18. [小黄书管理平台]登录页面和模型驱动表单
  19. 微信小程序居家养老+后台管理系统
  20. 移动pc客户端迷你版泄露

热门文章

  1. 求问大神!类似于TUTK的P2P云平台还有哪些啊?
  2. VisualGDB安装使用
  3. 初入NLP领域的一些小建议 1
  4. php中进制转换,php的进制转换
  5. 网络运维系列:远程服务器登录、配置与管理
  6. SUMIF函数的7种使用方法
  7. JAVA_eclipse插件绘制GUI界面过程
  8. Tushare原学习文档(二投资参考数据)
  9. 好长,越往下翻越喜欢!
  10. java 水仙花数_如何理解Java中的水仙花数?