들어가며
- 수많은 스테이트 머신들을 관리하고, 스테이트 트랜지션을 일일이 수작업으로 장인정신 발휘 할 필요가 없기 때문에 스크립팅 방식을 기록해 둔다.
- 필요한 부분만 정리했다.
스니펫
- 파라미터 추가 및 제거
foreach (AnimatorController controller in settings.controllers)
{
//추가 (string name, AnimatorControllerParameterType type)
controller.AddParameter(name, type);
//제거 (int index)
controller.RemoveParameter(index);
}
- 블렌드 트리 추가
AnimatorController controller;
AnimatorState blendTreeInController =
controller.CreateBlendTreeInController(name, out BlendTree tree);
// tree.blendType : 블렌드 트리 파라미터 유형 1차원 또는 2차원 BlendTreeType의 Enum 데이터
// tree.blendParameter : 1차원 값 또는 2차원 x축 string 데이터
// tree.blendParameterY : 2차원 Y축 string 데이터
// tree.AddChild(info.clip, info.thresholds.x) : 1차원 요소 추가 할 경우 clip과 float 조정 변수를 넣는다.
// tree.AddChild(info.clip, info.thresholds) : 2차원 요소 추가 할 경우 clip과 Vector2 조정 변수를 넣는다.
// blendTreeInController.speedParameterActive : 속도 제어 여부
// blendTreeInController.speedParameter : 속도 제어 변수
- 트랜지션 생성
// 접근 순서 대로 작성
AnimatorController controller;
// 기본 레이어는 0이다.
AnimatorStateMachine machine = controller.layers[0].stateMachine;
// AnimatorState state 접근 방법
foreach (ChildAnimatorState childAnimatorClip in stateMachine.states)
{
AnimatorState state = childAnimatorClip.state;
}
// 1. 기본 트랜지션 연결 방법
// 스테이트 이름 기준으로 타깃 이름을 향해 선을 긋는다.
// (state -> destination)
AnimatorStateTransition stateTransition = state.AddTransition(destinationName);
// 상세 설정
// stateTransition.hasExitTime
// stateTransition.duration
// stateTransition.exitTime
// 트랜지션 조건 설정
// mode : if -> 트리거 또는 불 값 참인 경우,
// mode : if not -> 불 값 거짓인 경우,
// stateTransition.AddCondition(mode, threshold, name)
// 2. AnyState 나 ExitState 연결 방법
//AnyState ( any -> destination )
stateMachine.AddAnyStateTransition(state);
//Exit ( state -> exit )
state.AddExitTransition();