准备环境:

安装PhotonServer。

PhotonServer教程

安装Photon插件。

Photon插件
然后需要打开Photon的官网注册一个账号

登录以后,点击新建一个APP:

类型的话,如果是聊天室可以选择Photon Chat,普通的选择Photon PUN就可以了

复制App ID,到Unity项目中的Photon/PhotonUnityNetworking/Resources/PhotonServerSettings的
App Id Realtim

Photon云端服务器不稳定,所以在Server Address填上服务器IP地址

Server Port写5058,

然后就是代码设置:

随便找个场景中的物体挂载这三个脚本,脚本是插件自带的。

ConnectAndJoinRandom 这个脚本自动连接到PhotonServer,尝试加入一个随机的房间,如果没有发现并创建一个。

DemoBoxesGui是运行时在左下角显示连接状态的,并会生成一个ongui按钮,实现断开与连接,可以不挂载。(新版插件已删除)

ShowStatusWhenConnecting 是在登录时在屏幕中间显示连接状态,可以不挂载。(新版插件已删除)

1.新建场景,新建一个Plane,和Cube,将Cube设成预制体,放到Resouces文件夹:

2.给Cube加上Photon View组件,如果要同步的话,这个组件是必须的

将Cube的Transform拖入Observed Components

观察选项

Observe Option字段让你选择更新如何发送以及何时被发送。该字段还会影响到OnPhotonSerializeView被调用的频率。

Off 顾名思义,关掉。如果该PhotonView被保留为RPCs限定时可以很有用。

Unreliable 更新如是被发送,但可能会丢失。这个想法是,下一次更新很快到来,并提供所需的正确的/绝对的值。这对于位置和其他绝对数据来说是有利的,但对于像切换武器这样触发器来说是不好的。当用于同步的游戏对象的位置,它会总是发送更新,即使该游戏对象停止运动(这是不好的)。

Unreliable on Change 将检查每一个更新的更改。如果所有值与之前发送的一样,该更新将作为可靠的被发送,然后所有者停止发送更新直到事情再次发生变化。这对于那些可能会停止运动的以及暂时不会创建进一步更新的游戏对象来说是有利的。例如那些在找到自己的位置后就不再移动的箱子。

Reliable Delta Compressed 将更新的每个值与它之前的值进行比较。未更改的值将跳过以保持低流量。接收端只需填入先前更新的值。任何你通过OnPhotonSerializeView写入的都会自动进行检查并以这种方式被压缩。如果没有改变, OnPhotonSerializeView不会在接收客户端调用。该“可靠的”部分需要一些开销,所以对于小的更新,应该考虑这些开销。

3.新建脚本ClickFloor,将脚本付给Plane

using Photon.Pun;
using UnityEngine;public class ClickFloor : MonoBehaviour
{public GameObject m_Prefab;void Update(){if (Input.GetMouseButtonDown(1)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if (Physics.Raycast(ray, out hit)){              PhotonNetwork.Instantiate(m_Prefab.name, hit.point + new Vector3(0, 3, 0), Quaternion.identity, 0);}}}
}



4.新建脚本PhotonConnect.cs

using UnityEngine;
using Photon.Pun;//导入Photon命名空间
using Photon.Realtime;public class PhotonConnect : MonoBehaviour
{void Start(){//初始化版本号PhotonNetwork.ConnectUsingSettings();PhotonNetwork.GameVersion = "1";}//按钮事件 创建房间public void Btn_CreateRoom(string _roomName){//设置房间属性RoomOptions m_Room = new RoomOptions { IsOpen = true, IsVisible = true, MaxPlayers = 4 };PhotonNetwork.CreateRoom(_roomName, m_Room);}//根据房间名加入房间public void Btn_JoinRoom(string _roomName){PhotonNetwork.JoinRoom(_roomName);}//随机加入已经创建的房间public void Btn_JoinRandomRoom(){PhotonNetwork.JoinRandomRoom();}void OnGUI(){//显示连接信息GUILayout.Label(PhotonNetwork.NetworkClientState.ToString(), GUILayout.Width(300), GUILayout.Height(100));}
}

5.将脚本付给Main Camera(任意一个场景中的对象就行),然后新建3个按钮,绑定事件:



6.Cube预制体Apply一下,然后从场景中删除,运行,运行后看到左上角出现<ConnectedToMasterServer>后,在点击创建房间,就会自动加入创建的房间了,左上角出现<Joined>则表示加入房间成功,然后点击右键就会实例化方块预制体了。

参考:恬静的小魔龙

多人联机——Photon插件的是使用相关推荐

  1. 基于Unity的弹幕游戏多人联机尝试

    给一个已经定型的游戏添加哪怕是一个小特性,都是棘手的事情,很容易引入新的bug,或者破坏已有的功能.复杂的联网更是如此,它涉及到的改动几乎遍及系统的方方面面.玩家的一举一动都需要在其他人的屏幕上展现出 ...

  2. Unity多人联机的实现

    实现多人联机的方法有几种,具体取决于你的具体需求.以下是一些选项: Unity Multiplayer:Unity有自己的内置网络解决方案,称为Unity Multiplayer(以前称为UNET). ...

  3. 运用双腾讯云搭建《饥荒》多人联机服务器

    对于一个喜欢玩游戏的人来说,<饥荒>我想大家很多人都玩过,在玩的时候,我们都会搭建一个服务器来和朋友一起玩,今天在腾云阁看到一篇文章,如何运用双腾讯云搭建<饥荒>实现多人联机服 ...

  4. 【转】多人联机射击游戏中的设计模式应用(一)

    为了方便大家更加系统地学习和掌握各种常用的设计模式,下面通过一个综合实例--"多人联机射击游戏"来学习如何在实际开发中综合使用设计模式. 反恐精英(Counter-Strike, ...

  5. arcalet云服务平台支持Unity3D开发实时多人联机游戏

    arcalet 云服务平台支持 Unity3D 开发实时多人联机游戏 打破旧有的实时联机开发模式,全新的云端在线游戏平台带来更敏捷.简单及有 效的帮助开发者减少开发时间与成本. 开发联机游戏除了要解决 ...

  6. UE4 多人联机显示每个人的playid

    目的:在多人联机模式下,在每个pawn的上方显示textrender,并且在textrender里显示每个pawn的playerid 下面以一个listen server和两个client的方式测试. ...

  7. UE4 HTC VIVE 多人联机

    1. editor的VR模式不支持网络,所以在VR模式下没法调试多人联机程序 2. editor的standalone模式,引擎的源码里面把VR模式关闭了,所以需要修改引擎源码 3.可以在命令行下打开 ...

  8. 云服务器饥荒_运用双腾讯云搭建《饥荒》多人联机服务器

    对于一个喜欢玩游戏的人来说,<饥荒>我想大家很多人都玩过,在玩的时候,我们都会搭建一个服务器来和朋友一起玩,今天在腾云阁看到一篇文章,如何运用双腾讯云搭建<饥荒>实现多人联机服 ...

  9. 多人联机的俄罗斯方块游戏(C++),游戏规则模仿任天堂Tetris99,基于qt,kcp,protobuf,qslog。

    目录 Tetris 游戏截图 游戏菜单 1v1对战 9人对局 游戏特性细节介绍 攻击机制 Tetris标准特性 Super Rotation System(超级旋转系统) 7 bag system ( ...

  10. 从零学习游戏服务器开发(一) 从一款多人联机实时对战游戏开始

    写在前面的话 经常有学生或者初学者问我如何去阅读和学习一个开源软件的代码,也有不少朋友在工作岗位时面对前同事留下的项目,由于文档不完善.代码注释少.工程数量大,而无从下手.本文将来通过一个多人联机实时 ...

最新文章

  1. Kattis - bela
  2. 配置arm-linux-gcc 位置
  3. 0123互联网新闻 | 在线教育机构掌门1对1获3.5亿美元融资;淘宝直播独立App将在春节前上线...
  4. 协议处理程序初始化失败_TCP协议、算法和原理
  5. javascript 正则表达式小案例
  6. 等价类划分法测试用例
  7. 使用Poedit汉化wordpress主题
  8. jmeter +ant实现接口的自动生成测试报告
  9. java.lang.SecurityException: com.example.rxtest was not granted this permission: android.permission
  10. Oracle EBS 接收事务处理类型 rcv_transactions transaction_type
  11. 利用css画三角箭头图标
  12. 成都拓嘉启远:拼多多万人团要不要去参加
  13. SOA 的定义 ——谢炯
  14. NBUT 1647 (多校连萌3)
  15. 监控摄像头上滤光片的作用是什么
  16. 如何“谨慎”使用“数据驱动”的风控模型(二)——决策篇
  17. 11. 将学生的学号及平均成绩定义为一个视图(s_g),学号用sno表示,平均成绩用gavg表示。
  18. Android相机开发详解(一)
  19. 计算机主机打不开怎么解决办法,电脑打不开的解决方法步骤详解
  20. 常用于教学的计算机软件,常用计算机软件对化学教与学的重要性

热门文章

  1. Android省市县三级联动 真实项目抽出 调用只需3行代码
  2. 红米note3全网通_标注:2015112_官方线刷包_救砖包_解账户锁
  3. wifi 框架流程分析
  4. SSL 3.0 Poodle漏洞修复方法
  5. centos 7 JDK 环境部署
  6. IOS 开发技能图谱——ios 开发工程师必知必会要点
  7. Macbook Pro拆机清灰体验
  8. 平均年薪23万!为什么却很少见程序员炫富?
  9. c#实现 正弦sin、反正弦arcsin,正切tan、反正切arctan:求角度值
  10. Linux系统下查看dsdt table