유니티(Unity)에서 카메라 뷰 오브젝트 확인 함수 및 속성 모음(프러스텀, 렌더러, Bounds, 기타)
Renderer.isVisible
객체 및 렌더러가 카메라의 뷰 프러스트럼(시야 범위) 안에 있는지 확인합니다. 렌더러가 카메라에 의해 보일 때 true를 반환하고 그렇지 않으면 false를 반환합니다. 게임 오브젝트가 화면에 보일 때만 작업을 실행하고 싶을 때 사용
https://docs.unity3d.com/ScriptReference/Renderer-isVisible.html
void Start()
{
m_Renderer = GetComponent<Renderer>();
}
void Update()
{
if (m_Renderer.isVisible)
{
Debug.Log("Object is visible");
}
}
Renderer.OnBecameVisible()
렌더러가 카메라의 뷰 프러스트럼 안에 들어갔을 때 호출되는 함수. 오브젝트가 처음으로 카메라에 보이게 되면 호출. 게임 오브젝트가 화면에 나타났을 때 이벤트 처리에 사용할수있음
void OnBecameVisible()
{
Debug.Log(gameObject.name + " is now visible.");
}
Renderer.OnBecameInvisible()
렌더러가 카메라의 뷰 프러스트럼 밖으로 벗어났을 때 호출됩니다. 오브젝트가 더 이상 카메라에 보이지 않게 되면 호출. 게임 오브젝트가 화면에서 사라졌을 때의 처리에 사용할수있음
void OnBecameInvisible()
{
Debug.Log(gameObject.name + " is no longer visible.");
}
https://docs.unity3d.com/ScriptReference/Renderer.OnBecameInvisible.html?_ga=2.29214844.1568210274.1610360789-247112712.1600397187
GeometryUtility.CalculateFrustumPlanes
카메라의 뷰 프러스트럼을 형성하는 6개의 평면(Planes)을 배열로 반환합니다.
[0] = Left, [1] = Right, [2] = Down, [3] = Up, [4] = Near, [5] = Far
https://docs.unity3d.com/ScriptReference/GeometryUtility.CalculateFrustumPlanes.html
뷰 프러스텀(Frustum)
https://docs.unity3d.com/6000.0/Documentation/Manual/UnderstandingFrustum.html
GeometryUtility.TestPlanesAABB
프러스텀 평면 배열과 축 정렬 바운딩 박스(AABB, Axis-Aligned Bounding Box)를 비교하여 해당 AABB가 카메라의 뷰 프러스트럼 안에 포함되는지 여부를 체크. Bounds가 평면 배열 내부에 있거나 교차하는 경우 true를 반환합니다.
https://docs.unity3d.com/ScriptReference/GeometryUtility.TestPlanesAABB.html
CalculateFrustrumPlanes함수와 함께 사용하여 렌더링 여부와 관계없이 카메라 뷰에 객체가 포함되어 있는지 여부를 확인할수있습니다. 카메라의 프러스텀 평면을 생성하고 타겟 오브젝트의 바운딩 박스(Bounds) 교섭상태를 체크합니다.
void Start()
{
cam = Camera.main;
planes = GeometryUtility.CalculateFrustumPlanes(cam);
objRenderer = GetComponent<Renderer>();
}
void Update()
{
if (GeometryUtility.TestPlanesAABB(planes, objRenderer.bounds))
{
Debug.Log(objRenderer.name + " has been detected!");
}
else
{
Debug.Log("Nothing has been detected");
}
}
Renderer.bounds
월드 공간에서 렌더러의 축 정렬 바운딩 박스(AABB, Axis-Aligned Bounding Box)를 반환합니다(객체를 완전히 둘러싼 바운딩 박스)
Renderer renderer = GetComponent<Renderer>();
Bounds bounds = renderer.bounds;
https://docs.unity3d.com/ScriptReference/Renderer-bounds.html
bounds.center는 Transform.position보다 객체의 중심에 대한 더 정확한 근사치인 경우가 많음
Bounds bounds = renderer.bounds;
Debug.Log( bounds.center);
https://docs.unity3d.com/ScriptReference/Bounds-center.html
Mesh.bounds
Renderer.bounds와 유사하지만 로컬 공간에서의 bounds를 반환
https://docs.unity3d.com/ScriptReference/Mesh-bounds.html
Collider.bounds
물리적 충돌을 감지하는 영역을 정의하기 위한 컴포넌트인 콜라이드의 바운딩 박스를 반환. 충돌 검사와 물리적 상호작용에 사용
Collider collider = GetComponent<Collider>();
Bounds bounds = collider.bounds;
https://docs.unity3d.com/2020.1/Documentation/ScriptReference/Collider-bounds.html
Camera.OnWillRenderObject()
컬링 프로세스 후 현재 카메라에서 객체가 표시된다고 간주되면 호출(객체가 표시되면 각 카메라에 대해 호출)
카메라가 오브젝트 렌더링을 시작하기 직전에 호출되는 이벤트 함수로 객체를 렌더링하는 카메라에 대한 준비 작업을 수행하는데 유용.
https://docs.unity3d.com/ScriptReference/Camera.OnWillRenderObject.html?_ga=2.100567902.1568210274.1610360789-247112712.1600397187
'유니티게임개발 > 기초공부' 카테고리의 다른 글
유니티(Unity) 에디터 색상 테마 변경하기(Dark, Light) (0) | 2024.07.29 |
---|---|
유니티(Unity) 비동기 씬 로드 구현(LoadSceneAscync, AsyncOperation) (0) | 2024.07.29 |
유니티 Baked Ligthing 동영상 튜토리얼 모음(mixed lighting, 라이트맵) (0) | 2024.07.26 |
유니티 실시간 GI(Precomputed GI) (0) | 2024.07.25 |
유니티(Unity) 안드로이드 메니페스트 파일(AndroidManifest.xml) (2) | 2024.07.25 |