ID 캐싱하기애니메이터의 파라미터를 컨트롤 할 때는 가급적 ID를 캐싱해서 사용해야 한다고 합니다! ChatGPT의 말에 따르면 Unity에서 애니메이터 매개변수는 일반적으로 Animator 클래스의 SetFloat, SetBool 및 SetInteger 메서드를 사용하여 제어됩니다. 이러한 메서드는 설정 중인 매개 변수를 식별하기 위해 문자열 매개 변수 이름을 사용합니다. 그러나 문자열을 사용하여 매개변수를 식별하는 것은 느리고 오류가 발생하기 쉽습니다. 문자열은 메모리 할당 및 할당 해제가 필요한 참조 유형이고 문자열 비교는 정수 비교에 비해 느릴 수 있기 때문입니다. 이러한 잠재적인 성능 문제를 방지하기 위해 Unity는 정수 ID를 사용하여 애니메이터 매개변수를 식별하는 대체 메커니즘을 제공합니다..
먼저 위 함수는 현재 애니메이션 레이어 Index 0번째를 가져온다는 뜻이다 그다음 IsName을 통해 애니메이션 이름 , 예를 들어 지금 애니메이션이 Hit이라면 IsName("Hit")을 적어주면 실행중인지 아닌지를 bool 타입으로 return해준다
유니티로 모델을 임포트해오면 Animation Type이 Generic으로 되어있다(Default) 이것을 모델 타입에 맞게! 지금 위 모델들은 휴머노이드 타입이므로 Humanoid를 선택해주면 된다! 그다음 믹사모 등에서 받아온 애니메이션들도 Animation Type을 Humanoid로 바꿔주면된다! 그다음 애니메이터 컨트롤러가 없으면 하나 새로 만들어주고 있다면 그 컨트롤러에 애니메이션을 드래그해서 끌어다 놓으면 된다! 휴머노이드같은 경우 리깅이 팔 다리 머리 이렇게 나눠져 있는게 일방적이다!
위 모델의 Animation State는 Default Layer의 Idle State입니다. 걷는 애니메이션과 오브젝트를 들고 있는 애니메이션을 혼합(Mix)해서 사용하고 싶습니다. 애니메이션 State를 혼합할 때 사용하는 것이 Animation Layer입니다. Avatar Mask를 하나 생성하고 이름을 그에 맞게 변경해줍니다. 특정 오브젝트를 잡고 있는 애니메이션의 상태에서 하체의 움직임은 필요없고 상체의 움직임만 변경되길 원하므로 하체는 클릭하여 제외시켜주면 됩니다. Animator창으로 가서 Layer버튼을 누르고 + 버튼을 눌러 새로운 Layer을 만들어준 뒤 이름을 적절하게 변경해줍니다. Weight 현재 레이어와 아래 레이어의 애니메이션 비중, 1에 가까울수록 현재 레이어의 가까운 모션..
Create new BlendTree in State를 눌러 블렌드트리를 만들자 플레이어가 왼쪽키를 눌렀을 때 왼쪽으로 향하는 듯한 애니메이션을 실행시키고 싶을 때 Blend Tree를 사용하여 애니메이션을 컨트롤한다 변수 Float로 Horizontal, Vertical 2개를 받는다 그리고 5개의 상태에 맞게 각각 Parameter값을 조정한다 코드를 생성해준다
연속적인 애니메이션에는 무엇이 있을까? 연속 공격, 연속 점프 등 있다 Animator창을 열어 Create Sub-State Machine을 선택하자 연속적으로 표현하고 싶은 애니메이션을 추가한다 Parameter는 Attack이라는 이름으로 Trigger를 하나 만들어준다 위에 두 사진이 핵심이다 잘봐야한다 먼저 Attack1 -> Attack2로 갈 때 Exit Time이 0.79로 설정되어 있는걸 볼 수 있다 Attack1 -> Base Layer로 갈 땐 Exit Time이 0.9로 설정되어 있다 Exit Time같은 경우 Has Exit Time이 체크되어야만 활성화되는 녀석이다 이 녀석이 0.9라는 뜻은 애니메이션이 90%로 실행되었다는 뜻이다 즉, 90%로 실행되기 전에는 Attack Tr..
Apply Root Motion을 체크하면 애니메이션으로 캐릭터의 움직임과 회전을 조절할 수 있다 애니메이션때문에 캐릭터의 포지션이 이동하는 것을 방지를 할 때는 언체크하면 될 것 같다! Culling Mode같은경우 화면에 렌더링될때만 애니메이션이 실행되길 바라면 설정하면 될 듯! 즉, 화면에 보이지 않으면 애니메이션 재생을 하지 않는거지! Update Mode같은 경우 Normal, Physics, Unscaled Time이 있는데 호출 타이밍에 맞게 사용하면 될거같아! 사용안해봐서 모르겠네..