项目实训----Unity多人游戏开发----第十篇
PUN语法介绍
- 综述
- 介绍
- 同步
- 基本使用
- 大厅匹配
- 总结
综述
本次主要针对具体代码实现多人化游戏。
介绍
同步
对于如何实现同步,这就涉及pun的同步,主要需要3步。
首先需要将道具添加组件。我们以角色为例子。
首先我们需要给人物添加Photon组件,第一个就是PhotonView组件,其次就是transform组件,对于use local要取消勾选。
然后如果这个角色有动画,需要添加下面的那个组件,同时,需要注意,对于trigger的条件控制需要放到最后一位,同时,所有的条件都需要修改为如上的属性。
然后再将角色放到photon的resource的目录下,pun会自动读取,方便生成和销毁。
可以在这个资源路径下分设其他的包,方便管理。
基本使用
以下两个方法,主要用于直接连接pun开始游戏,没有大厅匹配
public override void OnConnectedToMaster(){base.OnConnectedToMaster();Debug.Log("Lianjie");//创建房间-----------------后期需要改PhotonNetwork.JoinOrCreateRoom("Room", new Photon.Realtime.RoomOptions(){MaxPlayers = 4}, default);}public override void OnJoinedRoom(){base.OnJoinedRoom();OnCountdownTimerIsExpired(); }
其他的一些方法
//加入名为"Room"的房间
PhotonNetwork.JoinRoom("Room");
//如果没有开放的游戏就会失败。错误回调: OnPhotonJoinRoomFailed,可以进行逻辑的编写。
//尝试加入任何随机游戏:
PhotonNetwork.JoinRandomRoom();
//如果没有开放的游戏就会失败。错误回调: OnPhotonRandomJoinFailed
//创建名为"room1"的房间。
PhotonNetwork.CreateRoom("room1");
//如果名为"room1"的房间已存在就会失败并调用:OnPhotonCreateRoomFailed,可以在这个回调进行重写
大厅匹配
pun中有许多回调函数,通过这些函数来实现一些特殊的情况的匹配。
下面主要针对游戏说明。
public override void OnDisable(){base.OnDisable();CountdownTimer.OnCountdownTimerHasExpired -= OnCountdownTimerIsExpired;}public override void OnLeftRoom(){PhotonNetwork.Disconnect();}public override void OnMasterClientSwitched(Player newMasterClient)//*****************************************{if (PhotonNetwork.LocalPlayer.ActorNumber == newMasterClient.ActorNumber){//StartCoroutine(SpawnPlatforms());}}public override void OnPlayerLeftRoom(Player otherPlayer){CheckEndOfGame();}
实现一些玩家离开房间的回调判断。
判断玩家都加载了场景
private bool CheckAllPlayerLoadedLevel()//检查是否都加载了场景{foreach (Photon.Realtime.Player p in PhotonNetwork.PlayerList){object playerLoadedLevel;if (p.CustomProperties.TryGetValue(Const.PLAYER_LOADED_LEVEL, out playerLoadedLevel)){if ((bool)playerLoadedLevel){continue;}}return false;}return true;}
判断加载游戏
public override void OnPlayerPropertiesUpdate(Player targetPlayer, Hashtable changedProps)//判断游戏结束(通过生命数)||全员加载进来(然后开始倒计时){if (changedProps.ContainsKey(Const.PLAYER_LIVES)){CheckEndOfGame();return;}if (!PhotonNetwork.IsMasterClient) //不是主机不用管{return;}if (!isGameStart && changedProps.ContainsKey(Const.PLAYER_LOADED_LEVEL))//有人加载进来了{if (CheckAllPlayerLoadedLevel())//判断是不是都加载进来了{CountdownTimer.SetStartTime();}else{InfoText.text = "等待其他玩家...";}}}
加载下一个游戏,并进行初始化操作
Hashtable props = new Hashtable//下一关生命,设置下一关的属性{{Const.PLAYER_LIVES, 1},{Const.WIN_COUNT, 0},{Const.PLAYER_LOADED_LEVEL, false}};PhotonNetwork.LocalPlayer.SetCustomProperties(props);if (PhotonNetwork.LocalPlayer.GetPlayerNumber() == winner.GetPlayerNumber()){Hashtable hashtable = new Hashtable{{Const.WIN_COUNT, 1}};PhotonNetwork.LocalPlayer.SetCustomProperties(hashtable);}
总结
通过本次学习,主要是介绍pun的一些回调函数,以及游戏的一些初始化操作。
项目实训----Unity多人游戏开发----第十篇相关推荐
- 项目实训--Unity多人游戏开发(十五、道具战)
文章目录 emm关于聊天功能的闲话 道具战游戏简介 截图 游戏功能 关键代码 全局 悬浮物道具 实际道具 人物脚本 总结 emm关于聊天功能的闲话 聊天功能也是使用PhotonChat提供的API,比 ...
- 项目实训--Unity多人游戏开发(十四、UI昵称显示及转向同步问题)
文章目录 开发功能 步骤及注意事项 项目其他记录 开发功能 在玩家上方生成UI文本,用于显示昵称.生命值或其他需要的数据. 2D中玩家左右转向时不能影响UI的显示. pun网络化时要同步玩家左右转向. ...
- 项目实训--Unity多人游戏开发(十二、PUN框架--摄像机跟随)
文章目录 相机跟随 单机游戏的相机跟随 多人游戏的相机跟随 相机跟随 上一篇是一个所有玩家固定视角的游戏.多人化不需要考虑相机跟随问题. 但如果想做一个2D.超级马里奥类型的跟随视角,或者3D.GTA ...
- 项目实训----Unity多人游戏开发----第十二篇
道具战之其他道具2 综述 内容 触碰地雷 血瓶道具 随机箱子 总结 综述 上次我们主要讲述了道具的生成和拾取以及放置的功能以及代码的实现,本次主要介绍玩家触碰地雷以及其他道具的生成和销毁. 内容 触碰 ...
- 项目实训----Unity多人游戏开发----第七篇
游戏奇幻跳跃之平台2 综述 内容 导弹 摆锤 游戏控制 总结 综述 上篇我们讲述了平台的控制管理器,以及三种基础平台类型,下面将其他类型的平台进行介绍. 内容 导弹 该导弹是主要是通过一个警示线,然后 ...
- 项目实训----Unity多人游戏开发----第四篇
游戏制作之人物移动(二) 综述 主体 内容2:人物移动控制方式--鼠标控制 总结 综述 上次我们主要进行讲解的是游戏开发过程遇到的一些问题,以及想法,主要讲述了如何使用键盘进行控制人物移动.主要是通过 ...
- 项目实训-----unity多人游戏开发----第三篇
游戏制作之人物移动(一) 综述 主体 内容1:人物移动控制方式 方式1:键盘控制 键盘控制角色的transform移动 特点 键盘控制角色的rigidbody移动 特点: 总结 综述 本次我们主要进行 ...
- 项目实训--unity多人游戏开发--开篇一(综述)
文章目录 项目开篇 背景 分工 个人任务 总结 项目开篇 背景 对于游戏,在近些年来发展迅猛,例如现在的王者荣耀.原神等手游在中国非常流行,电脑游戏的发展也在不断前进,例如一些端游,英雄联盟等游戏也占 ...
- 项目实训--Unity多人游戏开发(一、综述)
目录 项目介绍及分工 个人任务 项目介绍及分工 详情可参考项目实训专栏的小组综述. 基于Unity的2D多人乱斗游戏设计与开发. 参考结合"糖豆人"与"吃鸡"等 ...
最新文章
- R语言plotly可视化:plotly可视化水平直方图(Horizontal Histogram)
- Windows环境下MySQL的zip包精简方法与安装。
- 第六章 深度学习(上中)
- Delphi中判断字母与汉字
- vs2005 创建解决方案不显示,解决方案管理器中看不到解决方案节点的解决办法...
- ERP流程入门_从会计分录理解企业基本流程[转]
- SQLSERVER复制订阅中的数据库版本选择
- ABP理论学习之Web API控制器(新增)
- 李佳琦公益助力乡村教育 为学生送上开学礼物
- MQ(消息队列)常见的应用场景解析
- Mac下SSH Key配置
- docker部署express项目
- [JavaScriptC#]收藏 备忘
- 怎么删除映射网络里的计算机,win10系统删除右键中“映射网络驱动器和断开网络驱动器”选项的详细办法...
- 开发微信“自动抢红包”软件,被罚400多万
- iphone11 sim卡故障_苹果手机出现sim卡故障怎么处理?
- Matlab笔记-取整/生成随机数
- c语言整形数组存放字符串,用一维字符数组存放字符串
- 安装微软的消息队列服务器,MSMQ消息队列的安装、启用
- win10系统激活提示无法连接到你组织的激活服务器如何解决