전체 글
Unity 카메라의 뷰포트를 설정하여 원하는 시야를 만들자
Unity 카메라는 게임의 시각을 담당하는 중요한 요소입니다. 카메라의 뷰포트 설정을 통해 원하는 시야를 만들 수 있습니다. 이 글에서는 Unity 카메라의 뷰포트 설정에 대해 알아보겠습니다. 뷰포트 영역 뷰포트 영역은 카메라가 렌더링하는 영역을 설정하는 옵션입니다. 값은 0과 1 사이의 비율로 표현되며, (0, 0, 1, 1)은 전체 화면을 의미합니다. 뷰포트 영역을 사용하여 카메라의 특정 부분만을 표시하거나, 여러 개의 카메라를 사용하여 분할 화면 효과를 만들 수 있습니다. 예를 들어, 다음과 같이 뷰포트 영역을 설정하면 카메라는 화면의 중앙 25%만을 표시합니다. [SerializeField] private RectTransform m_ViewportRect; void OnEnable() { m_V..
Camera : Orthographic과 Perspective
Unity 카메라에는 두 가지 투영 방식이 있습니다. Orthographic 투영 방식과 Perspective 투영 방식입니다. Orthographic 투영 방식은 객체의 거리와 상관없이 동일한 크기로 렌더링합니다. 즉, 가까운 객체와 먼 객체의 크기가 동일합니다. 이러한 투영 방식은 2D 게임이나 2.5D 게임에서 주로 사용됩니다. Perspective 투영 방식은 객체의 거리에 따라 크기가 달라집니다. 즉, 가까운 객체는 크고, 먼 객체는 작게 렌더링됩니다. 이러한 투영 방식은 3D 게임에서 주로 사용됩니다. Orthographic 투영 방식의 Size 옵션 Orthographic 투영 방식의 Size 옵션은 렌더링 영역의 크기를 결정합니다. Size 값이 클수록 렌더링 영역이 커집니다. 예를 들어,..
Animator State Transition : Has Exit Time
Has Exit Time이란?? Has Exit Time은 Animator의 설정 중 하나로, 애니메이션 전환이 끝나기 전에 트랜지션을 할지 여부를 결정하는 옵션입니다. 이 옵션을 사용하면 특정 애니메이션 클립이 플레이어에 의해 완전히 재생된 후에만 트랜지션을 수행할 수 있습니다. Has Exit Time이 true로 설정된 경우 애니메이션은 지정된 시간 동안 실행된 후 자동으로 종료됩니다. Has Exit Time이 false로 설정된 경우 애니메이션은 플레이어의 입력이나 다른 이벤트에 의해 종료될 때까지 계속 실행됩니다. 이 옵션을 사용하는 이유는 애니메이션 클립이 완전히 재생되기 전에 트랜지션되면 자연스럽지 않은 전환 현상이 발생할 수 있기 때문입니다. 예를 들어, 캐릭터의 걷기 애니메이션 클립이 ..
C# 비트 연산 : enum을 flag로 활용하는 방법
C#에서 enum은 여러 개의 값을 한 번에 표현할 수 있는 유용한 기능입니다. 하지만, enum을 flag로 사용하려면 몇 가지 제약이 있습니다. enum의 값은 정수여야 합니다. enum의 값은 0부터 시작해야 합니다. 이러한 제약을 해결하기 위해 C#에는 [Flags] 애트리뷰트가 제공됩니다. [Flags] 애트리뷰트를 사용하여 enum을 flag로 사용할 수 있도록 설정할 수 있습니다. 애트리뷰트 설정하기 애트리뷰트를 설정하려면 enum에 다음과 같은 [Flags] 애트리뷰트를 추가하면 됩니다. [Flags] enum MyFlags { None = 0, Flag1 = 1, Flag2 = 2, Flag3 = 4, } 이렇게 하면 MyFlags enum은 0부터 시작하는 정수 값을 갖게 됩니다. 또한..
오브젝트 파괴 시 OnDestroy 이벤트 함수가 호출되지 않을 수 있다??
Unity에서 GameObject를 삭제하면 OnDestroy 메서드가 호출됩니다. OnDestroy 메서드는 GameObject가 삭제되기 전에 실행되는 메서드로, GameObject의 자원 해제, 데이터 저장 등의 작업을 수행하는 데 사용됩니다. 하지만, OnDestroy 메서드의 호출은 보장되지 않습니다. 즉, GameObject가 삭제되더라도 OnDestroy 메서드가 호출되지 않을 수도 있습니다. 공식문서의 설명을 보면 MonoBehaviour를 상속 받는 객체가 파괴 될 때 호출된다고 적혀 있습니다. 이 글을 보시는 분들은 다들 이 부분은 알고 계실것이라 생각합니다. 그 아래에 중요한 내용이 적혀 있는데 OnDestroy는 이전에 활성화되어있던, 게임 오브젝트상에서만 호출됩니다. 즉, 호출이 ..
월드 공간 지점을 스크린상의 지점으로 변환 : WorldToScreenPoint
Unity에서 WorldToScreenPoint 메서드는 월드 공간의 지점을 스크린 공간의 지점으로 변환하는 데 사용됩니다. public Vector3 WorldToScreenPoint(Vector3 position) position : 월드 공간의 지점입니다. 이 메서드는 다음과 같은 스크린 공간의 지점을 반환합니다. 스크린 공간의 x좌표는 worldPoint의 x좌표와 카메라의 LookAt 방향의 x좌표의 비율에 해당합니다. 스크린 공간의 y좌표는 worldPoint의 y좌표와 카메라의 LookAt 방향의 y좌표의 비율에 해당합니다. 예제 다음은 WorldToScreenPoint 메서드를 사용하는 예제입니다. // 월드 공간의 좌표 (0, 0, 1)을 스크린 공간의 지점으로 변환합니다. Vector3..
화면 위치에 해당하는 Ray 생성 : Camera.main.ScreenPointToRay
Unity에서 Camera.main.ScreenPointToRay 함수 사용하기 Unity에서 카메라의 시야에 있는 스크린 상의 점을 광선으로 변환하는 데 사용되는 함수가 Camera.main.ScreenPointToRay입니다. 이 함수는 다음과 같은 인수를 사용합니다. screenPoint : 스크린 상의 점의 좌표입니다. worldUp : 카메라의 월드 업 벡터입니다. 이 함수는 다음과 같은 반환 값을 가집니다. ray : 스크린 상의 점을 나타내는 광선입니다. 사용 예제 void Update() { // 스크린 상의 점을 가져옵니다. Vector3 screenPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition); // 스크린 상의 점을 광선으로..
C#에서 class와 struct의 차이점
C#에서 class와 struct는 모두 데이터와 함수를 포함하는 사용자 정의 데이터 형식입니다. 하지만 두 형식에는 몇 가지 중요한 차이점이 있습니다. class와 struct의 주요 차이점 특징 class struct 크기 객체 헤더와 데이터로 구성되어 있어 일반적으로 struct보다 크기가 큽니다. 데이터로만 구성되어 있어 일반적으로 class보다 크기가 작습니다. 포인터 객체는 포인터를 통해 참조됩니다. 구조체는 값으로 전달됩니다. 참조 투명성 객체의 값을 수정하면 참조하는 모든 객체의 값이 수정됩니다. 구조체의 값을 수정하면 원본 구조체의 값만 수정됩니다. 상속 class는 상속을 지원합니다. struct는 상속을 지원하지 않습니다. 포함 class는 다른 class를 포함할 수 있습니다. st..