导入odin
This commit is contained in:
@@ -22,7 +22,6 @@ namespace NBF
|
||||
public FirstPersonCharacter FirstPerson;
|
||||
public GameObject ModelGameObject { get; set; }
|
||||
|
||||
public PlayerAnimator Animator;
|
||||
|
||||
public FPlayerData Data { get; private set; }
|
||||
|
||||
@@ -33,7 +32,6 @@ namespace NBF
|
||||
{
|
||||
Character = gameObject.GetComponent<CharacterMovement>();
|
||||
FirstPerson = gameObject.GetComponent<FirstPersonCharacter>();
|
||||
Animator = gameObject.AddComponent<PlayerAnimator>();
|
||||
Data = FPlayerData.Instance;
|
||||
transform.localPosition = new Vector3(484, 1, 422);
|
||||
}
|
||||
@@ -63,7 +61,6 @@ namespace NBF
|
||||
modelObject.transform.localPosition = Vector3.zero;
|
||||
ModelGameObject = modelObject;
|
||||
ModelAsset = modelObject.GetComponent<PlayerModelAsset>();
|
||||
Animator.SetModelAsset(this);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -5,12 +5,25 @@ namespace NBF
|
||||
{
|
||||
public class FPlayerData : MonoService<FPlayerData>
|
||||
{
|
||||
private PlayerState _playerState;
|
||||
|
||||
public bool Run;
|
||||
public bool IsGrounded;
|
||||
public float Speed;
|
||||
public float RotationSpeed;
|
||||
|
||||
public Vector2 MoveInput;
|
||||
|
||||
|
||||
public PlayerState State
|
||||
{
|
||||
get => _playerState;
|
||||
set
|
||||
{
|
||||
_playerState = value;
|
||||
OnStateChange?.Invoke(_playerState);
|
||||
}
|
||||
}
|
||||
|
||||
public event Action<PlayerState> OnStateChange;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,19 @@
|
||||
using System;
|
||||
using KINEMATION.MagicBlend.Runtime;
|
||||
using NBC;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public class PlayerAnimator : MonoBehaviour
|
||||
{
|
||||
public Animator Animator { get; private set; }
|
||||
public Animator _Animator;
|
||||
public FPlayer Player { get; private set; }
|
||||
|
||||
private bool _isTorsoLayerEnabled;
|
||||
private bool _isInit;
|
||||
private PlayerIK _IK;
|
||||
private MagicBlending _magicBlending;
|
||||
|
||||
#region 参数定义
|
||||
|
||||
@@ -44,45 +48,218 @@ namespace NBF
|
||||
|
||||
#endregion
|
||||
|
||||
public void SetModelAsset(FPlayer player)
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
Player = GetComponentInParent<FPlayer>();
|
||||
_magicBlending = GetComponent<MagicBlending>();
|
||||
_Animator = GetComponent<Animator>();
|
||||
_Animator.keepAnimatorStateOnDisable = true;
|
||||
_IK = GetComponent<PlayerIK>();
|
||||
_isInit = true;
|
||||
Player = player;
|
||||
Animator = player.ModelAsset.Animator;
|
||||
|
||||
// Player.Data.OnStateChange += PlayerFSMState_OnValueChanged;
|
||||
}
|
||||
|
||||
private void LateUpdate()
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (!_isInit) return;
|
||||
UpdateAnimator();
|
||||
// Player.Data.OnStateChange += PlayerFSMState_OnValueChanged;
|
||||
}
|
||||
|
||||
// private void OnEnable()
|
||||
// {
|
||||
// playerFSMState.OnValueChanged += PlayerFSMState_OnValueChanged;
|
||||
// }
|
||||
//
|
||||
// private void OnDisable()
|
||||
// {
|
||||
// playerFSMState.OnValueChanged -= PlayerFSMState_OnValueChanged;
|
||||
// }
|
||||
|
||||
private void UpdateAnimator()
|
||||
{
|
||||
Animator.SetBool(OnGround, Player.Data.IsGrounded);
|
||||
float value3 = Mathf.Lerp(Animator.GetFloat(Forward), Player.Data.Speed / 5f, Time.deltaTime * 20f);
|
||||
Animator.SetFloat(Forward, value3);
|
||||
// private void OnFishingSetUnequip()
|
||||
// {
|
||||
// _isTorsoLayerEnabled = false;
|
||||
// _IK.SetBipedLeftHandIK(enabled: false, null);
|
||||
// }
|
||||
//
|
||||
// private void OnCastLure()
|
||||
// {
|
||||
// playerFSMState.Value = PlayerState.baitFlies;
|
||||
// SFXGameManagement.PlaySound("Cast Fishing Rod", base.transform);
|
||||
// }
|
||||
//
|
||||
// private void OnBailUnnarm()
|
||||
// {
|
||||
// if (IsThrowButtonPressed.Value)
|
||||
// {
|
||||
// _Animator.SetBool(ThrowFar, value: true);
|
||||
// playerFSMState.Value = PlayerState.casting;
|
||||
// OnBailOpen?.Invoke();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private void OnFishingSetEquiped_OnRaised(FishingSetController set)
|
||||
// {
|
||||
// _isTorsoLayerEnabled = true;
|
||||
// _IK.SetBipedLeftHandIK(enabled: false, set.AttachedReel.FingersIKAnchor);
|
||||
// }
|
||||
//
|
||||
// private void PlayAnimation(string state, string layer)
|
||||
// {
|
||||
// _Animator.CrossFade(state, 0.3f, _Animator.GetLayerIndex(layer));
|
||||
// }
|
||||
//
|
||||
// public void PlayPreciseCastAnimation()
|
||||
// {
|
||||
// _Animator.SetBool(PreciseIdle, value: false);
|
||||
// _Animator.SetTrigger(PreciseCast);
|
||||
// }
|
||||
//
|
||||
// public void SetLayerWeight(string layer, float weight)
|
||||
// {
|
||||
// _Animator.SetLayerWeight(_Animator.GetLayerIndex(layer), weight);
|
||||
// }
|
||||
//
|
||||
// private void PlayerFSMState_OnValueChanged(PlayerState state)
|
||||
// {
|
||||
// switch (playerFSMState.PreviousValue)
|
||||
// {
|
||||
// case PlayerState.vehicle:
|
||||
// _IsInVehicle = false;
|
||||
// _Animator.SetBool(BoatDriving, value: false);
|
||||
// break;
|
||||
// case PlayerState.swiming:
|
||||
// _Animator.SetBool(IsSwiming, value: false);
|
||||
// break;
|
||||
// case PlayerState.preciseCastIdle:
|
||||
// _Animator.SetBool(PreciseIdle, value: false);
|
||||
// break;
|
||||
// case PlayerState.prepare:
|
||||
// _Animator.SetBool(RodArming, value: false);
|
||||
// break;
|
||||
// case PlayerState.casting:
|
||||
// _Animator.SetBool(ThrowFar, value: false);
|
||||
// break;
|
||||
// case PlayerState.collectFish:
|
||||
// _magicBlending.BlendAsset.globalWeight = 0f;
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// switch (state)
|
||||
// {
|
||||
// case PlayerState.idle:
|
||||
// case PlayerState.move:
|
||||
// _Animator.SetBool(BaitInWater, value: false);
|
||||
// _Animator.SetBool(HeldRod, value: false);
|
||||
// _Animator.SetBool(ThrowFar, value: false);
|
||||
// _Animator.SetBool(RodArming, value: false);
|
||||
// break;
|
||||
// case PlayerState.prepare:
|
||||
// _Animator.SetBool(RodArming, value: true);
|
||||
// _Animator.SetBool(HeldRod, value: true);
|
||||
// break;
|
||||
// case PlayerState.fishing:
|
||||
// _Animator.SetBool(HeldRod, value: true);
|
||||
// _Animator.SetBool(BaitInWater, value: true);
|
||||
// break;
|
||||
// case PlayerState.vehicle:
|
||||
// _Animator.SetBool(BaitInWater, value: false);
|
||||
// _Animator.SetBool(HeldRod, value: false);
|
||||
// _Animator.SetBool(ThrowFar, value: false);
|
||||
// _Animator.SetBool(RodArming, value: false);
|
||||
// _Animator.SetBool(BoatDriving, value: true);
|
||||
// _IK.SetBipedLeftHandIK(enabled: true);
|
||||
// _IsInVehicle = true;
|
||||
// break;
|
||||
// case PlayerState.vehicleFishing:
|
||||
// _Animator.SetBool(BaitInWater, value: false);
|
||||
// _Animator.SetBool(HeldRod, value: false);
|
||||
// _Animator.SetBool(ThrowFar, value: false);
|
||||
// _Animator.SetBool(RodArming, value: false);
|
||||
// _IsInVehicle = true;
|
||||
// break;
|
||||
// case PlayerState.swiming:
|
||||
// _Animator.SetBool(IsSwiming, value: true);
|
||||
// break;
|
||||
// case PlayerState.collectFish:
|
||||
// _Animator.SetBool(BaitInWater, value: false);
|
||||
// _IK.SetAimIK(enabled: false);
|
||||
// _magicBlending.BlendAsset.globalWeight = 1f;
|
||||
// break;
|
||||
// case PlayerState.preciseCastIdle:
|
||||
// _Animator.SetBool(PreciseIdle, value: true);
|
||||
// break;
|
||||
// case PlayerState.casting:
|
||||
// case PlayerState.baitFlies:
|
||||
// case PlayerState.fight:
|
||||
// case PlayerState.fishView:
|
||||
// case PlayerState.throwFish:
|
||||
// case PlayerState.flyModeDebug:
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private void LateUpdate()
|
||||
// {
|
||||
// if (playerFSMState.Value == PlayerState.swiming)
|
||||
// {
|
||||
// float value = Mathf.Lerp(_Animator.GetFloat(Forward), currentMoveSpeed.Value / 2.5f,
|
||||
// Time.deltaTime * 5f);
|
||||
// float value2 = Mathf.Lerp(_Animator.GetFloat(Turn), RotationSpeed.Value, Time.deltaTime * 5f);
|
||||
// _Animator.SetFloat(Forward, Mathf.Clamp01(value));
|
||||
// _Animator.SetFloat(Turn, Mathf.Clamp(value2, -1f, 1f));
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// float value3 = Mathf.Lerp(_Animator.GetFloat(Forward), currentMoveSpeed.Value / 5f,
|
||||
// Time.deltaTime * 20f);
|
||||
// float value4 = Mathf.Lerp(_Animator.GetFloat(Turn), RotationSpeed.Value, Time.deltaTime * 15f);
|
||||
// _Animator.SetFloat(Forward, Mathf.Clamp01(value3));
|
||||
// _Animator.SetFloat(Turn, Mathf.Clamp(value4, -1f, 1f));
|
||||
// }
|
||||
//
|
||||
// _Animator.SetBool(OnGround, _IsInVehicle || isGrounded.Value);
|
||||
// _Animator.SetFloat(RodRight, rodPosition.Value.x);
|
||||
// _Animator.SetFloat(RodForward, rodPosition.Value.y);
|
||||
// float layerWeight = _Animator.GetLayerWeight(_Animator.GetLayerIndex("Torso"));
|
||||
// SetLayerWeight("Torso",
|
||||
// Mathf.MoveTowards(layerWeight, _isTorsoLayerEnabled ? 1f : 0f, Time.deltaTime * 3f));
|
||||
// }
|
||||
|
||||
// 平滑处理
|
||||
// float smoothedTurn = Mathf.SmoothDamp(Animator.GetFloat(Turn),
|
||||
// MapUnit.RotationSpeed,
|
||||
// ref turnSmoothVelocity,
|
||||
// smoothingTime
|
||||
// );
|
||||
|
||||
float smoothedTurn = Mathf.Lerp(Animator.GetFloat(Turn), Player.Data.RotationSpeed, Time.deltaTime * 10f);
|
||||
Animator.SetFloat(Turn, smoothedTurn);
|
||||
|
||||
|
||||
float layerWeight = Animator.GetLayerWeight(Animator.GetLayerIndex(Torso));
|
||||
SetLayerWeight(Torso,
|
||||
Mathf.MoveTowards(layerWeight, _isTorsoLayerEnabled ? 1f : 0f, Time.deltaTime * 3f));
|
||||
}
|
||||
|
||||
public void SetLayerWeight(string layer, float weight)
|
||||
{
|
||||
Animator.SetLayerWeight(Animator.GetLayerIndex(layer), weight);
|
||||
}
|
||||
|
||||
|
||||
// private void LateUpdate()
|
||||
// {
|
||||
// if (!_isInit) return;
|
||||
// UpdateAnimator();
|
||||
// }
|
||||
//
|
||||
//
|
||||
// private void UpdateAnimator()
|
||||
// {
|
||||
// Animator.SetBool(OnGround, Player.Data.IsGrounded);
|
||||
// float value3 = Mathf.Lerp(Animator.GetFloat(Forward), Player.Data.Speed / 5f, Time.deltaTime * 20f);
|
||||
// Animator.SetFloat(Forward, value3);
|
||||
//
|
||||
// // 平滑处理
|
||||
// // float smoothedTurn = Mathf.SmoothDamp(Animator.GetFloat(Turn),
|
||||
// // MapUnit.RotationSpeed,
|
||||
// // ref turnSmoothVelocity,
|
||||
// // smoothingTime
|
||||
// // );
|
||||
//
|
||||
// float smoothedTurn = Mathf.Lerp(Animator.GetFloat(Turn), Player.Data.RotationSpeed, Time.deltaTime * 10f);
|
||||
// Animator.SetFloat(Turn, smoothedTurn);
|
||||
//
|
||||
//
|
||||
// float layerWeight = Animator.GetLayerWeight(Animator.GetLayerIndex(Torso));
|
||||
// SetLayerWeight(Torso,
|
||||
// Mathf.MoveTowards(layerWeight, _isTorsoLayerEnabled ? 1f : 0f, Time.deltaTime * 3f));
|
||||
// }
|
||||
//
|
||||
// public void SetLayerWeight(string layer, float weight)
|
||||
// {
|
||||
// Animator.SetLayerWeight(Animator.GetLayerIndex(layer), weight);
|
||||
// }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user