Unity ClientRp c команда получить неправильное преобразование - PullRequest
0 голосов
/ 01 мая 2020

Я делаю простую многопользовательскую VR-игру и столкнулся с несколькими проблемами с сетевым плагином Mirror.

Вот мой код:

    public RootMotion.FinalIK.VRIK ik;
    public LineRenderer laserLine;
    void Start()
    {
        // body follow HMD and Controller
        ik.solver.spine.headTarget = GameObject.Find("HeadTracker").transform;
        ik.solver.leftArm.target = GameObject.Find("LHand").transform;
        ik.solver.rightArm.target = GameObject.Find("RHandGunPos").transform;
    }

    // Update is called once per frame
    void Update()
    {
        // Test in editor
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // NOT WORK
            if (isServer)
                RpcShoot();
            else
                CmdShoot();

            // THIS WORK
            //StartCoroutine(ShowLaser());
        }
    }

    [Command]
    public void CmdShoot()
    {
        RpcShoot();
    }

    [ClientRpc]
    public void RpcShoot()
    {
        StartCoroutine( ShowLaser());
    }

    private IEnumerator ShowLaser()
    {
        Transform t = GameObject.Find("Pistol").transform;
        laserLine.SetPosition(0, t.position);
        // .up = front in the pistol model
        laserLine.SetPosition(1, t.position + t.up * 10);
        yield return new WaitForSeconds(0.2f);
        laserLine.SetPosition(0, Vector3.zero);
        laserLine.SetPosition(1, Vector3.zero);
    }

В Update (), если я вызываю StartCoroutine напрямую, все работает нормально, лазер появляется прямо в центре пистолета.

Если я вызываю сопрограмму в методе ClientRp c, лазер не перемещается моими ИК-руками, скорее всего, он использует исходное положение пистолета, когда тело находилось в позе Т.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...