목표
animator를 이용하여 간단하게 반복적인 Idle 움직임과 외부에서 클릭 시 점프하는 animation을 구현하여 여러 개의 애니메이션이 한 번에 재생되는 상황을 연출해 보겠습니다.
목차
1. 결과화면
2. 오브젝트의 구성
3. animator 생성
4. animation 생성
5. 점프 스크립트 작성
6. 반복재생과 한번재생
7. animation 속도
8. animator에서 clip 가져오기
----
----
결과화면
오브젝트 구성
오브젝트는 obj라는 최상위 부모와 body, eyes를 넣어서 obj는 점프하는 애니메이션을, body는 Idle 애니메이션을, eyes는 눈을 깜빡이는 애니메이션을 수해합니다. body의 Idle 애니메이션 eyes가 영향을 받지 않도록 body와 eyes는 동일 레벨에 위치합니다. eyes 아래는 leye, reye 왼쪽 눈과 오른쪽 눈을 넣어줍니다. 저는 눈의 왼쪽, 오른쪽 위치를 -0.7, 0.7로 하였습니다. 그리고 eyes와 body의 z fighting 때문에 눈이 안 보일 수 있으니 눈의 z 값을 -0.01을 주어서 body보다 앞으로 나오게 합니다.
따라 하시기 편하도록 몸통과 눈에 사용된 이미지를 공유합니다. circleSmall이 body, circleTiny가 leye, reye입니다.
이미지 적용법을 모르시는 분들은 아래를 참고해 주세요
animator 생성
용도에 따라서 animator를 생성합니다. obj, body, eyes를 각각 생성하여 obj, body, eyes에 붙여줍니다. 지금 단계에서는 단순하게 생성만 해줍니다. 상세 설정은 아래에서 하게 됩니다.
animation 생성
animator에는 다양한 애니메이션이 들어갑니다. 오늘은 단순하게 각각 애니메이터에 하나의 애니메이션만 배치하여 실행해 보도록 하겠습니다. objJump, bodyIdle, eyesBlink를 각각 생성하여 obj, body, eyes animator에 드래그앤드랍 해줍니다. obj animator에서는 첫 시작을 objJump로 하지 않기 위해 빈 스테이트를 하나 만들어서 entry가 빈 스테이트를 바라보게 하고 objJump는 exit로만 transition을 연결해 줍니다.
----
----
점프 스크립트 작성
클릭했을 때 obj가 점프할 수 있도록 Input 함수를 작성하여 마우스를 릴리스 할 때 점프하는 애니메이션(objJump)을 호출해 줍니다.
Animator objAnimator;
// Start is called before the first frame update
void Start()
{
objAnimator = GameObject.Find("obj").GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonUp(0))
{
objAnimator.Play("objJump");
}
}
반복재생과 한번재생
이제 재생을 하게 되면 body와 eyes가 반복적으로 애니메이션을 재생하고 클릭을 하게 되면 점프를 하는데 점프가 멈추지 않습니다.
objJump를 클릭해 보면 Inspector 창에서 Loop time이란 요소를 확인할 수 있습니다. 이것을 비활성 해주면 반복해서 재생되지 않습니다. 이것은 bodyIdle과 eyesBlink도 마찬가지로 비활성화해주면 한 번만 애니메이션이 작동하게 됩니다.
animation 속도
eyes animator에서 eyesBlink를 눌러보게 되면 speed란 요소가 있는데 이것을 0.5로 변경해 주어 눈이 천천히 깜빡이도록 합니다.
animator에서 clip 가져오기
하나의 animator에 여러 개의 애니메이션을 할당할 때가 있습니다. 이때 해당 애니메이터에 어떤 애니메이션들이 있는지 확인이 필요할 때가 있습니다.
void Start()
{
var objAnimator = GameObject.Find("obj").GetComponent<Animator>();
AnimationClip[] _anis = objAnimator.runtimeAnimatorController.animationClips;
}
'Programming > 유니티' 카테고리의 다른 글
유니티(Unity) TextmeshproGui 사용시 Recttransfrom 의 크기가 변경되지 않을 때 (content size filter) (0) | 2024.03.20 |
---|---|
유니티 (Unity) - Illegal character in scheme name at index 0 (0) | 2024.02.28 |
유니티 (Unity) - Button의 OnClick Listener 사용법 (0) | 2024.02.23 |
유니티 (Unity) Rigidbody2d velocity 활용법 (0) | 2024.02.20 |
유니티(Unity) 프로젝트 점프게임 만들기 : [7] 플렛폼 생성 (0) | 2024.02.18 |