728x90
728x90
안녕하세요! 이번 포스팅에서는 유니티 애니메이션을 활용하여 플레이어와 적 캐릭터의 동작에 애니메이션을 추가해보겠습니다. 캐릭터의 이동, 점프, 공격 애니메이션을 추가하면 게임이 한층 더 생동감 있게 느껴질 거예요!
1. 애니메이션 준비하기
애니메이션 파일 준비:
- 플레이어와 적 캐릭터의 이동, 점프, 공격에 대한 스프라이트 시트를 준비합니다. 각 동작에 맞는 이미지가 준비되어 있다면 애니메이션 작업을 바로 시작할 수 있습니다.
( 위 에셋 링크 -> https://assetstore.unity.com/packages/2d/characters/simple-2d-platformer-assets-pack-188518)
2. 애니메이터 컨트롤러 생성 및 설정
- Animator Controller 생성
- Assets 폴더에서 우클릭하여 Create > Animator Controller를 선택하고, PlayerAnimator라는 이름으로 저장합니다.
- 이 컨트롤러를 Player 오브젝트에 추가합니다.
- 애니메이션 설정
- PlayerAnimator를 더블 클릭하여 Animator 창을 열고, 애니메이션 상태를 추가합니다.
- 각각의 상태에 플레이어의 Idle, Run, Jump, Attack 애니메이션을 할당합니다.
- 애니메이션 트리거 설정
- Animator 창의 파라미터(Parameter)에서 Trigger 타입으로 Idle, Run, Jump, Attack 트리거를 만듭니다.
- 각 상태 사이에 트랜지션(Transition)을 추가하여 애니메이션을 연결합니다.
- 예를 들어, Idle → Run 트랜지션을 추가하고, 조건으로 Run 트리거를 설정합니다.
3. 애니메이션 전환 코드 작성하기
- PlayerMovement 스크립트 수정
- 플레이어의 움직임에 따라 애니메이션이 전환되도록 PlayerMovement 스크립트를 수정해보겠습니다.
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f;
public float jumpForce = 5f;
private Rigidbody2D rb;
private Animator animator;
private bool isJumping;
void Start()
{
rb = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}
void Update()
{
float move = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(move * moveSpeed, rb.velocity.y);
// 이동 애니메이션 설정
if (move != 0)
{
animator.SetTrigger("Run");
}
else
{
animator.SetTrigger("Idle");
}
// 점프 애니메이션 설정
if (Input.GetButtonDown("Jump") && !isJumping)
{
rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
animator.SetTrigger("Jump");
isJumping = true;
}
// 공격 애니메이션 설정
if (Input.GetKeyDown(KeyCode.Z))
{
animator.SetTrigger("Attack");
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
isJumping = false;
}
}
}
- animator.SetTrigger()를 통해 Run, Idle, Jump, Attack 애니메이션을 동작에 따라 전환합니다.
- isJumping 변수는 플레이어가 점프 중인지 아닌지 확인하는 데 사용됩니다.
4. 적 캐릭터의 간단한 애니메이션 추가
- EnemyAnimator 컨트롤러 생성
- Assets 폴더에 EnemyAnimator라는 이름의 새로운 Animator Controller를 생성합니다.
- Enemy 오브젝트에 추가합니다.
- 애니메이션 상태 설정
- EnemyAnimator의 Animator 창에서 Idle과 Run 상태를 추가하고, 애니메이션 파일을 할당합니다.
- Player 오브젝트가 감지되면 Run 애니메이션으로 전환되고, 그렇지 않으면 Idle 상태로 유지되도록 설정합니다.
- EnemyMovement 스크립트 수정
- EnemyMovement 스크립트에서 애니메이션 전환 코드를 추가하여 적이 플레이어를 따라갈 때만 이동 애니메이션을 활성화하도록 합니다.
using UnityEngine;
public class EnemyMovement : MonoBehaviour
{
public float moveSpeed = 2f;
public Transform player;
public float chaseRange = 5f;
private Animator animator;
private bool isChasing;
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
float distanceToPlayer = Vector2.Distance(transform.position, player.position);
if (distanceToPlayer <= chaseRange)
{
isChasing = true;
transform.position = Vector2.MoveTowards(transform.position, player.position, moveSpeed * Time.deltaTime);
}
else
{
isChasing = false;
}
// 애니메이션 상태 업데이트
if (isChasing)
{
animator.SetTrigger("Run");
}
else
{
animator.SetTrigger("Idle");
}
}
}
- isChasing 변수를 통해 플레이어를 추적할 때와 아닐 때 애니메이션이 전환됩니다.
5. 애니메이션 테스트 및 조정
- Play 모드에서 테스트
- Play 모드로 전환하여 이동, 점프, 공격 시 애니메이션이 정상적으로 전환되는지 확인하세요.
- 애니메이션 속도 조정
- Animator 창에서 각 애니메이션의 속도를 조정하여, 게임의 속도와 동작에 맞는 자연스러운 애니메이션을 만드세요.
728x90
'유니티 > 플랫폼 게임 만들기' 카테고리의 다른 글
유니티로 슈퍼마리오 같은 게임 만들기 #8 - 사운드 추가와 게임 배포하기 (8) | 2024.11.05 |
---|---|
유니티로 슈퍼마리오 같은 게임 만들기 #7 - 체력바와 게임 오버 화면 추가하기 (0) | 2024.11.04 |
유니티로 슈퍼마리오 같은 게임 만들기 #5 - 적과의 충돌 처리 및 기본 공격 기능 구현 (0) | 2024.10.30 |
유니티로 슈퍼마리오 같은 게임 만들기 #4 – 적 캐릭터 추가와 플레이어 추적 기능 구현 (1) | 2024.10.30 |
유니티로 슈퍼마리오같은 게임 만들기 #3 - 플레이어 점프와 바닥 충돌 구현 (0) | 2024.10.28 |