OnEnable과 OnDisable
Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 67개 중 57번째.
OnEnable()은 스크립트가 활성화될 때마다 실행됩니다. 오브젝트가 처음 나타날 때(Awake() 직후)와 SetActive(true)로 오브젝트를 다시 표시할 때마다, 또는 enabled = true로 스크립트를 다시 켤 때 실행됩니다. OnDisable()은 오브젝트가 숨겨질 때마다, 스크립트가 꺼질 때마다, 또는 오브젝트가 파괴될 때 실행됩니다.
다른 스크립트가 SetActive로 열고 닫는 포털은 다음과 같이 자체 상태를 기록할 수 있습니다.
void OnEnable()
{
Debug.Log("Portal open");
}
void OnDisable()
{
Debug.Log("Portal closed");
}씬이 시작되면 포털은 Portal open을 기록합니다. 포털을 숨겼다가 다시 표시하면 Portal closed 다음에 Portal open이 기록되지만, Awake()와 Start()는 두 번째로 실행되지 않습니다. 따라서 타이머 초기화나 방문 횟수 세기처럼 나타날 때마다 실행해야 하는 코드는 OnEnable()에 넣습니다. 포털이 숨겨져 있는 동안에는 포털의 Update()가 실행되지 않습니다. 그래서 다른 오브젝트에 있는 스크립트가 포털을 열고 닫습니다.
챌린지
중급Switchable 스크립트는 Player와 처음에는 숨겨져 있는 방패인 Bubble에 있습니다. Player에서 target은 Bubble이며, Space를 누르면 Bubble이 켜지고 꺼집니다. 이 부분은 이미 작성되어 있습니다.
각 Switchable이 자기 상태를 보고하도록 만드세요.
- 켜질 때마다 카운트를 1씩 늘리고, 대괄호 안에 이름,
on, 카운트를 기록하세요. 예:Bubble on (2); - 꺼질 때마다 이름과
off를 기록하세요:Bubble off.
게임이 시작되면 Player도 켜지므로 Player on (1)을 기록합니다. Play를 누르고 Space를 몇 번 누른 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class Switchable : MonoBehaviour
{
public GameObject target;
void Update()
{
if (target != null && Input.GetKeyDown(KeyCode.Space))
{
target.SetActive(!target.activeSelf);
}
}
// 이 객체가 켜질 때마다 횟수를 세고 "<name> on (<count>)"을 로그에 기록하세요
// 이 객체가 꺼질 때마다 "<name> off"를 로그에 기록하세요
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.