131 lines
3.8 KiB
C#
131 lines
3.8 KiB
C#
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<CharacterMovement>();
|
|
FirstPerson = gameObject.GetComponent<FirstPersonCharacter>();
|
|
Animator = gameObject.AddComponent<PlayerAnimator>();
|
|
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<Vector2>();
|
|
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<Vector2>();
|
|
Data.MoveInput = v2;
|
|
// SendMoveMessage(v2, false);
|
|
}
|
|
else if (actionName == InputDef.Player.Look)
|
|
{
|
|
var v2 = context.ReadValue<Vector2>();
|
|
// UpdatePlayerRotation(v2);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 角色模型
|
|
|
|
private void CreatePlayerModel()
|
|
{
|
|
var modelObject = PrefabsHelper.CreatePlayer(Root, "Human_Male");
|
|
modelObject.transform.localPosition = Vector3.zero;
|
|
ModelGameObject = modelObject;
|
|
ModelAsset = modelObject.GetComponent<PlayerModelAsset>();
|
|
Animator.SetModelAsset(this);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |