Unity联机游戏如何实现粒子动画同步?一种基于Photon PUN2的网络游戏常用组件封装包 您所在的位置:网站首页 photon联机 Unity联机游戏如何实现粒子动画同步?一种基于Photon PUN2的网络游戏常用组件封装包

Unity联机游戏如何实现粒子动画同步?一种基于Photon PUN2的网络游戏常用组件封装包

2024-06-18 20:26| 来源: 网络整理| 查看: 265

【此包装将包括】

Photon PUN2 C#(Unity)SDK

一个粒子动画同步组件 PhotonParticleSystem.cs

一个云变量组件CloudVariable.cs

伤害计算低级API DamageRequest.cs

伤害计算高级API DemoBattleScript.cs

【使用的前置条件】

需要学会使用Photon PUN2

需要有自己的Photon PUN2 Appid并申请中国的光子云或者部署专用服务器

【用法指导】

1、开发环境的配置:最好使用Unity2022.2.15版本

在PhotonIanPlus/Photon/PhotonUnityNetworking/PhotonServerSetting中

将AppIdPUN一栏清空填上自己的ID

2、PhotonParticleSystem的使用方式

确保在对应物体上已经添加PhotonView和ParticleSystem后,添加PhotonParticleSystem(在菜单Effects里面)组件

并在编辑器ParticleSystem选项中绑定对应的粒子系统

则可实现粒子动画同步的暂停、播放、停止、清理,其代码如下

public class example:Monobehavior{ public PhotonParticleSystem pp; void Example(){ pp.Pause(); pp.Stop(); pp.Play(); pp.Clear(); } }

其中括号里不填是默认所有玩家的客户端都放映粒子动画

而其中可以填写RpcTarget或Player来指定玩家播放动画

如:

pp.Play(RpcTarget.All); pp.Play((Player)player);

3、CloudVariable的用法

首先,在需要使用云变量的物体上挂载一个CloudVariable组件

其次,云变量可以通过PhotonStream网络同步传输,实现所有客户端变量同步

可以用作:血量显示、玩家头顶昵称显示

在需要进行云变量同步传输的脚本中,首先定义一个云变量的引用

public CloudVariable variable; //or private CloudVariable variable; void Awake(){//或者Start() variable=GetComponent(); }

对于云变量的设定

//你既可以 variable.cloudVariable=xxx; //也可以 variable.Set(xxx);

对于云变量的读取

//获取云变量的值,返回一个Object object buff = variable.Get(); //获得一个云变量的整数值 int iVal = variable.IntValue(); //或者也可以 iVal = Convert.ToInt32(cloudVariable) //获得一个浮点值 float fVal = variable.FloatValue(); //或者也可以 fVal = (float)Convert.ToDouble(cloudVariable); //获得一个云变量的字符串形式 int iVal = variable.toString; //将云变量转化为向量或其他 Vector3 v3 = (Vector3) object; OtherType Var = (OtherType) object; //注意传输的object必须是Photon可序列化传输的(详情请上网搜索) //获得云变量类型 Type t = variable.GetType();

云变量的比较

先转化,再比较

//例如 int Myint=xxx; //int类云变量,获取Int值再比较 if(variable.IntValue()==Myint){ //do something }

4、聊天系统

有一个ChatManager预制件

将其拖到一个有效的UIcanvas下即可使用

在ChatManager的UI中,左上角下拉框选择是聊天还是命令模式

聊天模式:

点击confirm发送聊天内容

挂载的ChattingSystem脚本有一个方法shutup,就是将当前玩家禁言

想要和某人私聊的格式为:@+somebody+空格+message

命令模式:

请打开脚本,编辑方法Parse()方法来解析命令,可以是房间管理、传送、物品给予等

5、战斗系统

## 低级API——随机数请求脚本

原理:通过向主客户端提交rpc请求并收到返回

将DamageRequest放置到一个有PhotonView的物体上,这个物体最好是造成和承受伤害的物体

为了游戏的公平性和云存档的方便,你最好再准备一个专用服务器或者web接口,推荐使用PlayFab

创建这个房间的客户端向服务器请求一个随机数并返回,获得DamageRequest的引用后

(具体提交请求和得到反馈的代码格式依据你的服务器而定)

//控制角色的代码 public class example:MonoBehavior{ public DamageRequest damageRequest;//获得组件的引用 void RequestRandom(){ //在这里填写向服务器请求随机数种子的逻辑 } //得到服务器的请求后回调 void OnRandomFeedBack(Result result){ damageRequest.initialize(result.randomseed) //Unity引擎随机数算法都是基本一致的,获得相同的种子,则生成的结果会相对公平。 } }

绑定收到随机数的方法

damageRequest.OnRandomFeedback = (int a)=>{ //这里编写你受到随机数的逻辑 }; //或 void onRandomFeedback(int i){ //do something } damageRequest.OnRandomFeedback=onRandomFeedback;

## 高级API——战斗系统脚本

需要一个DamageRequest和PhotonView组件,并且房间创立者必须像上述的一样进行初始化

在上面相同的菜单路径中,找到DemoBattleScript脚本,添加到角色上

当自己的技能、武器碰撞到另一个玩家的角色时,调用一个LaunchABattle接口,其中传入受到碰撞的角色对应的玩家

DamageRequest r;//先获得请求伤害低级API引用 //技能碰撞后 void OnCollisionEnter(Collider other){ //获取角色对应的玩家的方法,用photonview类的owner Player p = other.gameObject.GetComponent.Owner; //伤害将作用于这个对象 r.LaunchABattle(p); }

填入攻击力、防御力、暴击率、暴击伤害则可以自动将伤害作用于对方

伤害算法采取市面上最流行算法:

输出伤害=是否暴击?(100+暴击伤害)/100*攻击力:攻击力

受到伤害=(防御力常数/防御力+防御力常数)*伤害

防御力常数默认设置为1000

如果需要修改游戏规则,可以自己打开脚本修改

还提供三个回调接口

ShowUI:攻击者调用函数,比如说显示产生了多少伤害的数值

//攻击动画器上挂上脚本 public example:MonoBehavior{ public DemoBattleScript bs; void Start(){ bs.ShowUI=(object[] parametres)=>{ } bs.ShowUIParams=new object[]{....} //调用ShowUI方法将传入ShowUIParams作为参数 } }

HurtingAnimation:受到伤害时调用这个函数,方式和上面一样

OnBloodRunOut:血量小于0时候调用,方式也和上面一样。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有