파괴하기
Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 67개 중 52번째.
Destroy(obj)는 자식을 포함해 GameObject를 씬에서 제거합니다. 두 번째 인수로 지연 시간을 지정할 수 있습니다. Destroy(obj, 2f)는 2초 후에 제거하며, 이를 호출한 스크립트는 즉시 계속 실행됩니다. 이 대포는 Space 키를 누르면 발사되고, 발사한 각 탄환은 2초 후에 사라집니다.
public GameObject bulletPrefab;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GameObject bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
Destroy(bullet, 2f);
}
}프리팹이 아니라 복사본을 전달하세요. Destroy(bulletPrefab)은 Destroying assets is not permitted to avoid data loss.라는 메시지와 함께 거부됩니다. 그리고 객체를 의미할 때는 GameObject를 전달하세요. 스크립트 안에서 gameObject는 스크립트가 붙어 있는 객체이므로, Destroy(gameObject)는 해당 객체를 제거하지만 Destroy(this)는 스크립트만 제거하고 객체는 그대로 남깁니다.
Destroy는 즉시 실행되지 않습니다. Unity는 현재 프레임의 끝, 해당 프레임의 Update() 및 LateUpdate() 호출이 끝난 뒤 객체를 제거하므로, Destroy 뒤의 코드 줄도 계속 실행되며 프레임이 끝날 때까지 객체를 찾을 수 있습니다.
챌린지
중급Chute는 매초 동전을 하나씩 떨어뜨립니다. 이 부분은 이미 작성되어 있습니다. 다음과 같이 변경하세요:
- 각 동전은 나타난 지 3초 후에 사라집니다. 따라서 한 번에 동전이 3개를 초과하지 않습니다.
- Space를 누르면 투입구 자체가 파괴되어 더 이상 동전이 나오지 않습니다. 이미 나온 동전은 제시간에 사라집니다.
Play를 누르고 몇 초 동안 지켜본 다음, Space를 누르고 Check를 누르세요.
직접 해보기
using UnityEngine;
public class CoinChute : MonoBehaviour
{
public GameObject coinPrefab;
public float interval = 1f;
float timer;
void Update()
{
timer += Time.deltaTime;
if (timer >= interval)
{
Instantiate(coinPrefab, transform.position, Quaternion.identity);
timer -= interval;
}
// Space: 슈트를 파괴
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.