캐릭터는 현재 들고있는 무기가 한손검, 양손검이냐에 따라서 무기를 들고있는 외형을 변경하도록 기획했습니다. 하지만 실제로 구현을 해보니 하나의 애니메이션 컨트롤러에 한손검 애니메이션과 양손검 애니메이션을 전부다 넣으려고 하니 트리거 설정도 복잡해지고 애니메이터도 번잡해졌습니다.
그래서 기본 애니메이션 컨트롤러를 한손검 애니메이션만 넣고 양손검은 애니메이션 컨트롤러 오버라이드를 통해 런타임시 캐릭터의 애니메이터 컴포넌트의 애니메이션 컨트롤러만 변경하여 한손검과 양손검 애니메이션을 변경하도록 구현했습니다.
// ORDER : #6) 현재 무기 외형에 따라 나올 애니메이션 컨트롤러를 변경
public void EquipWeapon(int weaponApparenceID, weaponHandleType weaponType)
{
// 현재 무기 외형 ID 값을 가져옵니다.
var childCount = weaponHandle.childCount;
// 현재 무기 외형을 제외한 다른 외형은 모두 꺼줍니다.
for (int i = 0; i < childCount; i++)
{
weaponHandle.GetChild(i).gameObject.SetActive(false);
}
weaponHandle.GetChild(weaponApparenceID).gameObject.SetActive(true);
Animator animator;
if ((animator = GetComponent<Animator>()) != null)
{
// 현재 무기의 외형에 따라 애니메이션 컨트롤러를 변경합니다.
// 런타임 도중 애니메이터의 애니메이션 컨트롤러를 변경하려면
// animator.runtimeAnimatorController를 변경해주어야 한다.
switch (weaponType)
{
case weaponHandleType.OneHandedWeapon:
animator.runtimeAnimatorController = oneHandedWeaponAniamtor as RuntimeAnimatorController;
animator.Rebind();
break;
case weaponHandleType.TwoHandedWeapon:
animator.runtimeAnimatorController = twoHandedWeaponAttackAnimator as RuntimeAnimatorController;
animator.Rebind();
break;
}
}
}'Portfolio > Portfolio_RiseTheTower' 카테고리의 다른 글
| #8) 스테이지 선택 씬에서 무한 스크롤링 UI 구현 (0) | 2023.07.26 |
|---|---|
| #7) 전투 시 플레이어 캐릭터의 바지와 헬멧의 인챈트를 확인하여 액티브 스킬을 장착 (0) | 2023.07.26 |
| #5) 현재 자신의 위치에서 가장 가까운 컨트롤러를 반환하는 함수 (0) | 2023.07.26 |
| #4) 제네릭 형식 제약조건을 사용한 장비아이템 데이터를 가져오는 함수 (0) | 2023.07.26 |
| #3) 현재 상태에 따라 컨트롤러의 동작을 변경하는 상태패턴 구현 (0) | 2023.07.26 |