Invoke
Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 22번째.
Invoke("Explode", 3f)는 지금부터 3초 뒤에 스크립트 자체의 메서드 Explode를 한 번 호출하며, 그 뒤의 코드는 즉시 계속 실행됩니다. Unity는 문자열로 주어진 이름을 사용해 메서드를 찾으며, 이 메서드는 매개변수를 받지 않습니다. 이 폭탄은 게임이 시작된 뒤 3초 후에 폭발합니다.
void Start()
{
Invoke("Explode", 3f);
}
void Explode()
{
Debug.Log("Boom");
Destroy(gameObject);
}이름이 문자열이므로 컴파일러는 이를 검사할 수 없습니다. Invoke("Explod", 3f)는 컴파일되지만, 3초 뒤 Unity는 폭발하는 대신 Trying to Invoke method: Bomb.Explod couldn't be called.를 로그에 기록합니다. C#의 nameof를 사용하면 이 문제를 해결할 수 있습니다. nameof(Explode)는 컴파일러가 검사한 이름으로 만든 문자열 "Explode"이므로, 그 안에 오타가 있으면 게임을 실행하기 전에 컴파일 오류가 발생합니다. Invoke(nameof(Explode), 3f);라고 작성하세요.
챌린지
쉬움플레이어가 플랫폼에 착지한 직후 플랫폼이 무너지도록 하세요.
OnCollisionEnter에서collision.gameObject.CompareTag("Player")일 때Invoke(nameof(Fall), delay);를 호출하세요.void Fall()을 추가하세요.body.isKinematic = false;로 설정하고Crumble!을 로그로 출력하세요.
‘플레이’를 누르고 플랫폼 위로 걸어가세요. 1초 뒤 플랫폼이 떨어집니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
public class Crumble : MonoBehaviour
{
public float delay = 1f;
Rigidbody body;
void Start()
{
body = GetComponent<Rigidbody>();
}
void OnCollisionEnter(Collision collision)
{
// 플레이어가 착지하면: delay초 후에 플랫폼이 떨어지게 합니다
}
// Fall(): 플랫폼의 물리 기능을 활성화하고 Crumble!을 로그에 기록합니다
}
물리와 게임플레이의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드