using UnityEngine; // 玩家控制,只有当前玩家能控制自己角色 public class PlayerControl : MonoBehaviour { private const float SendRate = 1f; // 1秒至少发送一次 private float _lastSendTime; private Vector2 _lastSentDirection = Vector2.zero; private void Update() { var input = new Vector2( Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical") ); var currentDir = input == Vector2.zero ? Vector2.zero : input.normalized; if (Time.time >= _lastSendTime + 1f / SendRate) { if (currentDir != Vector2.zero) { SendMoveInput(currentDir); } } else if (currentDir != _lastSentDirection) { SendMoveInput(currentDir); } } private void SendMoveInput(Vector2 direction) { Debug.Log($"SendMoveInput {direction} {transform.GetComponent().usn}"); _lastSentDirection = direction; _lastSendTime = Time.time; SocketManager.Instance.SendMessage(MessageID.Action, new C2S_Action { // Sequence = SocketManager.Instance.Sequence, // Timestamp = (long)(Time.time * 1000), Action = ActionID.Move, DirX = (int)(direction.x * 100), DirY = (int)(direction.y * 100) }); } }