유니티 숙련 (3) - 서바이벌 강의 완강, 새로 배운 내용 정리
1. activeSelf VS activeInHierarchy
둘 다 GameObject 클래스의 get만 존재하는 프로퍼티로 활성화 여부를 나타내는 bool 값을 가져올 수 있습니다.
둘의 값은 다른 의미를 가지는데 아래와 같습니다.
1) activeSelf
GameObject 자기 자신의 활성화 상태
2) activeInHierarchy
부모 오브젝트의 활성화까지 포함하여 실제 씬에서 활성화 상태
예를 들어,
부모가 비활성화. 자신은 활성화 상태에서 자신에게 해당 두 구문을 찍어보면
activeSelf = true,
activeInHierarchy = false
2. 충돌체가 충돌하지 않고 뚫고 지나가는 경우
인스펙터의 리지드바디 컴포넌트에서 옵션 둘을 조정해봅시다.
1) Interpolate(보간)
2) Collision Detection(충돌 감지)
드롭다운의 아래쪽일수록 연산을 더 촘촘하게 하기에
충돌하지 않고 쑥 빠져나가는 경우는 줄어들게 되지만 그만큼 연산량이 늘어나게 됩니다.
만들고 있는 프로젝트에 맞게 적절하게 사용해야 합니다.
보통 총알, 낙하물 등에는 위의 스크린샷 정도의 설정이면 충돌 감지에 충분하다고 합니다.
3. NavMesh.SamplePosition
네비매시에 포함된 메서드로 장애물을 고려한 주변 랜덤 위치를 반환합니다.
게임을 보면 몬스터, 심볼 등이 주변의 랜덤한 위치를 배회하는 것을 많이 쓰는데
네비매시를 사용할 때 이를 손쉽게 구현하게 하기 위해 해당 기능이 있습니다.
<< 참고 매뉴얼 >>
https://docs.unity3d.com/6000.1/Documentation/ScriptReference/AI.NavMesh.SamplePosition.html
4. Random
강의에서 다른 Random 파생 함수를 쓰기에 궁금해서 공부해 보았습니다.
보통 0~1 사이의 값을 뽑는 함수는 범위 값을 곱하여 범위 안 랜덤을 만들어 씁니다.
1) Random.Value()
0~1 사이 랜덤 부동소숫점
2) Random.Range(a, b)
a, b 사이 랜덤(a,b의 데이터 타입 int/float 형에 따라 랜덤 결과값의 데이터 타입도 동일)
3) Random.insideUnitCircle
반지름이 1인 가상의 원의 내부에서 랜덤한 점
4) Random.insideUnitSphere
반지름이 1인 가상의 구를 생성하여 그 내부에서 랜덤한 점
5) Random.onUnitSphere
반지름이 1인 가상의 구를 생성하여 그 표면에서 랜덤한 점
6) Random.rotation
랜덤 회전각
7) Random.ColorHSV
랜덤 색상
그 외 아래 링크에서 가중치에 따른 랜덤 뽑기 방법에 대한 내용도 있었습니다.
해당 내용은 이미 구현해 보았기에 따로 쓰지는 않겠습니다.
그래도 애니메이션 커브를 사용한 기법은 인상적이었습니다.
https://docs.unity3d.com/kr/2022.3/Manual/class-Random.html
중요 클래스 - Random - Unity 매뉴얼
Random 클래스는 흔히 요구되는 다양한 타입의 랜덤 값을 쉽게 생성할 수 있는 방법을 제공합니다.
docs.unity3d.com