- 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을 이용하여 여러개로 나누면 클래스가 두개로 나눠졌을 뿐 모든 데이터를 공유 하고 있다.
즉, 분할된 파일이 하나로 작동하는 것이다.
[C#] sealed class (상속 금지)와 partial class
클래스를 상속하는 이유는 같은 코드의 작성을 피해서 재사용성을 높이는 이유로 쓰인다. 그러나 상속 관계의 클래스 구조를 잡다보면 너무 복잡해질수도 있고 상속을 하므로써 상위 클래스를
wonseok1112.tistory.com
(참고 자료)
'Unity' 카테고리의 다른 글
[Unity] Addressable 사용해보기 (0) | 2023.10.30 |
---|