Unity Physics.Overlap

용준·2024년 2월 26일
0

Unity

목록 보기
11/19
  • Physics.Overlap은 범위 내 콜라이더를 반환하는 메서드입니다.
    레이어의 정보만 반환할 수도 있고,특정 범위안에 있는 충돌체들을 감지하는데 주로 사용합니다.
    반환값은 Collider 컴포넌트의 배열이며 알아놓으면 매우 다양한 곳에서 활용 가능하다고 합니다.

Overlap 중 Sphere를 사용해 간단한 기능을 만들어보면...

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

public class HideBehavior : MonoBehaviour
{
    public Collider[] CurrentCubes;

    Collider[] cubesInsideZone;
    Collider[] cubesOutsideZone;

    private void FixedUpdate()
    {
        cubesInsideZone = Physics.OverlapSphere(this.transform.position, 10f);

        EnableHide(cubesInsideZone, false);

        cubesOutsideZone = CurrentCubes.Except(cubesInsideZone).ToArray();

        EnableHide(cubesOutsideZone, true);
    }

    private void EnableHide(Collider[] cubes, bool enable)
    {
        foreach (var cube in cubes)
        {
            cube.GetComponent<MeshRenderer>().enabled = enable;
        }
    }
    
    private void OnDrawGizmos()
    {
        Gizmos.DrawWireSphere(this.transform.position, 10f);
    }
}
  • Collider[] CurrentCubes : 인스펙터창에서 배열에 등록할 게임 오브젝트 (편의에 따라 Find 함수를 사용해도 됩니다.)
  • Collider[] cubesInsideZone / cubeOutsideZone : 해당 범위 내에 들어가거나 나오는 오브젝트를 배열로 받아올 Collider 컴포넌트의 변수
  • EnableHide 함수 : Collider 배열 변수에 등록된 오브젝트들의 MeshRenderer 컴포넌트에서 Mesh를 활성화하거나 비활성화합니다.
  • OnDrawGizmos 함수 : OverlapSphere의 파라미터에서 사용하는 중점은 자기 위치로부터 반지름 10f 만큼의 원을 만드는데, 이 범위를 씬뷰에서도 확인할 수 있게 같은 크기 반지름의 원의 기즈모를 그려줍니다.

콜라이더를 적용한 오브젝트(HideBehavior)의 인스펙터 창에서 적용받을 큐브들을 드래그해 배열에 등록해줍니다.

결과:

이 배열에 등록되지 않은 오브젝트들은 OverlapSphere가 스칠 때 오브젝트가 제거되므로 주의해야 합니다.
이 곳을 참조했습니다.

0개의 댓글