大致原理:每个客户端把自己的 相关数据(比如位置信息)传到服务器;再由服务器同步到每一个客户端里;

组件官方网站: https://www.photonengine.com/zh-CN/Photon

大致步骤

1、在官网创建账户;
2、在官网 创建应用: Create new application

选择类型 photon pun -》 输入application’s name

创建成功后,可以看到应用的存在,我们要注意 App ID 这串符号,后面要用;

3、【可选项】申请国内的站点服务
因为默认使用的是 国外的服务器,国内访问可能会慢一点; 所以可以在中国区的官网申请中国光子云;

光子引擎连接: https://vibrantlink.com/

#1 申请光子云

填写申请信息:注意app id 就是上面提到的id;

然后等邮件吧,工作日才会申请下来,周末可能放假了,我目前还没有等到,555.。。。;

#2 修改配置
这里将放到 4 - #2里面讲解; 因为有光子云 和没有 光子云有些许区别;

4、创建Unity项目,搭建基本的框架:

#1 导入 photon pun2- 插件;在 assets store里面搜索下载导入;

ps: photon pun2+ 是pro版本,要付费, - 是免费版本;
刚导入可能会有这个窗口,我们跳过,在 #2里进行详细配置;

#2 修改配置文件: 导入 photon之后,对配置文件进行 些许配置

  • 1、Photon -》 PhotonUnityNetworking -》 Resources: 找到 PhotonServerSettings; 直接搜这个文件也可以;
  • 2、 申请了中国光子云的设置方法:
    • a. 找到脚本 LoadBalancingClient.cs ;
      修改 NameServerHost, 由 ns.exitgames.com 改为 ns.photonengine.cn;
    • b. PhotonServerSettings 的 Fixed Region 设置为 cn;
  • 3、 正常的 设置 PhotonServerSettings文件
    两处: App id 就是上面反复提到的 id; App Version, 可以随意设置,比如 1.0;

#3 写脚本,搭建 框架
小demo:

  • 1、创建 player 的预制体:

    • a. 新建Cube; 添加一个脚本 : PlayerCubeController; 简单移动逻辑
    using Photon.Pun;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;public class PlayerController : MonoBehaviour
    {public float moveSpeed = 2;public float rotateSpeed = 40;private PhotonView pv;// Start is called before the first frame updatevoid Start(){pv = GetComponent<PhotonView>();}// Update is called once per framevoid Update(){if(!pv.IsMine || !PhotonNetwork.IsConnected)return; //让 玩家控制 自己的角色float hValue = Input.GetAxisRaw("Horizontal");float vValue = Input.GetAxisRaw("Vertical");Vector3 moveValue = new Vector3(hValue*moveSpeed*Time.deltaTime,vValue*moveSpeed*Time.deltaTime,0);this.transform.Translate(moveValue,Space.World);if(Input.GetKey(KeyCode.R)){Vector3 rotateValue = new Vector3(0, rotateSpeed*Time.deltaTime, 0);this.transform.Rotate(rotateValue);}}
    }
    • b.在 cube上 添加一个 photon view组件; 这个组件是 告诉服务器 我要同步那些信息,下面举例同步 位置信息 transform;
      两处修改: 1、 Observerable Serach : 改为Manual; 2、 把Transform组件拖到 Observed Components里面;

      ps: 我们只能同步 指定的组件,如 transform、animator等等,具体可到官网查看;

    • c. 将cube 设为预制体,但是要放到指定文件夹: Photon -> PhotonUnityNetworking -> Resources: 文件夹下面;

  • 2、设置 联网 信息:

    • a. 创建空物体 PhotonManager, 挂在一个新建脚本 PhotonManager:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using Photon.Pun;   // 引入命名空间
    using Photon.Realtime;public class PhotonManager : MonoBehaviourPunCallbacks  // 修改继承对象
    {public GameObject playerCube;public Transform posOne;public Transform posTwo;// Start is called before the first frame updatevoid Start(){PhotonNetwork.ConnectUsingSettings(); //通过我们之前配置的文件 连接服务器;Debug.Log("连接上服务器");}//监听 函数, 连接上服务器 执行public override void OnConnectedToMaster(){base.OnConnectedToMaster();//创建 或者 进入房间RoomOptions roomOptions = new RoomOptions();roomOptions.MaxPlayers = 20;PhotonNetwork.JoinOrCreateRoom("Room0820",roomOptions, TypedLobby.Default);}public override void OnJoinedRoom(){base.OnJoinedRoom();Debug.Log("连接上房间");//创建 玩家:if (playerCube == null || posOne == null || posTwo == null)return;if (PhotonNetwork.LocalPlayer.IsMasterClient){  //本身的玩家 是 主机PhotonNetwork.Instantiate(playerCube.name, posOne.position, playerCube.transform.rotation);// 服务器 帮我们创建玩家;  name对应于resources 文件夹下的prefab}else{PhotonNetwork.Instantiate(playerCube.name, posTwo.position, playerCube.transform.rotation);}}}

Unity开发 Photon Pun 多人游戏组件相关推荐

  1. Unity之使用Photon PUN开发多人游戏教程

    前言 Photon是一个网络引擎和多人游戏平台,可以处理其服务器上的所有请求,我们可以在 Unity(或其他游戏引擎)中使用它,并快速把游戏接入Photon的网络中,而我们就可以专注于在项目中添加逻辑 ...

  2. Photon PUN和Photon Server连接问题及解决方法(Unity开发)

    报错关键词:CENetThreadPool::Process - Exception; Unexpected protocol 相关关键词:Unity:Photon:PUN:MMO 1. 背景 在开发 ...

  3. Unity 使用Photon Server 联网开发(二)游戏同步+房间列表

    photon联机的配置: 直接去官网下载Pun的资源包导入项目,设置PhotonServerSettings配置文件,配置appid.通讯协议.服务器地址.端口号:服务器地址可以配置成自己本地服务器. ...

  4. Unity开发使用DOTween插件实现ui组件慢慢消失和慢慢出现

    有时候做游戏提示的话,需要一个慢慢出现慢慢消失的效果,Unity开发使用DOTween插件实现ui组件慢慢消失和慢慢出现非常的方便. 做一个简单的小笔记,也分享在csdn上,直接上步骤 这里需要导入D ...

  5. 浅谈Unity与VR产业,用Unity开发VR应用

    VR(Virtual Reality的缩写,中文翻译-虚拟现实)概念早在80年代初就被提出来的,其具体是指借助计算机及最新传感器技术创造的一种崭新的人机交互手段. 中国VR产业仍在摸索阶段,亟缺复合型 ...

  6. 浅谈Unity与VR产业,用Unity开发第一款VR应用

    部分内容为整合与装载 浅谈VR VR(Virtual Reality的缩写,中文翻译-虚拟现实)概念早在80年代初就被提出来的,其具体是指借助计算机及最新传感器技术创造的一种崭新的人机交互手段. 中国 ...

  7. Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity

    Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity MP4 |视频:h264,1280x720 |音频:A ...

  8. 《Unity开发实战》——2.2节创建画中画效果

    本节书摘来自华章社区<Unity开发实战>一书中的第2章,第2.2节创建画中画效果,作者 (爱尔兰)Matt Smith (巴西)Chico Queiroz,更多章节内容可以访问云栖社区& ...

  9. unity开发入门_Unity游戏开发终极入门指南

    unity开发入门 Unity is a great tool for prototyping everything from games, to interactive visualisations ...

  10. Unity开发NGUI代码实现ScrollView(放大视图)

    尊重原创,转载:http://www.cnblogs.com/daxiaxiaohao/p/4745549.html Unity开发NGUI代码实现ScrollView(放大视图) 下载NGUI包 导 ...

最新文章

  1. 最新Java中Date类型详解
  2. 【BZOJ 3879】SvT
  3. java设计模式---单例模式
  4. docker详细介绍
  5. mysql. Oracle创建视图,Navicat 教程:Oracle 视图
  6. SSH框架整合实现Java三层架构实例(一)
  7. Qt Creator管理项目
  8. 趣说游戏AI开发:曼哈顿街角的A*算法
  9. Not using the local TSLint version found for XXX
  10. c语言二维数组代码,C语言之二维数组(示例代码)
  11. 2005级计算机系本二班专业知识大赛
  12. GIS专家:云GIS带来的最大影响是体系架构
  13. CODE[VS] 1979 第K个数
  14. [USACO13FEB]Milk Scheduling【拓扑序】
  15. Android踩内存工具,Android之内存分析工具
  16. Excel小技巧-获取列数
  17. 笔记本win7系统关闭触摸板功能的方法
  18. 塔防类游戏 ——简单的角色合并逻辑示例
  19. Python-Turtle 简易教程
  20. NuxtJS 项目部署如何部署到nginx

热门文章

  1. 【C语言】猜灯谜问题
  2. 移动通信技术的发展历程初
  3. linux 无线ap模式,在Linux(CentOS)上开启小度WIFI无线AP模式
  4. PHPProxy建立代理服务器
  5. ESAYUI filebox 隐藏
  6. 林辉高考机器人_“成都造”高考机器人 高考数学成绩稳定在136分
  7. 2020启智开发者大会精彩来袭,这些公开课不容错过!
  8. 如何把img格式转换成vmdk格式
  9. cocos2d 由导出文件.csb反推出cocosUI工程
  10. 数学猜想验证步骤_“猜想——验证” 数学学习的重要方法