표시 및 숨기기
Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 67개 중 34번째.
SetActive(false)는 전체 GameObject를 비활성화합니다. 오브젝트가 그려지지 않고, 더 이상 충돌하지 않으며, 오브젝트에 연결된 스크립트는 Update() 호출을 받지 않고, 자식 오브젝트도 함께 비활성화됩니다. SetActive(true)는 모든 것을 다시 활성화하고, activeSelf는 오브젝트가 활성화되어 있는지 알려줍니다. 버튼에 연결된 이 스크립트는 마우스를 클릭하면 door 필드의 문을 숨깁니다:
public GameObject door;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
door.SetActive(false);
}
}gameObject.SetActive(false)를 사용해 자기 오브젝트를 숨기는 스크립트는 해당 오브젝트를 다시 활성화할 수 없습니다. Update()가 더 이상 실행되지 않기 때문입니다. 따라서 스위치는 표시하거나 숨길 오브젝트에 대한 참조를 가지고 있는 다른 오브젝트에 있어야 합니다.
enabled는 하나의 컴포넌트만 비활성화하고 나머지 오브젝트는 그대로 둡니다. GetComponent<Renderer>().enabled = false는 오브젝트를 보이지 않게 만들지만, 콜라이더는 여전히 다른 오브젝트를 막습니다. 즉, 보이지 않는 벽이 됩니다. enabled = false인 스크립트는 더 이상 Update() 호출을 받지 않지만, 오브젝트는 씬에 남아 계속 그려지고 충돌도 유지하며, 다른 컴포넌트도 계속 작동합니다.
챌린지
중급Lever의 스크립트는 bridge 필드에 Bridge를 저장합니다. Space 키로 다리를 작동시키세요. 처음 누르면 다리가 숨겨지고, 다음에 누르면 다시 나타나는 식으로, 누를 때마다 한 번씩 전환됩니다.
콜라이더를 포함해 다리 전체를 숨겨서, 존재하지 않는 다리 위에 아무도 설 수 없게 하세요.
Play를 누르고 Space 키를 몇 번 누른 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
public class BridgeSwitch : MonoBehaviour
{
public GameObject bridge;
void Update()
{
// Space를 누르면 다리가 숨겨지고, 다시 누르면 다리가 나타납니다
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.