通过 Photon 同步翻转游戏对象子项的逻辑问题

Logic issue syncronizing flip of gameobjects child through Photon

在我的项目中,我正在创建一个类似 "Madness combat" 的游戏,但通过 Photon 网络进行多人游戏。我目前遇到的问题是错误的客户 "hand + gun" 被翻转了。

当客户 1 翻转他的角色时,他的手在本地翻转,客户 2 的手在本地翻转。

图片:https://imgur.com/a/NkP3KEF

我认为问题如下: 在我的角色翻转逻辑中,我需要一个 PunRPC 来翻转错误的客户手。

主角翻转功能:

    void FixedUpdate()
    {
    if (!disableMove)
    {

        //if (!devTesting)
        //{

        if (photonView.isMine)
        {
            isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);
            moveInput = Input.GetAxis("Horizontal");
            rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);

            if (facingRight == false && moveInput > 0)
            {
                photonView.RPC("Flip", PhotonTargets.AllBuffered);
                photonView.RPC("Fliphand", PhotonTargets.AllBuffered); //FLIPS HAND+GUN
                //Flip();
            }
            else if (facingRight == true && moveInput < 0)
            {
                photonView.RPC("Flip", PhotonTargets.AllBuffered);
                photonView.RPC("Fliphand", PhotonTargets.AllBuffered); //FLIPS HAND+GUN
                //Flip();
            }

        }
        }

以上函数调用了这两个 PunRPC 函数。

字符翻转:

    [PunRPC]
void Flip()
{
        facingRight = !facingRight;     //toggle flipping
        GetComponent<SpriteRenderer>().flipX = !facingRight;
}

Hand flip(上述游戏对象的子对象):

    [PunRPC]
void Fliphand()
{
        child = GameObject.Find("Hand");
        sight = GameObject.Find("Granny_warr_lasersight");
        deagle = GameObject.Find("deagle_animation");

        facingRight2 = !facingRight2;
        child.GetComponent<SpriteRenderer>().flipY = !facingRight2;
        sight.GetComponent<SpriteRenderer>().flipY = !facingRight2;
        deagle.GetComponent<SpriteRenderer>().flipY = !facingRight2;
}

我认为问题是因为两个客户端加入了房间,并且两个客户端都有名为 "Hand" 等的子对象。通过从客户端 1 调用这个 PunRPC,它翻转了客户端 2 屏幕上的 "Hand" .

谁能帮我解决这个问题?如果需要,我会尽量让它更清楚,如果需要,我会提供更多图片。

注意:字符翻转在两个客户端上都可以正常工作。

感谢 Tomer Shahar 提供的 link 我解决了它!

    [PunRPC]
void Fliphand()
{
    //if (photonView.isMine)
    //{
    //child = GameObject.Find("Hand");
    //sight = GameObject.Find("Granny_warr_lasersight");
    //deagle = GameObject.Find("deagle_animation");

    child = player.transform.Find("Hand").gameObject;
    sight = child.transform.Find("Granny_warr_lasersight").gameObject;
    deagle = child.transform.Find("deagle_animation").gameObject;

    facingRight2 = !facingRight2;
        child.GetComponent<SpriteRenderer>().flipY = !facingRight2;
        sight.GetComponent<SpriteRenderer>().flipY = !facingRight2;
        deagle.GetComponent<SpriteRenderer>().flipY = !facingRight2;
    //}
}

//disabled 代码是对我的应用程序不起作用的旧代码。新的就像一个魅力!