public class MonsterAnimationData
{
[SerializeField] private string idleParameterName = "Idle";
...
public int IdleParameterHash { get; private set; }
...
public void Initialize()
{
IdleParameterHash = Animator.StringToHash(idleParameterName);
...
}
}
public class PlayerAnimationData
{
[SerializeField] private string movementParameterName = "@Movement";
[SerializeField] private string idleParameterName = "Idle";
...
public int MovementParameterHash { get; private set; }
public int IdleParameterHash { get; private set; }
...
public void Initialize()
{
MovementParameterHash = Animator.StringToHash(movementParameterName);
IdleParameterHash = Animator.StringToHash(idleParameterName);
...
}
}
위의 코드와 같이 Animator의 Parameter에 대한 String, int 데이터를 AnimationData 클래스로 만들어 사용했다. 하지만 이 데이터들을 굳이 클래스로 나누어 만들 필요는 없었다. 플레이어와 몬스터 각각 필요한 곳에서 이 클래스의 내용을 작성해도 되는 불필요한 클래스였다.
현재 프로젝트에서는 플레이어와 몬스터가 같은 Parameter 이름을 사용하고 있기 때문에 정적인 데이터를 관리하는 클래스를 따로 만들고, static, readonly, const 키워드를 활용하여 데이터를 관리하는 방식을 사용하였다.
public class HashDataManager
{
public static readonly int movementParameterHash = Animator.StringToHash("@Movement");
public static readonly int idleParameterHash = Animator.StringToHash("Idle");
public static readonly int runParameterHash = Animator.StringToHash("Run");
public static readonly int attackParameterHash = Animator.StringToHash("@Attack");
public static readonly int basicAttackParameterHash = Animator.StringToHash("BasicAttack");
public static readonly int dieParameterHash = Animator.StringToHash("Die");
}