Polygon (폴리곤)mesh, vertex, 삼각형을 사용한다ex)
같은 네모 모양 3D Object Plane과 Quad의 연산량의 차이가 있는 이유
Plane의 폴리곤 수가 많은것을 확인할 수 있다Plane은 크기가 커질수록 정점의 수도 증가하게 된다Plane : 주로 바닥이나, 지형에 사용
Quad : 창문에 사용


드로우 콜 : GPU -> CPU로 이 오브젝트를 그려달라는 요청

참고: https://chlee200530.tistory.com/168
2D : 스프라이트 아틀라스 (Sprite Atlas)
3D : 정적 배칭 (Static Batching)
3D : 동적 배칭 (Dynamic Batching)
📌 충돌처리를 하기 위해서는 충돌 할 게임 오브젝트들에
collider컴포넌트 추가, 한쪽에는 무조건Rigidbody컴포넌트 필요
스크립트가 들어간 게임 오브젝트가 상대 게임 오브젝트와 충돌했을 경우, 호출되는 이벤트 함수이다
-> 매개변수로 들어오는 값은 충돌 된 오브젝트
-> Trigger도 동일하다
Rigidbody를 사용한 이동과 transform을 사용한 이동의 차이점Rigidbody : 물리 기반의 움직임을 구현할 때 사용된다. 물리적인 힘, 충력, 충돌 효과로 객체가 이동하게 됨 - Rigidbody 컴포넌트가 연결된 게임 오브젝트의 위치를 나타내는 Vector3의 값
Transform : 객체가 물리 엔진에 영향을 받지 않으며, 직접적인 좌표 변경을 통해 이동한다 (순간적으로 위치를 바꿈) - 게임 오브젝트의 위치를 나타내는 Vector3의 값
-> transform.position으로 오브젝트를 이동하는 경우, 모든 콜라이더들이 리지드 바디의 위치들을 재계산하여 갱신한다
-> rigidbody.position으로 이동하는 것이 빠르다
이동하는 물체는
rigidbody과collider를 넣어주자 (성능 굳)

Rigidbody 컴포넌트를 참조하여, 위치값을 바꾸는 Rigidbody.position 사용예시
게임 오브젝트의 물리적인 상호작용을 처리하기 위해 사용되는 컴포넌트이다
충돌을 감지하고 반응할 수 있고, 물리 충돌에 필수적인 역할
콜라이더의 종류는 다양하게 있으니, 게임 오브젝트에 맞는 형태를 선택하는 것이 좋다


mesh(모델)의 형태를 따라가는 콜라이더
복잡한 형태의 모델을 사용하는 객체에 적합하다

Convex를 체크하면 메쉬가 잘 보인다 (삼각형)

Collision 이벤트 함수해당 스크립트(컴포넌트)가 부착된 게임 오브젝트를 기준으로 호출되는 것
-> 매개변수로 들어온 collision이 충돌된 상대 오브젝트를 의미
서로 충돌하면서 물리적인 이동이 발생
-> 발생하지 않게 하려면 프로퍼티의 Freeze를 체크하자

OnCollisionEnterOnCollisionStayOnCollisionExitCollision collision 의미충돌한 오브젝트의 정보, 충돌 위치, 물리적 데이터 등을 포함한다 ex) gameObject, Transform, rigidbody 등
private void OnCollisionEnter(Collision collision)
{
// OnCollisionEnter
// 게임 오브젝트가 물리적인 충돌을 했을 때
// 호출되는 이벤트 함수입니다.
Debug.Log("OnCollisionEnter");
if (collision.gameObject.CompareTag("Obstacle"))
{
Debug.Log(collision.gameObject.name);
}
}
private void OnCollisionStay(Collision collision)
{
// OnCollisionStay
// 게임 오브젝트가 물리적인 충돌 중일 때
// 호출되는 이벤트 함수입니다.
Debug.Log("OnCollisionStay");
if (collision.gameObject.CompareTag("Obstacle"))
{
Debug.Log(collision.gameObject.name);
}
}
private void OnCollisionExit(Collision collision)
{
// OnCollisionExit
// 게임 오브젝트가 물리적인 충돌을 벗어났을 때
// 호출되는 이벤트 함수입니다.
Debug.Log("OnCollisionExit");
if (collision.gameObject.CompareTag("Obstacle"))
{
Debug.Log(collision.gameObject.name);
}
}
CompareTag게임 오브젝트를 분류하고 식별하는 데 사용되는 문자열
인스펙터 창에서 태그 추가 & 지정 가능


Tag는 string 자료형으로, Tag == "SomeTag"를 사용하면 비교 하는 대상의 문자열을 복사하여 매번 비교하기 때문에 복사비용 발생!!

CompareTag()
복사 비용 없이 최적화된 성능을 유지
성능상 유리하다
원본은 bool 자료형으로, 매개변수로 넣은 값이 맞다면 true



참고로만 알아두자 (물리엔진을 꺼버리는 기능)
-> 물리엔진은 연산량이 많이들어간다
-> 그래서 유니티 내에서 자체적으로 판단하고 끄는 경우가 있다
참고 : https://m.blog.naver.com/wolf5160/222539513751


Trigger 이벤트 함수게임 오브젝트의 isTrigger가 체크되어 있어야 한다
두 오브젝트 중 하나에만 체크가 되어있어도 되기 때문에, 주로 배치되어 있는 오브젝트에 체크한다 (이동안하는거)
Trigger는 물리적인 충돌을 하지 않고, 단순 충돌 감지만 알려준다
→ isTrigger가 체크되어있는 오브젝트의 콜라이더와 충돌했는지를 감지 (물리적 충돌x)


private void OnTriggerEnter(Collider other)
{
// OnTriggerEnter
// 게임 오브젝트가 물리적이지 않은 충돌을 했을 때
// 호출되는 이벤트 함수입니다.
Debug.Log("OnTriggerEnter");
}
private void OnTriggerStay(Collider other)
{
// OnTriggerStay
// 게임 오브젝트가 물리적이지 않은 충돌 중일 때,
// 호출되는 이벤트 함수입니다.
Debug.Log("OnTriggerStay");
}
private void OnTriggerExit(Collider other)
{
// OnTriggerExit
// 게임 오브젝트가 물리적이지 않은 충돌을 벗어났을 때
// 호출되는 이벤트 함수입니다.
Debug.Log("OnTriggerExit");
}
Tunneling) 현상주로 물리 엔진을 사용하는 게임에서 발생하는 문제로, 물체가 너무 빠르게 이동하거나 충돌을 처리할 때 충돌을 무시하거나 지나쳐버리는 현상
두 게임 오브젝트에 콜라이더가 부착되어있고, 물리 충돌이 일어났지만, 너무 빨라서 뚫고 지나가는 현상

-> 근데 보통은 그렇게 까지 빠르게 이동하는 게임 오브젝트는 없기 때문에 자세히는 다루지 않겠다 (나중에)