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
반응형
'유니티' 카테고리의 다른 글
Day 30 - Rigidbody ForceMode 와 Raycast (0) | 2024.05.24 |
---|---|
Day 29 - 락 오브젝트(동기화작업 / 코루틴이나 잡시스템과 사용 가능) (0) | 2024.05.23 |
Day 27 - 플레이어를 둘러싼 적 생성(Mathf.Cos & Mathf.Sin) (0) | 2024.05.16 |
Day 26 - Player Input System을 이용한 이동 및 점프 구현 (2) | 2024.05.14 |
Day 25 - 아크탄젠트(마우스 위치로 회전, 총알 발사 방향 설정 등) (0) | 2024.05.13 |