본문 바로가기
유니티

Day 28 - OnBecameInvisible 메서드(화면을 벗어난 총알 제거)

by shin0707 2024. 5. 17.
728x90

  • 주제

>>OnBecameInvisible 메서드(화면 밖 총알제거, 화면 밖 총알 풀링 후 재사용)


  • 공부내용

1. OnBecameInvisible 메서드란?

Unity의 MonoBehaviour 클래스에서 제공하는 특별한 메서드로,

게임 오브젝트의 렌더러가 카메라 밖으로 나가면 자동으로 호출된다.

(스크립트 내에서 명시적으로 호출하지 않아도 됨)

 

2. OnBecameInvisible 역할

오브젝트가 화면 밖으로 나갔을 때, 특정 동작을 수행하도록 처리한다.

예를 들어, 오브젝트를 비활성화 시킨다거나, 재사용을 위해 위치를 이동시킬 수 있다.

 

3. 화면을 벗어난 총알 제거 스크립트

-Bullet.cs를 총알 오브젝트에 추가하여 사용

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
	private void OnBecameInvisible()
	{
		//화면 밖으로 나간 총알 파괴
		Destroy(gameObject);
	}
}

 

4. 총알이 화면을 벗어나면 풀로 반환하여 재사용하는 스크립트

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
    private void Update()
    {
        // 총알이 화면 밖을 벗어나면 풀로 반환
        if (IsOutOfView())
        {
            BulletPool.instance.ReturnBullet(gameObject);
        }
    }

    private bool IsOutOfView()
    {
        Vector2 bulletPosition = transform.position;
        Vector2 min = Enemy.instance.CameraViewPointMin();
        Vector2 max = Enemy.instance.CameraViewPointMax();

        return bulletPosition.x < min.x || bulletPosition.x > max.x ||
               bulletPosition.y < min.y || bulletPosition.y > max.y;
    }

    private void OnBecameInvisible()
    {
        BulletPool.instance.ReturnBullet(gameObject);
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        // 플레이어와 충돌 시, 총알 풀로 반환
        if (collision.gameObject.CompareTag("Player"))
        {
            BulletPool.instance.ReturnBullet(gameObject);
        }
    }
}
728x90
반응형