Logi c выдает синхронизирующий бросок игрового объекта ребенку через фотон - PullRequest
1 голос
/ 30 января 2020

В своем проекте я создаю игру, похожую на «Бешенство безумия», но многопользовательскую через сеть Photon. В настоящее время у меня возникла проблема, когда неправильные клиенты перевернули «руку + пистолет».

Когда клиент 1 переворачивает своего персонажа, его рука переворачивается локально, а рука клиента 2 переворачивается локально.

Фотографии : https://imgur.com/a/NkP3KEF

Я полагаю, что проблема заключается в следующем: в моем логи c персонажа, которого я вызываю, PunRP C, который переворачивает неправильную руку клиента.

Функция переворота основного персонажа:

    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();
            }

        }
        }

Вышеприведенная функция вызывает для этих двух функций PunRP C.

Перестановка символов:

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

Ручное переключение (дочерний объект для вышеупомянутого игрового объекта):

    [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;
}

Я думаю, что проблема в том, что в комнату входят два клиента, и у обоих клиентов есть дочерние объекты, называемые "Рука" и c. И, вызывая этот PunRP C с клиента 1, он переворачивает «Рука» на экране клиента 2.

Может кто-нибудь помочь мне разобраться с этой проблемой? Я постараюсь сделать это более понятным, если это необходимо, и предоставлю больше картинок, если потребуется.

ПРИМЕЧАНИЕ. Отражение символов отлично работает на обоих клиентах.

1 Ответ

2 голосов
/ 30 января 2020

Я решил это благодаря ссылке, предоставленной Tomer Shahar!

    [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;
    //}
}

// Код с отключенным кодом - это старый код, который не работал для моего приложения. Новый работает как шарм!

...