欢迎大家继续学习 Unity 游戏编程进阶
本节我们讲解网络游戏中场景收集物的制作
本节采用 PPT
讲解加项目演示的方式，介绍场景收集物相关的知识要点 在项目演示阶段，我们演示了场景收集物在《慕课英雄
2》项目中的具体应用 希望大家可以根据自己的专业基础和学习能力从以下方法中选择一种来学习 第一种方法，先看
PPT 讲解，对相关知识有一个系统的了解，然后观看项目的演示视频，学习知识点的应用
第二种方法，先看项目演示视频，了解知识点的具体应用，再回到 PPT
讲解阶段，有针对性地学习相关的知识要点 第三种方法，跳过 PPT 讲解，直接进入项目演示
通过理解项目中的知识要点的运用，完成相关知识要点的学习，不需回顾 PPT 讲解 下面进入PPT讲解阶段。
Unity 项目导入 PUN 资源包 PUN 目录中有一个
UtilityScripts 文件夹 该文件夹包含一些与 PUN
相关的功能脚本，具体包括 连接服务器和随机加入房间脚本，ConnectAndJoinRandom
房间内聊天功能脚本，InRoomChat 房间内时间设置脚本，InRoomTime
以及简单收集物脚本，PickupItemSimple 我们可以使用这些脚本快速地完成网络游戏中某些功能的开发
本节我们使用 PickupItemSimple 脚本，完成网络游戏收集物的制作
在《慕课英雄 2》游戏战斗场景中
我们添加了可再生的血瓶收集物，玩家对象收集血瓶，增加他们当前的血量
血瓶收集物被收集后，一定时间后在原地再去生成 我们使用
PickupItemSimple_Potion 脚本 实现《慕课英雄
2》项目中血瓶收集和再次生成功能 该脚本修改了 UtilityScripts
文件夹自带的 PickupItemSimple 脚本 本页 PPT
给出血瓶收集的流程图 当有对象进入血瓶收集范围时，开始执行血瓶收集逻辑
首先，判断进入血瓶收集范围内的玩家是否为本地玩家 如果不是，结束血瓶收集流程
如果是本地玩家进入血瓶收集范围，执行以下逻辑 本地客户端使用
RPC 调用所有客户端的血瓶收集与再生函数
在该函数中，所有客户端禁用血瓶对象，一段时间后启用血瓶对象 实现血瓶收集和再生功能。
本地客户端使用 RPC，调用 MasterClient 的加血函数 实现本地玩家加血。
MasterClient 实现玩家加血后，调用 RPC，更新所有客户端中 该玩家对象的血量，完成血瓶收集
下面我们介绍实现血瓶收集功能的脚本
PickupItemSimple_Potion。
脚本类的声明之前 有一个 RequireComponent（typeof（PhotonView））前缀
表明该脚本绑定的游戏对象必须包含 PhotonView 组件
脚本包含多个公有字段，HealthPoint 表示血瓶收集后
玩家对象增加的血量，SecondsBeforeRespawn 表示血瓶收集后
再去生成需要经过的时间 我们使用
Trigger 触发器来检测是否有物体进入血瓶的收集范围
当有物体进入血瓶收集范围时，OnTriggerEnter 函数被调用
OnTriggerEnter 函数中，other 保存了进入触发器范围的游戏对象
如果对象的标签不等于 Player，终止函数执行。
其次 需要判断进入血瓶收集范围的玩家对象是否处于本地客户端
如果玩家对象属于本地客户端，本地客户端的血瓶对象调用 Pickup 函数 实行本地玩家对象的加血逻辑。
如果玩家对象属于远程客户端，不执行加血逻辑 在
Pickup 函数中
本地客户端使用 RPC 调用所有客户端的 PunPickupSimple
函数 该函数实现玩家加血，血瓶收集以及血瓶再生功能
下面讲解 PunPickupSimple
函数 首先，判断 RPC 请求是否由本地客户端发起
如果是，调用 GameManager 类的 LocalPlayerAddHealth
函数，实现本地玩家的加血逻辑 其次
在 PunPickupSimple 函数中，所有客户端使用 SetActive 函数
禁止血瓶对象，表示血瓶已经被收集 使用 Invoke 函数，延时调用
RespawnAfter 函数 RespawnAfter 函数用来血瓶的再次生成
在 RespawnAfter 函数中，使用 SetActive 函数
启用血瓶对象，表示血瓶再次生成 下面讲解
GameManager 脚本中，实现本地玩家加血逻辑的 LocalPlayerAddHealth
函数 该函数直接获得本地玩家对象的 PlayerHealth 组件
然后调用组件的 RequestAddHP 函数 增加本地玩家血量。
在 PlayerHealth 脚本的 RequestAddHP
函数中 本地客户端向 MasterClient 发起 RPC 请求 让
MasterClient 调用 AddHP 函数，执行玩家加血逻辑
MasterClient 接收到 RPC 请求后，执行 AddHP
函数 如果该玩家对象已经死亡，或者玩家对象处于满血状态，不执行加血逻辑
否则增加玩家血量，控制玩家血量不能超过预先设定的最大值 最后，MasterClient
使用 RPC，调用所有客户端的 UpdateHP 函数 实现玩家血量信息的同步。
以上就是网络游戏中血瓶收集物的实现 [空白_录音]
下一节我们将《慕课英雄 2》的项目构建到 PC 端和移动端
最后进入演示环节 演示环节的内容为向
GameScene 场景中添加血瓶对象 给它绑定 PickupItemSimple_Potion
脚本 实现血瓶收集功能