我目前仍然坚持如何实现这个: 玩家1施放技能A,其与玩家2一起移动并发生碰撞。玩家2受技能影响并失去健康,动画显示其被击中,并且击退玩家2。
到目前为止,我能够做到这一切,但它只在本地实例中显示。我已经使用PhotonViewAnimator和PhotonView同步了玩家的动作和动画,因此玩家可以看到彼此走路并跳来跳去。虽然当玩家施放技能时,只有化身动画师同步,但技能在行进时的粒子效果以及与其他玩家的交互(如上所述)不会同步。
我试图通过使用OnPhotonSerializeView来解决这个问题,但是我现在所做的工作并不起作用:
对于技能的OnTriggerEnter方法
void OnTriggerEnter(Collider collider) {
GameObject characterObject = collider.gameObject;
PlayerCharacter characterComponent = characterObject.GetComponent<PlayerCharacter>();
if (characterComponent)
{
this.collidedCharacter = characterObject;
characterObject.GetComponent<Health>().DecreaseHealth(changeInLife);
this.ApplyEffects(characterComponent);
characterComponent.TakeImpact();
}
}
请注意,这里PlayerCharacter是处理Player的所有移动和动画的类,它也是为OnPhotonSerializeView实现IPunObservable的类。以下是相关的PlayerCharacter代码部分:
public void TakeImpact()
{
m_Animator.SetBool("Impact 0", true);
print ("Taken impact");
}
public void OnPhotonSerializeView (PhotonStream stream, PhotonMessageInfo info)
{
if (stream.isWriting)
{
// We own this player: send the others our data
stream.SendNext(m_Animator.GetBool("Impact 0"));
}
else{
// Network player, receive data
m_Animator.SetBool("Impact 0", (bool)stream.ReceiveNext());
}
}
所以基本上(从高级别),技能与GameObject发生冲突,如果该GameObject是PlayerCharacter,那么该技能将调用PlayerCharacter的TakeImpact()方法,该方法将设置该技能的玩家的动画师与真相冲突。虽然这只是在本地网络上显示,并且没有在网络上同步,但这是我目前卡住的地方。
我在想我应该让技能拥有PhotonView组件,以便它可以同步,但无论我尝试什么它都不起作用。我觉得这个修复是一个非常微不足道的修复,但我似乎无法解决这个问题,是否有人愿意提供帮助?