update() 필드는 1프레임마다 실행되므로 물체를 60f만큼 회전하는 기능을 update()내에 구현한다면 1프레임마다 60f 만큼 회전함.
이를 해결하기 위해 회전값을 프레임의 역수로 나눠야 함 -> 60f * Time.deltaTime.
timeText와recordText는Text타입으로 선언되어 있습니다. 만약 Unity UI Text가 아니라 TextMeshPro를 사용하는 경우라면 타입이 맞지 않아 문제가 생길 수 있습니다.
using TMPro;를 추가하고 Text 타입을 TMP_Text로 변경해야 합니다.-> 기존에 선언한 변수의 타입은 Text 인데, TextMeshPro를 사용했으니 알맞은 변수 타입으로 선언해줬어야 했다.
Animator - Inspector - Has Exit Time
`Animator - Inspector - Transition Duration
전환 지속시간은 전이가 이루어지는 동안 현재 애니메이션 클립과 다음 애니메이션 클립을 섞어(블랜딩) 부드럽게 이어주는 역할을 한다.
0.2로 세팅되었을 때, 현재 동작과 다음 동작의 애니메이션 클립이 0.2초동안 섞여 부드럽게 이어진다.
하지만 2D 스프라이트를 사용한 애니메이션 클립에서는 전환 지속 시간 동안의 블렌딩이 정상적으로 동작하지 않고 전이 시점만 지연된다. -> 캐릭터의 관절이 존재하지 않기 때문. 따라서 3D 프로젝트에 주로 사용된다.
private void OnCollisionEnter2D(Collision2D collision) {
// 바닥에 닿았음을 감지하는 처리
if (collision.contacts[0].normal.y > 0.7f)
{
isGrounded = true;
jumpCount = 0;
}
}
OnCollision 계열의 충돌 이벤트 메서드는 여러 충돌 정보를 담는 Collision 타입의 데이터를 입력받는다. Collision 타입은 충돌 지점들의 점보를 담는 ContactPoint 타입의 데이터를 contacts라는 배열 변수로 제공한다. 따라서 contacts 배열의 길이는 충돌 지점의 개수와 일치한다.
collision.contacts[0]은 두 물체 사이의 여러 충돌 지점중에서 첫 번째 충돌 지점의 정보를 가져온 것이다.
normal.y > 0.7f 왜 굳이 0.7일까0.7은 일반적으로 적당한 경사(약 45도 이하)까지 바닥으로 간주할 수 있는 타협점으로서 사용됨. 어떤 변수를 static으로 선언하면 여러 오브젝트가 해당 변수 하나를 공유한다. 정적 선언된 변수는 해당 타입의 오브젝트를 몇 개를 생성하든 그 수에 상관없이 메모리에 하나만 존재한다.
매번 새로운 오브젝트를 생성하면 오브젝트 수가 계속 늘어나기 때문에 메모리 사용량이 계속 증가한다.
오브젝트 풀링 방식을 사용하면 이러한 문제를 해결 가능.
예제에서는 보이지 않는 게임 화면 바깥에 오브젝트들을 미리 만드는 방식을 취하고 있음.