Menu
CoddyTech

Invoke

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 21번째.

Invoke("Explode", 3f)는 스크립트 자체의 메서드 Explode를 지금부터 3초 후에 한 번 호출하며, 그 뒤의 코드는 즉시 계속 실행됩니다. 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);라고 작성하세요.

challenge icon

챌린지

쉬움

두 선반 사이의 Platform은 무너지는 플랫폼입니다. Rigidbody가 키네마틱이므로 공중에 떠 있습니다. 해당 플랫폼의 Crumble 스크립트를 작성하세요:

  • 플레이어가 플랫폼에 착지하면 delay초(Inspector에서 1) 동안 기다린 다음 떨어집니다.
  • 떨어지는 동작은 Fall이라는 메서드입니다. 이 메서드는 플랫폼의 물리를 활성화하고(isKinematic = false) Crumble!을 로그로 출력합니다.
  • 플레이어가 플랫폼에 닿기 전까지 플랫폼은 제자리에 머뭅니다.

메서드 이름에는 nameof를 사용하세요. Play를 누르고 방향키로 플랫폼 위를 걸어간 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

public class Crumble : MonoBehaviour
{
    public float delay = 1f;
    Rigidbody body;

    void Start()
    {
        body = GetComponent<Rigidbody>();
    }

    void OnCollisionEnter(Collision collision)
    {
        // 플레이어가 착지하면 delay초 후에 플랫폼이 떨어지게 합니다
    }

    // Fall(): 플랫폼의 물리 기능을 켜고 Crumble!을 로그에 기록합니다
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

물리와 게임플레이의 모든 레슨