목차
특수 스킬 제작기...
오늘은 특수 스킬을 완료하려고 한다!
애니메이션 이름 비교하기
AnimatorStateInfo.shortHashName
Debug.Log("shorNameHash" + stateInfo.shortNameHash.ToString());
//결과: shorNameHash-1864928582
현재 재생 중인 애니메이션의 이름을 해시 값으로 반환한다.
AnimatorStateInfo.IsName()
stateInfo.IsName("RumbleOfRuinStart")
애니메이션의 이름과 string값과 직접 비교한다.
Hash값을 쓰는 이유?
당연하게도 해시값을 이용한 연산이 string 값을 이용한 연산보다 더 빨라서이다.
이러한 이유로 Unity Animator는 StringToHash라는 함수또한 제공하고 있다.
이를 이용해서 아래와 같이 해시값을 readonly로 모아서 관리하고 있다.
string값을 사용하면서 발생할 수 있는 human error를 방지할 수 있기도 하고.
public static class AnimatorStrings
{
public static class MonsterParameter
{
public static readonly int Running = Animator.StringToHash("Running");
public static readonly int Dead = Animator.StringToHash("Dead");
///중략
}
}
IsName ? shortHashName !
같은 애니메이션인지 확인하기 위해 IsName을 사용하고 있었다.
이유는? shortHashName을 몰라서!ㅎㅎ..
Animator와 관련된 string 값들을 해시값으로 저장해서 사용하고 있지만,
IsName을 사용하기 위해서는 string 값이 필요했기 때문에, string을 모아둔 집합을 따로 관리하고 있다.
shortHashName을 쓴다면 굳이 연산도 느리고, string 값을 따로 관리해야하는 수고도 덜을 수 있을 것 같다.
IsName의 장점은 가독성 하나인 것 같다는 결론을 내렸다.
이미 아래 코드와 같이 따로 부모 객체에 메서드를 만들어놔서 자식들에서도 쓸 수 있게 사용하고 있는데,
이런식으로 해시값을 비교하는 메서드를 만들어두면 가독성 문제도 해결이 되지 않을까 싶다!
protected bool IsSkillAnimationPlaying(string animationName)
{
//스킬 애니메이션이 끝났는지 확인.
bool isSkillAnimationPlaying = monster.Animator.GetCurrentAnimatorStateInfo(0).IsName(animationName);
if (isSkillAnimationPlaying)
{
Debug.Log($"Running skill animation: {animationName} from {skillData.skillName} (ID: {skillData.skillId})");
return true;
}
else
{
Debug.Log($"Using skill: {animationName} from {skillData.skillName} (ID: {skillData.skillId})");
return false;
}
}
느낀점
일단 오늘 끝낸 일은 특수 스킬에서 점프하면서 사라지는 부분,(결정: transform 이동에서 rigidbody 이동으로 변경 이유 발견)
사라지고 난 뒤에 ui에서 warning을 깜빡거리는 부분까지 진행했다.
사실... 특수 스킬을 전부 끝내는 게 목표였지만...
오늘 오후에 가족들이 방문하기도 했고, zep에서 다른 조들과 프로젝트에 관해서 이야기를 나누느라 목표한 바를 이루지 못했다!
아쉽지만 내일도 주말이고.. 천천히 하려고 한다.
기획팀에서 결정하고 전달받아야 되는 연출 부분도 있고...
내일 학습 할 것은 무엇인지
시간이 있다면! 오늘 결정한 애니메이션 비교 방식을 기존의 string 비교 방식에서 hash 비교 방식으로 변경하려고 한다.
연산이 빠르니까!
또한 오늘 하다가 발견한 부분. transfrom 기반 이동에서 rigidbody 기반 이동으로 바꿔주려고 한다.
이유는 애니메이션을 제작할때 모든 sprite들의 위치가 올바르지 않아서.. 아무래도 애니메이션에서 transform을 만져야겠다는 생각이 들었다.
일부분만 변경하면 나중에 충돌이나 예기치 못한 버그가 날 수도 있으니 전부 rigidbody 기반으로 변경할 예정!

위의 사진처럼 특수 스킬의 노드를 쪼갰다!
꼭 필요한 쪼갬은 아니고, 일단 내가 단계를 나누어서 보려고...
중간의 warning action 같은 경우는 재사용이 가능할 것 같아서 분리가 되면 좋을 것 같긴 하다.
아무튼 내일 뭘 할거냐면 저기서 착지하는 DownAction, 그리고 실질적인 공격 모션인 SkillAction, 그리고 다시 복귀하는 ComebackAction을 구현하려고 한다.
'부트캠프 > 본캠프' 카테고리의 다른 글
| [내일배움캠프_2025SEP22] 이펙트(카메라), 애니메이션 (0) | 2025.09.22 |
|---|---|
| [내일배움캠프_2025SEP21] 오늘 뭐했지..? (0) | 2025.09.21 |
| [내일배움캠프_2025SEP19] OutCry 1차 프로토타입 QA 준비 완료 (0) | 2025.09.19 |
| [내일배움캠프_2025SEP18] 쿨다운 타이머, Stun과 Hit, 잘못된 기즈모 헬퍼... (0) | 2025.09.18 |
| [내일배움캠프_2025SEP17] 데이터매니저, RangeCheckHelper (1) | 2025.09.17 |