为什么两个玩家都只做一个动画?

问题描述 投票:1回答:1

所以我正在尝试构建这种基本的多人游戏,它有点像mmorpg游戏。到目前为止,这就是它的工作方式。当我连接到游戏时,我可以看到我的角色走动得很好,但是当我的朋友连接并站立不动而我走来走去时,我可以看到我的角色走动并做走动动画,但是他的角色以及即使他在计算机上静止不动,角色也会移动。

这是设置。.当我走路(按W键)时,客户端将输入发送到服务器,然后服务器将数据包发送回客户端,然后更新玩家位置,这也是我正在尝试的位置更新玩家动画。

/// <summary>
    /// Packet that's received when the server updates the players position.
    /// This happens every game tick, even if the player is standing still
    /// </summary>
    /// <param name="_packet"></param>
    public static void PlayerPosition(Packet _packet)
    {
        //The players id
        int _id = _packet.ReadInt();
        //The players position
        Vector3 position = _packet.ReadVector2();
        //GameManager.players[_id].transform.position = position;


        //var clientAnimator = GameManager.players[_id].GetComponent<Animator>();
        if (position != GameManager.players[_id].position)
        {
            GameManager.players[_id].GetComponent<Animator>().SetBool("isWalking", true);
            GameManager.players[_id].position = position;
        }
        else
        {
            GameManager.players[_id].GetComponent<Animator>().SetBool("isWalking", false);
        }
    }

我做错了什么事情是显而易见的吗?

c# unity3d
1个回答
0
投票

我想我可以考虑为什么,但实际上,目前尚无明显的简单解决方案。

我敢打赌,您的播放器是预制的,所以两个播放器实例都有一个Animator组件,其中引用了[[相同的一个 AnimatorController

结果是设置一个布尔值或更改为其中的任何状态都会影响双方玩家的Animator。由于此操作未同步,因此仅发生在您的身边,同时发生在两个玩家身上。


如前所述,我不知道是否可以通过简单的方式在运行时实现,但解决方法是为每个播放器实例创建一个新的单独的AnimatorController实例(克隆)。
© www.soinside.com 2019 - 2024. All rights reserved.