
1단계: 화면에 놓일 오브젝트를 모두 나열

2단계: 오브젝트를 움직일 수 있는 컨트롤러 스크립트 정함
플레이어
3단계: 오브젝트를 자동으로 생성할 수 있는 제너레이터 스크립트 정함
x
4단계: UI 갱신할 수 있도록 감독 스크립트 준비
씬 전환
5단계: 스크립트를 만드는 흐름 생각



-catEscape 에서는 화살 움직임을 스크립트로 제어했음.
-climbcloud 에서는 플레이어 움직임을 Physics로 제어
-Physics는 유니티에 표준으로 속해 있는 물리 엔진
-Physics를 쓰면 오브젝트를 간단하게 물리 동작에 맞춰 움직일 수 있음
-Phyics는 Rigidbody, Collider 컴포넌트로 구성
☑️Rigidbody 컴포넌트는 ‘힘 계산(물체에 작용하는 중력이나 마찰 등의 힘 계산)’을 담당
☑️ Collider 컴포넌트는 ‘물체의 충돌 판정’을 담당
-Physics를 사용해 물리적인 동작을 하면 오브젝트에는 Rigidbody와 Collider라는 컴포넌트 두 개가 적용
-Physics를 쓰면 오브젝트를 간단하게 물리 법칙에 따라 움직일 수 있고, 충돌 판정도 자동으로 할 수 있음
-무대 위를 플레이어가 자유롭게 이동하는 액션 게임이나 복잡한 충돌 판정이 필요한 슈팅 게임에 이상적임

▪ Rigidbody 2D 컴포넌트를 적용했으므로 게임을 실행해 플레이어가 중력에 따라 낙하
▪ 스크립트를 한 줄도 작성하지 않았는데 플레이어가 물리 동작에 따라 동작
▪ 계속해서 플레이어가 다른 오브젝트와 충돌할 때를 고려해 Collider 2D 컴포넌트를 적용
▪ 콜라이더는 Circle Collider 2D 외에도 다음과 같은 모양이 있음
▪ 오브젝트 모양에 맞춰 선택하면 됨
▪ 원형이나 사각형 콜라이더 외에도 오브젝트에 잘 맞도록 콜라이더 모양을 자유롭게 편집할 수 있는 Polygon Collider 등이 있음

*구름에 Physics 적용하기
▪ 구름에 Rigidbody 2D를 추가하고 실행
▪ 중력과 물리 연산의 영향을 무시하려면 Rigidbody 2D의 Body Type에서 드롭다운 목록를 열고 Kinematic을 선택
*오브젝트에 잘 맞는 콜라이더의 모양
▪ 지금까지는 플레이어의 콜라이더로 Circle Collider 2D(원형 콜라이더)를 사용
▪ 원형 콜라이더는 다음과 같이 플레이어 모양과 딱 맞지 않아 충돌 판정이 정확하지 않음
▪ 콜라이더 모양을 사각형으로 바꾸면 원형 콜라이더보다는 오브젝트에 잘 맞지만 낮은 턱에 걸려서 넘어지기도 쉽고 좁은 틈새로 들어가기도 어려움
▪ 이동하는 플레이어라면 ✅캡슐형 콜라이더를 사용하는 것이 나음


▪ 반 캡슐형 콜라이더를 사용
▪ Capsule Collider 2D가 있으나, 직접 콜라이더를 조합해서 만들어 보기!
-원형 콜라이더를 줄여서 옮긴 후 둘레에 사각형 콜라이더를 추가
▪ Hierarchy 창에서 cat을 클릭
▪ Inspector 창에서 Circle Collider 2D 항목의 Offset을 0, -0.3, Radius를 0.15로 설정
✓ Offset에서는 원의 중심 좌표를 초깃값에서 어느 정도 옮길지 설정하고, Radius에서는 원형 콜라이더의 반경을 설정

▪ Hierarchy 창에 cat이 선택된 상태에서 Inspector 창의 Add Component를 클릭하고 Box Collider 2D를 선택
▪ Inspector 창에서 Box Collider 2D 항목의 Size를 0.3, 0.6으로 설정
✓ Size에서는 사각형의 너비와 높이를 지정

플레이어의 회전 방지
▪ 플레이어가 넘어지지 않도록 Freeze Rotation 항목을 설정
✓ Freeze Rotation은 지정한 축의 회전을 방지하는 항목
▪ Hierarchy 창에서 cat을 클릭
▪ Inspector 창에서 Rigidbody 2D 항목의 ▶ Constraints를 찾아 ▶을 클릭한 후 Freeze Rotation의 Z를 체크

구름 콜라이더 조정하기
▪ 구름 콜라이더가 구름 주위를 둘러싸고 있어 플레이어가 착지하더라도 살짝 떠 보임
▪ 구름 콜라이더의 크기를 조금 줄여야 함
▪ Hierarchy 창에서 cloud를 클릭하고 Inspector창에서 Box Collider 2D 항목의 Size를 1.4, 0.5로 설정
▪ 사용자가 입력한 대로 플레이어가 좌우로 움직이거나 뛰어오르도록 만들겠음
▪ Physics를 적용한 것만으로는 사용자 입력을 오브젝트 움직임에 반영할 수 없음
▪ 사용자 입력을 플레이어 움직임에 반영하려면 스크립트가 필요함
➡️ 키보드에 있는 좌우 화살표 키를 누르면 좌우로 이동하고 스페이스바를 누르면 점프하는 컨트롤러 스크립트를 작성

▪ 플레이어에 힘을 가하려면 Rigidbody2D 컴포넌트가 가진 AddForce 메서드를 사용
▪ Rigidbody2D 컴포넌트를 갖는 메서드를 사용하기 때문에 Start()에서 GetComponent 메서드를 사용해 Rigidbody2D 컴포넌트를 구해서 멤버 변수에 저장
▪ Spacebar를 누르면 플레이어가 점프해야 하므로 GetKeyDown 메서드를 사용해 Spacebar가 눌렸는지 알아봄
▪ Spacebar가 눌리면 AddForce 메서드를 사용해 위쪽 방향으로 가도록 플레이어에 힘을 가함
▪ 위쪽 방향의 힘 → 길이가 1인 위쪽 방향 벡터(transform.up) *jumpForce 값

▪ 플레이어에 작용하는 중력을 키워 움직임에 플레이어 무게가 느껴지도록 바꿔야 함
▪ Rigidbody에 걸린 중력 크기는 Gravity Scale 값으로 조정할 수 있음
▪ 플레이어에 작용하는 중력을 3배로 설정
▪ 오른쪽으로 움직이려면 오른쪽 방향 힘(X축 방향), 왼쪽으로 움직이려면 왼쪽 방향 힘(-X축 방향)을 가해야 하므로 key 변수를 사용해 부호를 제어
▪ (오른쪽 화살표 키)가 눌리면 key 변수에 1을 대입하고,(왼쪽 화살표 키)가 눌리면 key 변수에 -1을 대입
▪ 키가 눌리지 않았을 때는 플레이어가 움직이지 않도록 key 변수를 0으로 유지
▪ 프레임마다 AddForce 메서드를 사용해 힘을 계속해서 가하면 플레이어는 점점 가속
▪ 이것은 액셀을 밟으면 차가 가속하는 것과 같음
▪ 자동차 운전과 마찬가지로 플레이어의 이동 속도가 지정한 최고 속도(maxWalkSpeed)보다 빠르다면 힘을 가하는 것을 멈추고 속도를 조절

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerController : MonoBehaviour
{
Rigidbody2D rigid2D;
Animator animator;
float jumpForce = 680.0f;
float walkForce = 30.0f;
float maxWalkSpeed = 2.0f;
// Start is called before the first frame update
void Start()
{
Application.targetFrameRate = 60;
this.rigid2D = GetComponent<Rigidbody2D>();
this.animator = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)&&this.rigid2D.velocity.y==0)
{
this.animator.SetTrigger("JumpTrigger");
this.rigid2D.AddForce(transform.up * this.jumpForce);
}
int key = 0;
if (Input.GetKey(KeyCode.RightArrow)) { key = 1; }
if (Input.GetKey(KeyCode.LeftArrow)) { key = -1; }
float speedx = Mathf.Abs(this.rigid2D.velocity.x);
if (speedx < this.maxWalkSpeed)
{
this.rigid2D.AddForce(transform.right * key * this.walkForce);
}
if (key != 0) // 움직이는 방향에 따라 플레이어 이미지를 반전시킴
{
transform.localScale = new Vector3(key, 1, 1);
}
this.animator.speed = speedx / 2.0f;
void OnTriggerEnter2D(Collider2D other)
{
Debug.Log("골");
}
}
}

▪ 사용자 입력에 따라 플레이어가 움직임
▪ 플레이어가 움직일 때 애니메이션이 되도록 수정
✓ 일반적으로 캐릭터 애니메이션을 만들 때는 플립북 방식을 사용
✓ 유니티 2D 게임에서도 플립북 방식과 유사한 방식을 씀
✓ 움직임을 조금씩 변경한 스프라이트를 준비해 일정 간격으로 바꿔 주는 방식을 사용하는데, 이를 ✅스프라이트 애니메이션이라고 함

▪ 유니티로 스프라이트 애니메이션을 만들려면 게임을 실행할 때 스크립트에서 일러스트를 한 컷 씩 교체하거나 애니메이션 작성과 전환을 일관되게 할 수 있는 메카님 구조를 사용

▪ 메카님(Mecanim)은 애니메이션을 작성하고 실행할 때 유니티 에디터에서 일관되게 조작할 수 있는 기능
▪ 메카님을 사용하면, 게임을 설계할 때 스프라이트 애니메이션을 작성해 각 애니메이션의 교체 시기를 지정할 수 있음
▪ 그러면 게임을 플레이할 때 메카님이 오브젝트 상태를 판단하고 자동으로 애니메이션을 바꿔 재생할 수 있음

▪ 메카님을 사용하려면 스프라이트, 애니메이션 클립, 애니메이터 컨트롤러, Animator 컴포넌트의 관계를 이해해야 함
▪ 네 가지 컴포넌트 관계는 다음과 같음

*스프라이트와 애니메이션 클립
▪ ☑️애니메이션 클립: 스프라이트 애니메이션을 사용할 수 있도록 스프라이트를 정리한 파일
▪ ‘걷기 애니메이션’이나 ‘점프 애니메이션’처럼 애니메이션마다 애니메이션 클립을 준비
▪ 애니메이션 클립에는 재생할 스프라이트 정보, 재생 속도, 재생 시간 등 정보를 설정

*애니메이션 클립과 애니메이터 컨트롤러
▪ ☑️애니메이터 컨트롤러: 애니메이션 클립을 정리한 것
▪ 애니메이터 컨트롤러로는 어느 시점에 어느 애니메이션 클립을 재생할지 지정
▪ 예를 들어 ‘플레이어가 지면에 닿아 있으면 걷기 애니메이션을 재생한다’,
‘뛰어오르면 점프 애니메이션을 재생한다’, ‘물에 들어가면 수영 애니메이션을 재생한다’

*애니메이터 컨트롤러와 Animator 컴포넌트
▪ 애니메이션하려는 오브젝트에 있는 Animator 컴포넌트에 애니메이터 컨트롤러를 설정하면 애니메이터 컨트롤러에서 정의한 애니메이션을 재생할 수 있음

*걷기 애니메이션 만들어 보기
▪ 메카님을 사용해 처음으로 애니메이션 클립(Walk)을 작성할 때는 다음의 단계가
자동으로 실행됨
① 애니메이션 클립 파일(Walk)이 생성
② 애니메이터 컨트롤러 파일(cat)이 생성
③ 애니메이터 컨트롤러 파일(cat)이 Animator 컴포넌트에 설정
④ 플레이어에 Animator 컴포넌트가 적용

▪ 애니메이션을 작성하려면 애니메이션 클립의 타임라인에 스프라이트를 배치해서 애니메이션을 시작한 후 몇 초 만에 어느 스프라이트를 표시할지 설정
▪ 그림이 0.07초마다 바뀌고 한 바퀴를 돌면(0.28초) 다시 처음부터 반복해서 재생되는 애니메이션
▪ 마지막의 cat_walk3도 0.07초 동안 표시해야 하므로 cat_walk3 스프라이트를 배치한 다음에도 0.07초가 더 필요함

*애니메이션 속도 조절하기
▪ 게임을 실행하면 플레이어가 조작하지 않는 동안에도 애니메이션이 계속 재생
▪ 플레이어 이동 속도에 맞춰 애니메이션 재생 속도를 조절하는 것이 자연스러움
▪ 애니메이션 재생 속도는 스크립트에서 변경할 수 있음
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerController : MonoBehaviour
{
Rigidbody2D rigid2D;
Animator animator; // (1)
float jumpForce = 680.0f;
float walkForce = 30.0f;
float maxWalkSpeed = 2.0f;
// Start is called before the first frame update
void Start()
{
Application.targetFrameRate = 60;
this.rigid2D = GetComponent<Rigidbody2D>();
this.animator = GetComponent<Animator>(); // (2)
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)&&this.rigid2D.velocity.y==0)
{
this.animator.SetTrigger("JumpTrigger");
this.rigid2D.AddForce(transform.up * this.jumpForce);
}
int key = 0;
if (Input.GetKey(KeyCode.RightArrow)) { key = 1; }
if (Input.GetKey(KeyCode.LeftArrow)) { key = -1; }
float speedx = Mathf.Abs(this.rigid2D.velocity.x);
if (speedx < this.maxWalkSpeed)
{
this.rigid2D.AddForce(transform.right * key * this.walkForce);
}
if (key != 0) // 움직이는 방향에 따라 플레이어 이미지를 반전시킴
{
transform.localScale = new Vector3(key, 1, 1);
}
this.animator.speed = speedx / 2.0f; // (3) 속도 조절
void OnTriggerEnter2D(Collider2D other)
{
Debug.Log("골");
}
}
}
▪ 우선 현재 사용하고 있는 구름 발판을 복제해 무대를 만듦
▪ 구름 이미지를 바꾸거나 충돌 판정 범위를 바꿀 것까지 고려해 구름을 프리팹으로 만듦
✓ 프리팹으로 만들어 두면 나중에 수정하기 쉬움
▪ 구름 프리팹을 만들려면 Hierarchy 창에 있는 cloud를 Project 창으로 드래그&드롭
▪ 프리팹이 만들어지면 이름을 cloudPrefab으로 변경
▪ Hierarchy 창의 cloud는 마우스 오른쪽 버튼을 누르고 Delete로 삭제

▪ Project 창의 cloudPrefab을 Scene 뷰로 드래그&드롭 → Hierarchy 창에 cloudPrefab 생성

*깃발 세우기

*배경 이미지 넣기
▪ Sprite Renderer 항목의 Order in Layer를 -1로 설정해 배경 이미지가 맨 뒤에 놓이도록 함

*카메라를 스크립트로 이동시키기
▪ 플레이어가 구름 발판을 이용해 이동할 수 있게 되었음
▪ 플레이어가 화면에 보이지 않는 더 위쪽까지 이동하면 카메라가 따라갈 수 없음
▪ ✅카메라를 움직이는 컨트롤러 스크립트 작성!
✓ 카메라도 게임 오브젝트의 일종이므로 일반 오브젝트와 마찬가지로 컨트롤러 스크립트로 움직임
*카메라 스크립트 작성하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
GameObject player; // 상자
// Start is called before the first frame update
void Start()
{
this.player = GameObject.Find("cat");
// cat 객체를 찾아서 player에 집어 넣어 / 상자 안에 cat
}
// Update is called once per frame
void Update()
{
Vector3 playerPos = this.player.transform.position; // cat의 3차원 위치를 넣
transform.position = new Vector3(transform.position.x, playerPos.y, transform.position.z); // cat의 y만! -> 카메라의 y값으로 대체
}
}
▪ 플레이어가 수직 이동할 때마다 카메라가 따라다니도록 프레임마다 플레이어 좌표를 조사해서 카메라의 Y 좌표에 반영
▪ 플레이어 이동에 따라가는 것은 Y축 방향(수직 방향)의 변화뿐이므로 X 좌표와 Z 좌표에는 카메라의 원래 좌표를 그대로 대입

Physics로 충돌 판정하기
▪ 플레이어가 깃발에 닿으면 클리어 씬으로 전환되도록 플레이어와 깃발 사이에 충돌 판정을 구현
▪ Physics를 사용한 충돌 판정 방법을 사용
✓ Physics를 사용해 충돌 판정을 할 때는 충돌 판정 알고리즘을 따로 구현할 필요❌
✓ Collider 컴포넌트를 적용한 오브젝트들이 충돌했을 때 Physics가 자동으로 닿았는지 판정해 주기 때문
✓ 충돌하면 충돌한 오브젝트에 적용된 스크립트의 OnCollisionEnter2D 메서드 등이 호출
▪ Physics를 사용한 충돌 판정 종류: Collision 모드(충돌 모드)와 Trigger 모드(통과 모드)
▪ Collision 모드
✓ 오브젝트가 닿았을 때 충돌 판정은 물론 충돌했을 때 주변에 미치는 영향까지 포함해 충돌 반응을 실행
▪ Trigger 모드
✓ 충돌 판정만 하고 충돌 응답은 실행하지 않음(충돌한 오브젝트는 빠져나감)
▪ Collision 모드를 예로 들면 오브젝트들이 충돌한 순간에는 OnCollisionEnter2D 메서드가 한 번만 호출(3D라면 OnCollisionEnter 메서드가 호출)
▪ 충돌 중에는 OnCollisionStay2D메서드가 호출
▪ 충돌한 오브젝트가 떨어지는 순간에는 OnCollisionExit2D 메서드가 한 번만 호출
플레이어와 깃발의 충돌 판정 구현하기
▪ 오브젝트 두 개가 충돌이나 닿은 후에도 물리적인 행동을 하게 하려면 양쪽 오브젝트에 Collider와 Rigidbody를 적용
▪ 충돌 판정만 하려면 Collider는 양쪽 오브젝트에 적용해야 하지만, Rigidbody는 한쪽 오브젝트에만 적용
✅ Physics의 충돌 판정 조건
▪ 판정할 모든 오브젝트에 Collider 컴포넌트가 적용되어 있어야 함
▪ 충돌을 판정할 오브젝트 중 적어도 한쪽에는 Rigidbody 컴포넌트가 적용되어 있어야 함
▪ 플레이어에는 Rigidbody 컴포넌트와 Collider 컴포넌트가 이미 적용되어 있으므로 다음 순서로 플레이어와 깃발의 충돌 판정을 구현
① 깃발에 Collider2D 컴포넌트를 적용하고 Trigger 모드(통과 모드)로 설정
② 플레이어와 깃발이 닿았을 때 호출되는 OnTriggerEnter2D 메서드를 PlayerController로 구현
▪ 깃발에 Collider 컴포넌트를 적용하기
▪ Collider 컴포넌트 변수에서 Trigger 모드 찾아서 체크하기
▪ 플레이어와 깃발이 닿았을 때 호출되는 메서드(OnTriggerEnter2D)를 PlayerController 스크립트에 구현하기
▪ 플레이어가 깃발에 닿았을 때 콘솔 창에 “골”이 표시되는지 확인하기
▪ 유니티에서는 게임 화면을 묶어 씬 형태로 관리
▪ 보통 게임을 실행하면 타이틀 화면이 나타났다 사라지고 메뉴 화면이 등장
✓ 메뉴 화면에서 게임 시작을 선택하면 게임이 시작되고, 게임이 종료되면 결과가 화면에 표시
✓ 이 각각의 화면을 유니티는 씬으로 관리
✓ 다음 예는 타이틀 씬, 메뉴 씬, 게임 씬, 게임 종료 씬 네 가지로 구성

▪ 각 씬을 더해 게임 하나를 만듦
▪ 각 씬을 다른 씬으로 전환시키려면 전환할 시점에 다른 씬의 파일명을 지정하면 됨
▪ 플레이어가 골 깃발에 닿으면 ‘게임 씬’에서 ‘클리어 씬’으로 전환
▪ ‘클리어 씬’ 화면을 클릭하면 다시 ‘게임 씬’으로 돌아감

▪ 지금 있는 씬을 도구 바에 있는 File → Save를 선택해 저장한 후
File → New Scene을 선택하면 추가할 씬의 템플릿을 선택하는 창이 나타남
▪ 여기서 Basic 2D (Built-in)을 선택하고, 오른쪽 아래의 Create를 클릭해 새로운 씬을 만듦

▪ 새로운 씬이 만들어지면 File → Save As를 선택하고 이름을 ClearScene으로 바꾼 후 Save를 클릭
▪ Project 창에 ClearScene이 생김
▪ 새로운 씬에는 아직 아무것도 표시되지 않음
▪ Project 창에 있는 background_clear를 Scene뷰 화면 중앙에 추가
▪ Inspector 창에서 Transform 항목의 Position을 0, 0, 0으로 설정

감독을 만드는 방법
① 감독 스크립트를 작성
② 빈 오브젝트를 만듦(적용할 감독 스크립트 이름과 같다)
③ 빈 오브젝트에 감독 스크립트를 적용
감독 스크립트 작성
▪ 우선 클리어 씬의 감독 스크립트를 작성
clearDirector
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; // @
// Update is called once per frame
void Update()
{
if (Input.GetMouseButton(0)) // Down 도 ㄱㅊ
{
SceneManager.LoadScene("GameScene");
}
}
}
⚠️ 게임을 실행해서 마우스 왼쪽 버튼을 클릭해보면?
❇️ 씬 전환을 하려면 어느 씬을 어떤 순서로 사용하는지 유니티에 등록
✓ LoadScene 메서드로 전환할 곳의 씬을 지정해도 실행할 때 ‘그런 씬 없어!’라는 오류가 발생

▪ 도구 바에서 File → Build Settings를 선택
▪ Project 창에서 ClearScene과 GameScene을 Build Settings 창의 Scenes In Build 영역으로 드래그&드롭

▪ Scenes In Build에 추가한 씬의 오른쪽에 각각 0과 1이 보임
▪ 게임을 스마트폰 등에서 실제로 플레이할 때는 0번 씬부터 시작
▪ GameScene이 0, ClearScene이 1이 되도록 드래그&드롭으로 씬을 나열
▪ 이번에도 Scenes/SampleScene은 사용하지 않으므로 체크를 해제

▪ 우선 현재 ClearScene을 저장 (File → Save)
▪ GameScene 아이콘을 더블 클릭해서 GameScene 활성화
▪ 게임 씬에서 클리어 씬으로 전환하는 시점은 플레이어가 깃발에 닿는 시점
❇️플레이어 컨트롤러에 전환 스크립트를 추가해서 씬 전환 구현
PlayerController 최종 코드
점프하는 도중에도 계속 점프하는 것을 방지
▪ PlayerController의 점프 처리를 수정해 ‘Y축 방향의 속도가 0(정지하고 있다)일 때만 점프한다’를 구현
플레이어가 화면 밖으로 나가도 끝없이 떨어지는 것을 방지
▪ 플레이어의 Y 좌표가 -10 미만이면 씬의 처음으로 돌아가도록 함
점프 애니메이션을 만들어서 적용하기
▪ Animation 창 왼쪽 위에 있는 드롭다운 목록(이 상태에서는 Walk라고 표시)에서 Create New Clip을 선택하고 애니메이션 클립 이름을 Jump로 입력한 후 Save를 클릭
▪ 반복 재생하지 않도록 Project 창에서 Jump의 애니메이션 클립을 선택하고 Inspector 창에서 Loop Time 체크를 해제

▪ Walk ↔ Jump 관계를 애니메이터 컨트롤러(Animator Controller)에서 설정
▪ Project 창에서 애니메이터 컨트롤러인 cat을 더블클릭
▪ Scene 뷰에 Animator 창이 나타남

▪ Entry에서 Walk 노드로 화살표가 이어져 있고 Walk에서 다른 노드로는 이어져 있지 않음
▪ 먼저 Walk에서 Jump로 전환할 수 있도록 만들어야 함
▪ Walk 노드를 마우스 오른쪽 버튼으로 누르고 MakeTransition을 선택
▪ 마우스 포인터를 움직이면 Walk에 있는 화살표가 늘어나므로 Jump를 클릭
▪ Walk에서 Jump로 화살표가 연결되면서 전환할 수 있음
▪ 같은 방법으로 Jump에서 Walk로 전환할 수 있도록 화살표 연결 해보기

▪ 먼저 Jump에서 Walk로 전환하는 시점을 설정
▪ 여기서는 점프 애니메이션이 끝나면 자동으로 Walk로 전환되도록 설정
▪ Jump에서 Walk로 향하는 전환 화살표를 클릭하고 Inspector 창에서 Has Exit Time을 체크
▪ 이어서 ▶ Settings를 클릭해 세부 사항을 표시하고 Exit Time을 1,Transition Duration과 Transition Offset을 각각 0으로 설정

▪ Walk에서 Jump로 전환하는 시점을 지정
▪ 점프 버튼이 눌린 시점에 Walk에서 Jump로 전환할 수 있도록 전환 화살표 Trigger를 설치
▪ Trigger란 건널목 차단기 같은 것으로 점프 버튼이 눌린 시점에 Trigger를 열어 Walk에서 Jump로 전환
✓ Animator 창 왼쪽 위에 있는 Parameters 탭을 클릭해 염
✓ +를 클릭해 Trigger를 선택
✓ Trigger 이름을 JumpTrigger로 바꿈

▪ Trigger를 작성했으면 전환 화살표에 배치
▪ Walk에서 Jump로 향하는 전환 화살표를 클릭하고 Inspector창에서 전환 조건의 세부 사항을 설정
▪ Conditions 항목의 +를 클릭하고, 표시되는 드롭다운 목록에서 JumpTrigger를 선택(여기서는 JumpTrigger만 표시)
▪ Has Exit Time의 체크를 해제하고 Settings의 Transition Duration과 Transition Offset을 0으로 설정

▪ 점프 버튼이 눌렸을 때 적용할 점프 트리거 스크립트를 PlayerController에 추가
