Unity
Unity의 Collision에 관하여
Unity의 Collision은 두 Collider가 충돌했을 때 발생하는 이벤트입니다. Collision 이벤트는 다음과 같은 정보를 제공합니다. 충돌한 GameObject의 Collider 충돌 지점 충격량 상대적인 선 속도 Rigidbody Transform Collider Collider는 물리 엔진에 의해 충돌을 처리하는 데 사용되는 컴포넌트입니다. Collider에는 다음과 같은 종류가 있습니다. BoxCollider: 상자 모양의 Collider SphereCollider: 구 모양의 Collider CapsuleCollider: 원통 모양의 Collider MeshCollider: 메시를 사용하여 정의하는 Collider Contacts Contacts는 물리 엔진에 의해 생성되는 물체 간..
두 Collider의 충돌을 무시하는 방법
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에서 Collider가 있는 두 오브젝트가 충돌하면 일반적으로 물리법칙에 따라 서로 밀거나 튕겨나가는 동작을 합니다. 하지만, 다음과 같은 경우에 Collider가 있는데도 충돌했을 때 물리법칙을 따르지 않는 경우가 있습니다. Collider의 Rigidbody가 없는 경우 Collider는 물리적 상호 작용을 처리하는 Rigidbody와 함께 사용해야 합니다. Rigidbody가 없는 Collider는 물리적 상호 작용을 처리할 수 없으므로, 충돌했을 때 물리법칙을 따르지 않는 경우를 만들 수 있습니다. 물체가 너무 빨리 움직여 충돌을 놓친 경우 물체가 한 프레임 사이에 너무 큰 거리를 이동하여 충돌을 감지하지 못하는 경우입니다. 이를 해결하기 위해서는 Rigidbody 컴포넌트의 Interp..
Unity의 PointEventData 클래스
Unity의 PointEventData 클래스는 터치 또는 마우스 입력 이벤트에 대한 정보를 저장하는 클래스입니다. 이 클래스는 InputModule 클래스에 의해 사용되며, InputModule 클래스를 통해 터치 또는 마우스 입력 이벤트에 대한 정보를 얻을 수 있습니다. PointEventData 클래스의 속성 PointEventData 클래스는 다음과 같은 속성을 가지고 있습니다. position: 터치 또는 마우스 포인터의 위치 clickCount: 클릭 횟수 clickTime: 클릭 시간 delta: 터치 또는 마우스 포인터의 이동량 dragging: 터치 또는 마우스 포인터가 이동 중인지 여부 button: 터치 또는 마우스 버튼 phase: 터치 또는 마우스 이벤트의 단계 pointerId:..
간단하게 오브젝트 간의 각도 구하는 방법
이전 게시글에서 내각을 이용해 두 물체간의 각도를 구하는 방법에 대해서 설명했습니다. 이번 글에서는 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에서 오브젝트의 위치나 방향을 부드럽게 이동시키는 방법은 여러 가지가 있습니다. 그 중에서도 Lerp, SmoothDamp, MoveTowards 메서드는 가장 많이 사용되는 방법입니다. 이 세 가지 메서드는 모두 오브젝트의 현재 위치 또는 방향에서 목표 위치 또는 방향으로 부드럽게 이동시킵니다. 하지만 각각의 메서드에는 고유한 특징과 사용 방법이 있습니다. Lerp Lerp 메서드는 "선형 보간"을 의미하며, 두 개의 벡터 사이에서 선형적으로 보간된 값을 반환합니다. 시작 벡터와 목표 벡터, 그리고 보간 비율을 인자로 받습니다. 이 메서드는 주어진 비율에 따라 시작 벡터와 목표 벡터 사이에서 보간된 값을 반환합니다. Vector3 newPosition = Vector3.Lerp(currentP..
헷갈리는 오브젝트 회전 방법 Part 2 (Lerp, Slerp, RotateTowards)
Quaternion.Lerp() Quaternion.Lerp() 메서드는 두 쿼터니언 사이의 선형 보간을 수행합니다. 이는 두 점 사이를 직선으로 연결하는 것과 유사합니다. 이 방법은 보간 속도가 일정하기 때문에 빠르지만, 이러한 선형 보간은 짧은 거리에서는 잘 작동하지만 긴 거리에서는 비현실적으로 보일 수 있습니다. Quaternion.Lerp() 메서드의 구문은 다음과 같습니다. Quaternion.Lerp(Quaternion from, Quaternion to, float t); // from 시작 쿼터니언 // to 목표 쿼터니언 // t 보간 비율 0 - 1 Quaternion.Lerp() 메서드는 다음과 같이 작동합니다. 시작 쿼터니언과 종료 쿼터니언의 차이를 구합니다. 차이를 보간 비율 (t..
시야 범위에 타켓 오브젝트가 들어와 있는지 확인하는 방법
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..