목차
Undead Survivor
26.02.13
캐릭터 방향 전환
: SpriteRenderer 의 Flip 기능을 활용
--> 스크립트를 수정하여 구현
※ LateUpdate : 프레임이 종료되기 전 실행되는 생명주기 함수
>> Player.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
public Vector2 inputVec;
public float speed = 3.0f;
private Rigidbody2D rigid;
private SpriteRenderer spriter; // 추가
private void Awake()
{
rigid = GetComponent<Rigidbody2D>();
spriter = GetComponent<SpriteRenderer>(); // 추가
}
private void FixedUpdate()
{
Vector2 nextVec = inputVec * speed * Time.fixedDeltaTime;
rigid.MovePosition(rigid.position + nextVec);
}
private void LateUpdate() // 추가
{
if (inputVec.x != 0)
{
spriter.flipX = inputVec.x < 0;
}
}
private void OnMove(InputValue value)
{
inputVec = value.Get<Vector2>();
}
}
셀 애니메이션
: 여러 장의 이미지를 순차적으로 보여주는 방식
>> 애니메이션 파일 생성
: 여러 개의 Sprite 를 모두 선택하여 원하는 오브젝트에 추가
- Run_Player0
- Stand_Player0
- Dead_Player0

--> 자동으로 오브젝트 이름으로 Animator 생성됨 (이름을 AcPlayer 로 수정)
--> 자동으로 오브젝트에 Animator 컴포넌트 생성됨
※ Animator : 애니메이션을 상태로 관리하는 컴포넌트
>> Animator
1. Stand 가 기본 상태여야 하므로 Stand 를 기본 상태로 설정

2. 상태들의 이름을 변경
: 뒤의 '_Player0' 제거
3. Stand와 Run을 서로 Transition으로 연결, Any State에서 Dead로 Transition 연결

4. Parameters 생성 및 설정




5. Animation 전환 설정
- Has Exit Time : 재생 중이던 Animation이 끝나면 다음 상태로 전환
- Transition Duration : 3D Animation에서 Animation 전환을 부드럽게 만들어주는 것 --> 셀 애니메이션에서는 최소화해야 한다.

--> Transition Duration은 0으로 설정해도 됨
--> Stand → Run, Run → Stand, Any State → Dead 모두 동일하게 설정
6. Dead Animation Loop 해제
: Dead Animation은 한번만 재생되면 되므로 Loop를 해제

>> Animation 적용
: 코드를 작성하여 Animation 적용
--> Dead 는 나중에 적용
- Player.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class Player : MonoBehaviour
{
public Vector2 inputVec;
public float speed = 3.0f;
private Rigidbody2D rigid;
private SpriteRenderer spriter;
private Animator anim; // 추가
private void Awake()
{
rigid = GetComponent<Rigidbody2D>();
spriter = GetComponent<SpriteRenderer>();
anim = GetComponent<Animator>(); // 추가
}
private void FixedUpdate()
{
Vector2 nextVec = inputVec * speed * Time.fixedDeltaTime;
rigid.MovePosition(rigid.position + nextVec);
}
private void LateUpdate()
{
anim.SetFloat("Speed", inputVec.magnitude); // 추가
if (inputVec.x != 0)
{
spriter.flipX = inputVec.x < 0;
}
}
private void OnMove(InputValue value)
{
inputVec = value.Get<Vector2>();
}
}
Animator 재활용
: 앞서 'AcPlayer'를 만든 것과 동일하게 다른 캐릭터의 'Stand, Run, Dead'에 해당하는 여러 Sprite를 'Player' 오브젝트에 드래그&드랍하여 생성 후, AcPlayer에 새로 생긴 상태는 전부 제거
--> 이후 Animations 폴더에 'Animator Override Controller' 추가 (이름은 'AcPlayer1')
※ Animator Override Controller
: 애니메이션만 덮어 씌우는 에셋
--> 기존 Animator와 구조는 같되, Animation이 다를 때 사용


>> Player1 세팅
: 기존 Player를 복붙하여 Animator만 변경
--> Sprite Renderer를 바꾸지 않아도 게임을 플레이하면 Animator의 Sprite를 따라 자동으로 변하게 된다.

--> 기존 캐릭터와 구분하기 위해 X 축으로 1 이동
'Development > Undead Survivor' 카테고리의 다른 글
| 오브젝트 풀링으로 소환하기 (0) | 2026.03.10 |
|---|---|
| 몬스터 만들기 (0) | 2026.02.27 |
| 무한 맵 이동 (0) | 2026.02.24 |
| Input System (0) | 2026.02.10 |
| 오브젝트 추가 및 이동 (0) | 2026.02.05 |