본문 바로가기

Unity 19

[Unity] 콜라이더(Collider)

콜라이더(Collider) 콜라이더는 충돌 감지를 위한 컴포넌트 입니다. 콜라이더는 3D 오브젝트를 위한 Box Collider, Capsule Collider, Shpere Collider 등이 있고, 2D 오브젝트를 위한 Box Collider 2D, Polygon Collider 2D, Circle Collider 2D 등이 있습니다. 여기서는 3D 오브젝트를 위한 콜라이더에 대해서만 설명하겠습니다. 콜라이더(Collider) 종류 박스 콜라이더(Box Collider) 박스 콜라이더는 사각형 모양의 콜라이더 이며, 유니티에서 가장 많이 사용하는 콜라이더 입니다. Edit Collider를 클릭하면 콜라이더의 모양을 마우스로 편집할 수 있습니다. 다음 표는 박스 콜라이더의 속성을 정리한 것입니다. ..

·
2020. 3. 5.
·

[Unity] UI 마우스 클릭 이벤트 감지

UI 에서 마우스 클릭 이벤트를 감지하려면 IPointerClickHandler 인터페이스를 구현해야 합니다. IPointerClickHandler 인터페이스는 OnPointerClick(PointerEventData pointerEventData) 메소드를 포함하고 있습니다. PointerEventData는 마우스 클릭 시 클릭 버튼, 클릭 횟수, 포인터 위치 등에 대한 정보를 포함하고 있습니다. MouseClick 스크립트를 생성 한 후 다음과 같은 코드를 작성합니다. using UnityEngine; using UnityEngine.EventSystems; public class MouseClick : MonoBehaviour, IPointerClickHandler { public void OnPo..

·
2020. 2. 19.
·

[Unity] 레이캐스트(Raycast)

레이캐스트는 광선을 쏘는 것을 의미합니다. 여기서는 레이를 쏜다 라고 표현하겠습니다. 레이캐스트를 사용하면 광선에 충돌되는 콜라이더(Collider)에 대한 거리, 위치 등의 자세한 정보를 RaycastHit로 반환합니다. 레이캐스트는 충돌되는 콜라이더를 반환하므로 콜라이더가 없는 게임오브젝트는 충돌을 감지할 수 없습니다. 레이캐스트는 주로 전방에 있는 오브젝트를 검출할 때 사용합니다. 다양한 레이캐스트 함수가 있지만 몇가지만 살펴보겠습니다. Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo) 시작점(origin)과 방향(direction)으로 레이를 쏘는 함수입니다. 시작점과 방향으로 모든 충돌체에 대해 레이를 쏩니다. ..

·
2019. 12. 3.
·

[Unity3D] 게임오브젝트(GameObject) 스내핑(Snapping)

정점 스내핑(Vertex Snapping) 게임오브젝트를 배치할 경우 정확한 사이즈를 알고 있을 경우에는 Transform 속성에 값을 입력해서 배치하면 되지만 마우스를 사용해서 배치하게 되면 정확하게 배치하기가 어렵습니다. 하지만 정점 스내핑 기능을 사용하면 게임오브젝트를 손쉽게 배치할 수 있습니다. 정점 스내핑을 사용하는 방법은 다음과 같습니다. v를 누른 상태에서 원하는 정점에 마우스를 갖다댑니다. 마우스 왼쪽 버튼을 누른 상태에서 배치하고자 하는 다른 정점 옆으로 드래그 합니다. Shift + V로 정점 스내핑 기능의 On/Off를 전환할 수 있습니다. 단위 스내핑(Unit Snapping) 단위 스내핑을 사용하면 Settings에 정의된 단위 거리만큼 게임오브젝트를 배치할 수 있습니다. Edit..

·
2019. 11. 25.
·

[Unity] 트랜스폼(Transform) 크기(Scale)

Transform.lossyScale Transform.lossyScale은 게임오브젝트의 절대적인 크기를 나타냅니다. Transform.lossyScale은 읽기전용(readonly)이기 때문에 게임오브젝트의 절대적인 크기를 설정할 수 없습니다. Transform.lossyScale은 게임오브젝트의 부모 자식 관계에서 자식이 회전했을 경우 크기가 왜곡되기 때문에 유니티에서는 절대적인 크기를 설정할 수 없게 한 것 같습니다. 다음은 Transform.lossyScale의 예제 코드입니다. Debug.Log(transform.lossyScale); Transform.lossyScale으로는 절대적인 크기를 설정할 수 없지만 절대적인 크기를 설정하는 다른 방법이 있습니다. 부모를 null로 설정하고 loca..

·
2019. 11. 25.
·

[Unity] 트랜스폼(Transform) 회전(Rotation)

짐벌락(Gimbal Lock) 먼저 짐벌락을 설명하기 전에 오일러각(Euler angle)에 대해서 이해해야 합니다. 오일러각은 3차원 공간에서 강체가 놓인 방향을 표시하기 위해 도입한 오일러가 도입한 세 개의 각도입니다. x축을 롤(roll), y축을 피치(pitch), z축을 요(yaw)라고도 부릅니다. 오일러각을 이용해서 물체를 회전하다보면 두 축이 한 축으로 되는 현상이 발생합니다. 이를 짐벌락이라고 합니다. 짐벌락은 두 축이 한축으로 되기 때문에 한 축이 제 역할을 못하게 되는 현상입니다. 한 축으로 회전함에도 불구하고 다른 축들이 영향을 받는 이유는 축들이 서로 연결되어있기 때문입니다. 이해를 돕기 위해 예를 들어 보겠습니다. 아래 하이어라키 구조를 보면 x축(빨간색)은 y축(초록색)에 연결되..

·
2019. 11. 21.
·

[Unity] 트랜스폼(Transform) 이동(Move)

유니티 좌표계 프로그램마다 사용하는 좌표계가 다릅니다. 따라서 좌표계에 대해서 이해하는 것은 매우 중요합니다. 유니티에서는 위치를 표현할 때 왼손 좌표계를 이용합니다. X축은 빨간색, Y축은 초록색, Z축은 파란색(RGB순서)으로 표현합니다. Transform.position Transform.position은 게임오브젝트의 절대좌표를 나타냅니다. Transform.position에 Vector3를 대입하면 해당 위치로 이동합니다. 다음은 Transform.position의 예제 코드입니다. transform.position = new Vector3(x, y, z); Transform.localPosition Transform.localPosition은 게임오브젝트의 상대좌표를 나타냅니다. 게임오브젝트의..

·
2019. 11. 19.
·

[Unity3D] 렉트 트랜스폼(Rect Transform) 넓이(Width), 높이(Height) 설정

렉트 트랜스폼(RectTransform)의 넓이(Width), 높이(Height)를 설정하기 위해서는 RectTransform.sizeDelta를 사용합니다. 주의할 점은 렉트 트랜스폼의 anchorMin, anchorMax 값이 같은 경우에만 정확한 넓이, 높이를 설정할 수 있습니다. (Stretch 상태일 경우 넓이, 높이가 정상적으로 설정이 되지 않습니다.) 다음은 렉트 트랜스폼의 사이즈를 설정하는 코드입니다.

·
2019. 11. 12.
·

[Unity3D] MonoBehaviour

MonoBehaviour MonoBehaviour는 유니티 스크립트가 파생되는 기본 클래스 입니다. 게임오브젝트에 스크립트를 추가할 경우 MonoBehaviour를 반드시 상속받아야 합니다. 게임오브젝트에 스크립트를 추가하는 것은 인스턴스를 생성하는 것과 동일합니다. MonoBehaviour 클래스는 널 조건 연산자(Null-conditional operator)와 ?? 연산자를 지원하지 않습니다. MonoBehaviour 클래스에 있는 멤버변수, 메소드를 사용하면 오브젝트가 가지고 있는 컴포넌트에 접근할 수 있습니다. MonoBehaviour 클래스를 상속받는 스크립트를 비활성화 시키면(인스펙터에서 체크박스 해제) Start(), Update(), FixedUpdate(), LateUpdate(), O..

·
2019. 11. 8.
·

[Unity3D] Update(), FixedUpdate(), LateUpdate()

Update Update는 MonoBehaviour 클래스가 제공하는 함수입니다. MonoBehaviour 클래스는 Update(), FixedUpdate(), LateUpdate() 총 3가지의 함수를 제공합니다. Update에 대해 자세히 알아보겠습니다. Update() Update()는 매 프레임마다 호출되는 함수입니다. 컴퓨터의 성능에 따라 Update()가 호출되는 횟수는 다를 수 있으며 호출되는 간격 또한 일정하지 않습니다. Update()는 가장 많이 사용되는 함수로 주로 시간에 따른 동작 구현이나, 키보드 입력 확인, 지속적인 상태 체크 등을 할때 사용됩니다. FixedUpdate() FixedUpdate()는 고정 프레임마다 호출되는 함수입니다. FixedUpdate()가 호출되는 간격은..

·
2019. 11. 1.
·
반응형