using System; using ECM2; using ECM2.Examples.FirstPerson; using Fantasy; using NBF.Fishing2; using UnityEngine; using UnityEngine.InputSystem; namespace NBF { public partial class FPlayer : MonoBehaviour { public Transform Root; public Transform Eye; public Transform FppLook; public Transform IK; public PlayerModelAsset ModelAsset; public CharacterMovement Character; public FirstPersonCharacter FirstPerson; public GameObject ModelGameObject { get; set; } public PlayerAnimator Animator; public FPlayerData Data { get; private set; } private void Awake() { Character = gameObject.GetComponent(); FirstPerson = gameObject.GetComponent(); Animator = gameObject.AddComponent(); Data = FPlayerData.Instance; transform.localPosition = new Vector3(484, 1, 422); } private void Start() { AddInputEvent(); CreatePlayerModel(); } private void Update() { UpdateMove(); } private void OnDestroy() { RemoveInputEvent(); } #region Input private void AddInputEvent() { InputManager.OnPlayerPerformed += OnPlayerCanceled; InputManager.OnPlayerPerformed += OnPlayerPerformed; InputManager.OnPlayerValueCanceled += OnPlayerValueCanceled; InputManager.OnPlayerValuePerformed += OnPlayerValuePerformed; } private void RemoveInputEvent() { InputManager.OnPlayerPerformed += OnPlayerCanceled; InputManager.OnPlayerPerformed += OnPlayerPerformed; InputManager.OnPlayerValueCanceled += OnPlayerValueCanceled; InputManager.OnPlayerValuePerformed += OnPlayerValuePerformed; } private void OnPlayerPerformed(string action) { if (action == InputDef.Player.Run) { Data.Run = true; } } private void OnPlayerCanceled(string action) { if (action == InputDef.Player.Run) { Data.Run = false; } } private void OnPlayerValueCanceled(InputAction.CallbackContext context) { var actionName = context.action.name; if (actionName == InputDef.Player.Move) { // var v2 = context.ReadValue(); Data.MoveInput = Vector2.zero; // SendMoveMessage(v2, true); } } private void OnPlayerValuePerformed(InputAction.CallbackContext context) { // var mapUnit = Parent as MapUnit; // Log.Info($"OnPlayerValuePerformed IsSelf={mapUnit.IsSelf()} id={mapUnit.Id}"); var actionName = context.action.name; if (actionName == InputDef.Player.Move) { var v2 = context.ReadValue(); Data.MoveInput = v2; // SendMoveMessage(v2, false); } else if (actionName == InputDef.Player.Look) { var v2 = context.ReadValue(); // UpdatePlayerRotation(v2); } } #endregion #region 角色模型 private void CreatePlayerModel() { var modelObject = PrefabsHelper.CreatePlayer(Root, "Human_Male"); modelObject.transform.localPosition = Vector3.zero; ModelGameObject = modelObject; ModelAsset = modelObject.GetComponent(); Animator.SetModelAsset(this); } #endregion } }