示例#1
0
    private void CorrectPosition(UserState userState, int commandSnapshotAck)
    {
        if (!ownCube || !ownCube.gameObject.activeSelf) // player not respawned yet
        {
            return;
        }

        ownCube.transform.position = userState.Position;
        var rotation = ownCube.transform.rotation.eulerAngles.y;

        foreach (Commands cmd in commands.GetSnapshotUnackedCommands())
        {
            if (!ownCube.isGrounded)
            {
                ownCube.SimpleMove(Vector3.zero);
            }

            Vector3 move = new Vector3(
                cmd.GetXDirection() * Time.fixedDeltaTime,
                0,
                cmd.GetZDirection() * Time.fixedDeltaTime
                );

            ownCube.transform.rotation = Quaternion.Euler(0, cmd.Rotation, 0);
            move = ownCube.transform.TransformDirection(move) * playerSpeed;
            ownCube.Move(move);
        }

        ownCube.transform.rotation = Quaternion.Euler(0, rotation, 0);
    }