반응형
블렌더트리
여러 개의 애니메이션을 블렌드하고, 각 애니메이션의 일부가 각각 다른 비중으로 합쳐져 매끄럽게 블렌딩되도록 하기 위해 사용한다. 각각의 모션이 최종 효과에 어느 정도 영향을 주도록 할 것인지는 블렌딩 파라미터 를 사용하여 제어하는데, 이 파라미터는 애니메이터 컨트롤러에 관련된 수치인 애니메이션 파라미터 중에서 하나이다. 모션을 자연스럽게 블렌드하기 위해서는 성질과 타이밍이 유사한 모션끼리 블렌드되어야 한다. 블렌드 트리는 애니메이션 상태 머신의 특별한 스테이트 타입이다.
- 애니메이터 컨트롤러 창의 빈 공간에 마우스를 마우스 오른쪽 버튼으로 클릭
- 컨텍스트 메뉴가 나타나면 Create State > From New Blend Tree 를 선택
- 블렌드 트리를 더블 클릭하여 블렌드 트리 그래프
>> 공식문서
임시로 보여주기 위해 만든것이라 멋쟁이 코드는 아니지만 블렌더 트리로 하면 깔끔하게 할 수 있다는 것을 보여줄 수 있다.
코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AnimationController : MonoBehaviour
{
public Animator animator;
public Button[] dirButtons;
public Button[] animButtons;
private void Start()
{
for (int i = 0; i < dirButtons.Length; i++)
{
int index = i;
dirButtons[i].onClick.AddListener(() => OnDirBtnClick(index));
}
for (int i = 0; i < animButtons.Length; i++)
{
int index = i;
animButtons[i].onClick.AddListener(() => OnAnimButtonClick(index));
}
}
private void OnDirBtnClick(int i)
{
switch (i)
{
case 0:
animator.SetFloat("Xval", 0);
animator.SetFloat("Yval", 1);
break;
case 1:
animator.SetFloat("Xval", 0);
animator.SetFloat("Yval", -1);
break;
case 2:
animator.SetFloat("Xval", -1);
animator.SetFloat("Yval", 0);
break;
case 3:
animator.SetFloat("Xval", 1);
animator.SetFloat("Yval", 0);
break;
}
Debug.Log($"{i} 눌림");
}
private void OnAnimButtonClick(int i)
{
Debug.Log($"애니메이션 버튼 {i} 눌림");
animator.SetBool("IsIdle", false);
animator.SetBool("IsPush", false);
animator.SetBool("IsJump", false);
animator.SetBool("IsWalk", false);
animator.SetBool("IsRun", false);
animator.SetBool("IsResting", false);
animator.SetBool("IsAttack", false);
animator.SetBool("IsPull", false);
switch (i)
{
case 0:
animator.SetBool("IsIdle", true);
break;
case 1:
animator.SetBool("IsPush", true);
break;
case 2:
animator.SetBool("IsPull", true);
break;
case 3:
animator.SetBool("IsJump", true);
break;
case 4:
animator.SetBool("IsWalk", true);
break;
case 5:
animator.SetBool("IsRun", true);
break;
case 6:
animator.SetBool("IsAttack", true);
break;
case 7:
animator.SetBool("IsResting", true);
break;
default:
break;
}
}
}
오늘의 회고
이후에 깔끔하게 이어서 더 쓰겠습니다..^^77 현재 바빠서... 이만..
반응형
'Record > TIL' 카테고리의 다른 글
[Unity] 스택 메모리 vs 힙 메모리 (0) | 2024.07.09 |
---|---|
[C#] 상속과 인터페이스 (3) | 2024.07.08 |
[Unity] 유니티로 픽셀 이미지(스프라이트) 가져올때 깨지거나 화질구려질때 해결방법 (0) | 2024.07.04 |
[C#] Override와 Overload란? (0) | 2024.07.03 |
[C#] 확장 메서드란? (0) | 2024.07.02 |