光子网络同步由另一个GameObject

时间:2016-09-30 11:52:04

标签: unity3d unity5

我目前仍然坚持如何实现这个: 玩家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组件,以便它可以同步,但无论我尝试什么它都不起作用。我觉得这个修复是一个非常微不足道的修复,但我似乎无法解决这个问题,是否有人愿意提供帮助?

0 个答案:

没有答案