如何在UNET中摧毁其他玩家的子对象?

时间:2017-09-12 17:57:06

标签: c# unity3d networking multiplayer unity-networking

现在,我有一个多人游戏,玩家向其他有一定气泡的玩家发射射弹。一旦球员失去了所有的气泡,他们便会失败。

我之前遇到的问题是,在一个屏幕上,第一个玩家可以射出第二个玩家的气泡,但不会弹出第二个玩家屏幕上的所有气泡,所以我试图通过网络同步它不知。

我看到的问题是NetworkServer.Destroy需要找到你打算通过其NetworkIdentity销毁的GameObject,但只允许root Player GameObject在其上有NetworkIdentity组件。我可以同步销毁玩家子对象的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

https://unity3d.com/fr/learn/tutorials/topics/multiplayer-networking/课程与您描述的游戏非常相似。它有一个子弹脚本附加到发射的子弹。如果子弹碰到某个东西,它会检查它是否是玩家,并对其施加伤害(玩家预制件上附有Health脚本)。

using UnityEngine;
using System.Collections;

public class Bullet : MonoBehaviour {

    void OnCollisionEnter(Collision collision)
    {
        var hit = collision.gameObject;

        /* Code below is from the original example
        var health = hit.GetComponent<Health>();
        if (health  != null)
        {
            health.TakeDamage(10);
        }*/

        var bubble = hit.GetComponent<BubbleBehavior>();
        if (bubble != null)
        {
            bubble.Popped(); // Implement a Popped function doing the magic
        }

        Destroy(gameObject);
    }
}

在你的情况下,你可以这样做,但不是检查被触摸的物体是否是一个玩家,只需检查它是否是一个气泡,并从触摸的气泡做任何你想做的事。

在原始示例中,他们同步了运行状况(它是&#34; SyncVar&#34;),在您的情况下,您可以同步剩余的气泡数。