Practice_Unity/Assets/Scripts/CharacterController/KnightController.cs
SEAN-59 8c6d284e4f 애니메이션 작업 중
애니메이션 파라미터 한곳에서 통합관리 하게 만들려고 하는데 지금 변수를 어떻게 갖고 있어야 할까 고민 중인 상황
2025-09-18 01:39:59 +09:00

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!");
}
}