Unity3d 当玩家射击时,它正在失去生命

Unity3d 当玩家射击时,它正在失去生命,unity3d,photon,Unity3d,Photon,我正在制作一个多人游戏2D,当我的玩家开枪时,枪上也有一个对撞机,这影响了他的生活,我不知道为什么。可能是因为当目标受伤时有RPCtarget。但我不知道要改变什么,只是为了影响游戏中的其他玩家,而不是我的。我能用什么来代替一切 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 使用UnityStandardAssets.CrossPlatformInput; 使用光子双关语; 使用光子。实时; 利用光子; 使用UnityEngine.U

我正在制作一个多人游戏2D,当我的玩家开枪时,枪上也有一个对撞机,这影响了他的生活,我不知道为什么。可能是因为当目标受伤时有RPCtarget。但我不知道要改变什么,只是为了影响游戏中的其他玩家,而不是我的。我能用什么来代替一切

使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; 使用UnityStandardAssets.CrossPlatformInput; 使用光子双关语; 使用光子。实时; 利用光子; 使用UnityEngine.UI; 公共类特征:单双关,不可观察 { 刚体2d rb; 浮动dirX; [序列化字段] 浮动速度=5f,跳跃力=400f,子弹速度=500f; [SerializeField]私有浮点运行状况=100; [序列化字段]专用滑块; [字段]专用梯度; [序列化字段]私有图像填充; 公共刚体2D公告; 矢量3局部尺度; 公共死亡调查机构; 公共交通; 公共刚体2D子弹; //用于初始化 无效启动 { localScale=transform.localScale; rb=GetComponent; 如果是photonView.IsMine { myCounts=FindObjectOfType; } 其他的 { } } 公共卫生 { 获取{return health;} 设置 { 健康=价值; slider.value=健康; //fill.color=gradient.Evaluateslider.normalizedValue; } } 私有无效OnTriggerInter2dr2D列 { 如果col.gameObject.CompareTagHurt { 如果是photonView.IsMine { photonView.RPCDamage,RpcTarget.All; } } 如果col.gameObject.tag==加电 { 如果是photonView.IsMine { var powerup=col.GetComponent; 通电,皮卡提斯; } 其他的 { } } 如果col.gameObject.CompareTagBullet { 如果是photonView.IsMine { photonView.RPCDamage,RpcTarget.All; 子弹=子弹; } } 其他的 { } } [扑克牌] 空洞损伤 { 如果运行状况>0 { 健康-=20; }
如果健康我认为在这种情况下你并不真的需要RPC

我发现你的角色是不可观察的,我猜,它被添加到了PhotonView。所以它的健康状况会自动同步。 您还可以使用PhotonNetwork实例化项目符号,这意味着它们也将同步并具有PhotonView

所以每个玩家都有所有的同步子弹和其他玩家

这意味着,你们只需检查子弹是否来自其他玩家,并在本地设置伤害。别担心,结果将如下同步:

. . .
    private void OnTriggerEnter2D(Collider2D col)
    {
        if (col.gameObject.CompareTag("Hurt"))
        {
            // if hurt object is not mine, take damage
            if (!col.gameObject.GetPhotonView().isMine) 
                Damage();
        }
        if (col.gameObject.tag == "PowerUp")
        {
            if (photonView.IsMine)
            {
                var powerup = col.GetComponent<PowerUp>();
                powerup.Pickup(this);
            }
            else
            {

            }

        }
        if (col.gameObject.CompareTag("Bullet"))
        {
            // if bullet is not mine, take damage
            if (!col.gameObject.GetPhotonView().isMine)
                Damage();
        }
        else
        {

        }
    }

    // no rpc
    void Damage()
    {
        if (!photonView.IsMine) // only player can change his life
            return;

        if (Health > 0)
        {
            Health -= 20;
        }
        if (Health <= 0) // check health status
        {
            myCounts.RpcRespawn(); //Here you should to call counter
            photonView.transform.position = Vector2.zero;
            Health = 100;
        }

    }