using UnityEngine;
public class IdleCharacterState : CharacterState
{
public IdleCharacterState(Character character) : base(character)
{
MonoManager.Instance.AddUpdateEvent(Update);
NewActions.Instance.Player.Move.Enable();
}
//进入状态
public override void Enter()
{
Character.animtorSystem.PlayAnimation("idle");
}
//持续状态
public override void Update()
{
if(NewActions.Instance.Player.Move.ReadValue<Vector2>()!=Vector2.zero)
{
Character.state=new MoveCharacterState(Character);
MonoManager.Instance.RemoveUpdateEvent(Update);
}
}
//退出状态
public override void Exit()
{
}
}
using UnityEngine;
using Animancer;
using System.Collections.Generic;
using System;
[Serializable]
public class AnimtorSystem
{
private List<ClipTransition> animationClips;
private AnimancerComponent animancerComponent;
public AnimtorSystem(GameObject gameObject,List<ClipTransition> animationClips1)
{
animationClips=animationClips1;
animancerComponent=gameObject.GetComponent<AnimancerComponent>();
}
//播放动画
public void PlayAnimation(string animationName)
{
ClipTransition animationClip=animationClips.Find(x=>x.Name==animationName);
if(animationClip!=null)
{
animancerComponent.Play(animationClip);
}
}
}
using Unity.VisualScripting;
using UnityEngine;
using System.Collections.Generic;
using Animancer;
public abstract class Character:MonoBehaviour
{
//属性系统
public Attribute attribute;
//状态系统
public CharacterState state;
//动画系统
[SerializeField] public AnimtorSystem animtorSystem;
public List<ClipTransition> animationClips=new List<ClipTransition>();
public void Init()
{
attribute=new Attribute(100,100,100,1.0f,this);
//初始化动画系统
animtorSystem=new AnimtorSystem(gameObject,animationClips);
}
protected virtual void Awake()
{
Init();
}
}
using UnityEngine;
public class MoveCharacterState : CharacterState
{
float speed;
Rigidbody2D rigidbody2D;
public MoveCharacterState(Character character) : base(character)
{
NewActions.Instance.Player.Move.Enable();
speed=Character.attribute.speed;
rigidbody2D=Character.GetComponent<Rigidbody2D>();
MonoManager.Instance.AddUpdateEvent(Update);
}
//进入状态
public override void Enter()
{
Character.animtorSystem.PlayAnimation("move");
}
//持续状态
public override void Update()
{
if (NewActions.Instance.Player.Move.ReadValue<Vector2>()==Vector2.zero)
{
Character.state=new IdleCharacterState(Character);
MonoManager.Instance.RemoveUpdateEvent(Update);
}
Move.Move_fun(NewActions.Instance.Player.Move.ReadValue<Vector2>(),speed,rigidbody2D);
}
//退出状态
public override void Exit()
{
}
}
using UnityEngine;
public class player : Character
{
protected override void Awake()
{
base.Awake();
state=new IdleCharacterState(this);
}
}
移动起来不知为何超级掉帧,而且动画不流畅,找不到问题