안녕하세요.
오늘은 2D 캐릭터 이동 애니메이션을 구현해보겠습니다.
유니티 버전 - 2021.3.4f1
아래 첨부한 링크에서 다운받은 png를 sprite Editor를 통해 잘라줍니다.
한 행 전체가 한 방향의 모션이 됩니다.
8개씩 모아서 씬으로 드래그를 하면 애니메이션 생성창이 뜹니다.
저는 walk라고 저장을 했습니다.
생성을 하게되면 애니메이션 파일과 컨트롤러 두가지가 생기게됩니다.
계층구조에 생성된 오브젝트 이름을 player로 이름을 바꾸겠습니다.
그리고 컴포넌트 추가에 Rigidbody2D를 추가합니다.
그런 다음 해당 오브젝트에 PlayerController 이름으로 새스크립트를 추가합니다.
그리고 walk 애니메이션을 생성할때 만들어진 rpg_sprite_walk_0 컨트롤러 파일을 WalkController 로 이름을 변경합니다.
이제 WalkController를 선택한 상태에서 Window - Animation - Animator 창을 엽니다.
Animator 화면에서 BaseLayer 화면 오른쪽마우스 클릭 - Create State - From New Blend Tree 생성을 합니다.
생성된 블렌드 트리를 더블 클릭하면 해당 창으로 넘어갑니다. BlendType 을 2D로 변경합니다.
그리고 왼쪽 파라미터창에서 Float 파라미터를 두개 생성합니다.
파라미터는 각각 horizontal, vertical 로 정하겠습니다.
다음 위에서 slice했던 캐릭터 sprite 파일을 위에서 헀던대로 8개 단위로 각각 애니메이션 파일을 만듭니다.
그다음 블렌드트리로 돌아가서 Instpector 에서 addMotion으로 4개를 추가합니다.
그럼 점이 네개가 나오게 되고, -1 0 1 수치를 넣어서 상하좌우에 배치합니다.
그리고 앞에서 만든 4개의 모션을 각 점의 방향에 맞게 Motion으로 드래그합니다.
그리고 마지막으로 Player의 Inspector에서 Animator 컴포넌트의 Controller를 WalkController 로 적용합니다.
그리고 Player에 추가했던 PlayerController 스크립트를 작성합니다.
//PlayerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody2D))]
public class PlayerController : MonoBehaviour
{
Rigidbody2D rigid;
[SerializeField] float speed =2f;
Vector2 motionVectior;
Animator animator;
void Awake()
{
rigid = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}
void Update()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
motionVectior = new Vector2(horizontal, vertical);
animator.SetFloat("horizontal",horizontal);
animator.SetFloat("vertical", vertical);
}
void FixedUpdate()
{
Move();
}
private void Move(){
rigid.velocity = motionVectior * speed;
}
}
[참고 리소스]
https://opengameart.org/content/2d-rpg-character-walk-spritesheet
'C#' 카테고리의 다른 글
[Unity] 타일맵으로 맵 구성하기 (0) | 2022.09.11 |
---|---|
[C#][Unity] 프리팹이란? (0) | 2022.09.01 |
[C#][Unity] 코루틴 사용 방법 (0) | 2022.08.16 |
[C#][Unity] 상자 열고 닫기 (0) | 2022.08.12 |
[C#][Unity] Getkey, GetKeyDown, GetKeyUp (0) | 2022.08.01 |