Unity의 Collision에 관하여
·
Unity
Unity의 Collision은 두 Collider가 충돌했을 때 발생하는 이벤트입니다. Collision 이벤트는 다음과 같은 정보를 제공합니다. 충돌한 GameObject의 Collider 충돌 지점 충격량 상대적인 선 속도 Rigidbody Transform Collider Collider는 물리 엔진에 의해 충돌을 처리하는 데 사용되는 컴포넌트입니다. Collider에는 다음과 같은 종류가 있습니다. BoxCollider: 상자 모양의 Collider SphereCollider: 구 모양의 Collider CapsuleCollider: 원통 모양의 Collider MeshCollider: 메시를 사용하여 정의하는 Collider Contacts Contacts는 물리 엔진에 의해 생성되는 물체 간..
두 Collider의 충돌을 무시하는 방법
·
Unity/Tip
Unity의 Physics.IgnoreCollision 메서드는 두 Collider 간의 충돌을 무시하도록 설정합니다. public static void IgnoreCollision(Collider colliderA, Collider colliderB, bool ignore); //Parameters //colliderA: 충돌을 무시할 첫 번째 Collider //colliderB: 충돌을 무시할 두 번째 Collider //ignore: 충돌 감지 여부, 기본값은 true 예제 Collider collider1 = gameObject.GetComponent(); Collider collider2 = otherObject.GetComponent(); // 충돌을 무시합니다. Physics.IgnoreC..
Unity에서 Collider 충돌처리가 되지 않을 경우
·
Unity/Tip
Unity에서 Collider가 있는 두 오브젝트가 충돌하면 일반적으로 물리법칙에 따라 서로 밀거나 튕겨나가는 동작을 합니다. 하지만, 다음과 같은 경우에 Collider가 있는데도 충돌했을 때 물리법칙을 따르지 않는 경우가 있습니다. Collider의 Rigidbody가 없는 경우 Collider는 물리적 상호 작용을 처리하는 Rigidbody와 함께 사용해야 합니다. Rigidbody가 없는 Collider는 물리적 상호 작용을 처리할 수 없으므로, 충돌했을 때 물리법칙을 따르지 않는 경우를 만들 수 있습니다. 물체가 너무 빨리 움직여 충돌을 놓친 경우 물체가 한 프레임 사이에 너무 큰 거리를 이동하여 충돌을 감지하지 못하는 경우입니다. 이를 해결하기 위해서는 Rigidbody 컴포넌트의 Interp..
Unity의 PointEventData 클래스
·
Unity
Unity의 PointEventData 클래스는 터치 또는 마우스 입력 이벤트에 대한 정보를 저장하는 클래스입니다. 이 클래스는 InputModule 클래스에 의해 사용되며, InputModule 클래스를 통해 터치 또는 마우스 입력 이벤트에 대한 정보를 얻을 수 있습니다. PointEventData 클래스의 속성 PointEventData 클래스는 다음과 같은 속성을 가지고 있습니다. position: 터치 또는 마우스 포인터의 위치 clickCount: 클릭 횟수 clickTime: 클릭 시간 delta: 터치 또는 마우스 포인터의 이동량 dragging: 터치 또는 마우스 포인터가 이동 중인지 여부 button: 터치 또는 마우스 버튼 phase: 터치 또는 마우스 이벤트의 단계 pointerId:..
간단하게 오브젝트 간의 각도 구하는 방법
·
Unity
이전 게시글에서 내각을 이용해 두 물체간의 각도를 구하는 방법에 대해서 설명했습니다. 이번 글에서는 Vector3.SignedAngle() 함수를 이용해 시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 방법을 설명하겠습니다. Vector3.SignedAngle() 함수 Vector3.SignedAngle() 함수는 두 벡터의 방향 사이의 각도를 구하는 함수입니다. 이 함수는 부호가 있는(-180 ~ 180)각도를 반환합니다. float SignedAngle(Vector3 from, Vector3 to, Vector3 axis) //from: 시작 벡터 //to: 목표 벡터 //axis: 회전 축 벡터 이 함수는 두 벡터 from과 to의 방향 사이의 각도를 axis를 기준으로 계산하며, 결과값은 부호..
Vector3 : Lerp, SmoothDamp, MoveTowards 비교
·
Unity
Unity에서 오브젝트의 위치나 방향을 부드럽게 이동시키는 방법은 여러 가지가 있습니다. 그 중에서도 Lerp, SmoothDamp, MoveTowards 메서드는 가장 많이 사용되는 방법입니다. 이 세 가지 메서드는 모두 오브젝트의 현재 위치 또는 방향에서 목표 위치 또는 방향으로 부드럽게 이동시킵니다. 하지만 각각의 메서드에는 고유한 특징과 사용 방법이 있습니다. Lerp Lerp 메서드는 "선형 보간"을 의미하며, 두 개의 벡터 사이에서 선형적으로 보간된 값을 반환합니다. 시작 벡터와 목표 벡터, 그리고 보간 비율을 인자로 받습니다. 이 메서드는 주어진 비율에 따라 시작 벡터와 목표 벡터 사이에서 보간된 값을 반환합니다. Vector3 newPosition = Vector3.Lerp(currentP..
헷갈리는 오브젝트 회전 방법 Part 2 (Lerp, Slerp, RotateTowards)
·
Unity
Quaternion.Lerp() Quaternion.Lerp() 메서드는 두 쿼터니언 사이의 선형 보간을 수행합니다. 이는 두 점 사이를 직선으로 연결하는 것과 유사합니다. 이 방법은 보간 속도가 일정하기 때문에 빠르지만, 이러한 선형 보간은 짧은 거리에서는 잘 작동하지만 긴 거리에서는 비현실적으로 보일 수 있습니다. Quaternion.Lerp() 메서드의 구문은 다음과 같습니다. Quaternion.Lerp(Quaternion from, Quaternion to, float t); // from 시작 쿼터니언 // to 목표 쿼터니언 // t 보간 비율 0 - 1 Quaternion.Lerp() 메서드는 다음과 같이 작동합니다. 시작 쿼터니언과 종료 쿼터니언의 차이를 구합니다. 차이를 보간 비율 (t..
시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 방법
·
Unity
Unity 오브젝트의 시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 방법은 여러 가지가 있습니다. 그 중 하나인 두 오브젝트의 내적을 구하고, 라디안(π)을 호도각(0~360°)으로 변환시켜 사용하는 방법을 소개하겠습니다. 내적이란? 내적은 두 벡터의 크기와 방향의 일치 정도를 나타내는 값으로 Vector3.Dot() 메서드를 통해 구할 수 있습니다. A⋅B=∣A∣⋅∣B∣⋅cos(θ) 여기서 ∣A∣와 ∣B∣는 각각 벡터 A와 B의 크기(길이)이고, θ는 A와 B 사이의 각입니다. 내적의 결과는 스칼라값입니다. public static float Dot(Vector3 lhs, Vector3 rhs) => (float) ((double) lhs.x * (double) rhs.x + (double) lh..