- Unity, C#의 내가 자주 사용하고 유용하다고 느낀 기능들을 정리해보았다.
1. Debug.Assert
Debug.Assert(조건, "메세지"); 로 이루어져 있다.
앞의 조건이 False라면 오류 메세지를 표시하는 것이다.
보통 예상 가능한 버그가 일어나는 것을 방지하기 위해 코드 앞에 써준다.
코드 부분마다 일일이 Null체크를 할 필요 없이 앞에 Debug.Assert만 해줘도 유용하게 쓸 수 있다.
그리고 또 좋은점이 Debug.Assert는 빌드 시 제외된다. 따라서 성능 면에서 좀 더 좋다.
2. Conditional Attribute
[Conditional("심볼값")] 으로 이루어져 있다.
using System.Diagnostics; 을 써서 사용할 수 있다
[Conditional(" ... ")]
private void 함수() {}
이렇게 함수와 같이 쓴다.
따옴표 안에 있는 심볼값이 현재 상황에 맞다면 아래의 함수를 실행시켜준다.
예를 들어, [Conditional(" UNITY_EDITOR ")] 이라면, 이 어트리뷰트 아래 있는 함수는 에디터에서만 사용할 수 있는 것이다.
앞서 설명했던 Debug.Assert를 코드마다 일일이 사용하면 중복 코드가 많아질 것이다. 따라서 내용이 같은 Assert들은 한 함수에 저장해서 그 함수를 호출하는식으로 실행 해준다고 가정해보겠다. 여기서 문제가 생긴다. Debug.Assert의 장점은 빌드시 제외된다는 것인데, 일반 함수 안에 있으면 그 함수는 빌드시 제외되지가 않아서 성능 면의 장점이 무시된다.
따라서 이를 해결하기 위해 Conditional 어트리뷰트를 사용하여 UNITY_EDITOR를 인자값으로 주어, 에디터에서만 실행되는 함수를 만들 수 있다.
3. IReadOnlyList<> (불변 컬렉션)
읽기 전용 컬렉션. 특정 컬렉션을 말 그대로 읽기 전용으로 만들어주는 키워드인데, 한번 정의한 컬렉션의 불변성을 보장하고 싶을 때 사용한다.
일반 프로퍼티처럼 사용할 때 이걸 붙여준다.
4. Collider.ClosestPoint()
오브젝트 간의 거리를 구할때, 보통 콜라이더를 사용해서 구한다. 여기서 콜라이더가 캐릭터에 캡슐 콜라이더로 달려있다고 쳤을 때, 이걸로 거리를 구하면 그 콜라이더의 중심값으로 계산한다. 상관 없는 경우도 있지만, 정확한 거리를 구해야 하는 상황에서는 보통 ClosestPoint함수를 사용한다.
ClosestPoint(Vector3) 는 매개변수로 넘겨준 Vector3값과 가장 가까운 콜라이더의 표면의 위치를 반환해준다.
5. params (가변 인자 매개변수)
개수의 제한 없이 매개변수를 넘길 수 있게 해주는 초강력 키워드이다.
void Method(params 자료형[] 이름) 이렇게 사용한다.
배열과 연계해서 사용하면 아주아주 유용한데, 예시를 들어보겠다.
public void SetItems (int[] items)
{
foreach (var item in items)
{
Console.WriteLine(item);
}
}
private void Start()
{
PrintParams(new int[] { 1, 2, 3, 4, 5 });
}
여기서 매개변수쪽에 params 키워드를 사용한다면, 배열을 통째로 넘겨주지 않고,
public void SetItems (params int[] items) // <- params 키워드 사용
{
foreach (var item in items)
{
Console.WriteLine(item);
}
}
private void Start()
{
PrintParams(1, 2, 3);
}
그냥 자료형에 맞는 값 자체를 직접 하나하나씩 넘겨줄 수 있다. 몇개를 넘길지도 내가 정할 수 있어서 매우 편리한 키워드인것같다.
6. partial class
클래스를 여러개로 분할할수 있게 해주는 키워드
한 클래스를 분할하여 같이 작업할수 있어 협업에 유리하다.
partial class PartialExample : MonoBehaviour
{
int a = 10;
private void Start()
{
Debug.Log($"{a}, {b}");
}
}
partial class PartialExample : MonoBehaviour
{
int b = 5;
}
이런식으로 같은 이름의 클래스를 partial을 이용하여 여러개로 나누면 클래스가 두개로 나눠졌을 뿐 모든 데이터를 공유 하고 있다.
즉, 분할된 파일이 하나로 작동하는 것이다.
(참고 자료)
'Unity' 카테고리의 다른 글
[Unity] Addressable 사용해보기 (0) | 2023.10.30 |
---|