88 lines
2.5 KiB
C#
88 lines
2.5 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using Object = System.Object;
|
|
public class KnightController : MonoBehaviour
|
|
{
|
|
private Animator animator;
|
|
private AnimationState animationState;
|
|
|
|
class AnimationState
|
|
{
|
|
|
|
public (string name, float value, float prev_value) _speed = ("speed", 0f, 0f);
|
|
public (string name, float value, float prev_value) _atk_speed = ("atk_speed", 1.0f, 1.0f);
|
|
|
|
public (string name, bool value, bool prev_value) _attack = ("attack", false, false);
|
|
public (string name, bool value, bool prev_value) _run = ("run", false, false);
|
|
|
|
public void Init(GameObject obj)
|
|
{
|
|
Animator animator = obj.GetComponent<Animator>();
|
|
var parameters = animator.parameters;
|
|
foreach (var param in parameters)
|
|
{
|
|
switch (param.type)
|
|
{
|
|
case AnimatorControllerParameterType.Float:
|
|
if (param.name == "speed") _speed = (param.name, animator.GetFloat(param.name), animator.GetFloat(param.name));
|
|
if (param.name == "atk_speed") _atk_speed = (param.name, animator.GetFloat(param.name), animator.GetFloat(param.name));
|
|
break;
|
|
case AnimatorControllerParameterType.Bool:
|
|
if (param.name == "attack") _attack = (param.name, animator.GetBool(param.name), animator.GetBool(param.name));
|
|
if (param.name == "run") _run = (param.name, animator.GetBool(param.name), animator.GetBool(param.name));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
enum MotionStat
|
|
{
|
|
Idle,
|
|
Walk,
|
|
Run,
|
|
Attack,
|
|
Hit,
|
|
Jump
|
|
}
|
|
|
|
enum Parameter
|
|
{
|
|
speed,
|
|
atk_speed,
|
|
attack,
|
|
run
|
|
}
|
|
|
|
|
|
|
|
MotionStat currentStat = MotionStat.Idle;
|
|
void Start()
|
|
{
|
|
animator = GetComponent<Animator>();
|
|
animationState = new AnimationState();
|
|
animationState.Init(this.gameObject);
|
|
|
|
animationState._attack.value = true;
|
|
// Debug.Log(animationState.GetField(AnimationState.Parameter.atk_speed));
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
}
|
|
|
|
|
|
public void Hit()
|
|
{
|
|
animator.SetBool(Enum.GetName(typeof(Parameter),Parameter.attack), false);
|
|
|
|
// animationState.SetParameter(AnimationState.Parameter.attack, false);
|
|
// animator.SetBool("attack", false);
|
|
|
|
Debug.Log("Knight Hit!");
|
|
}
|
|
|
|
}
|