ScriptableObject
- ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너이다.
- ScriptableObject의 주요 사용 사례 중 하나는 값의 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄이는 것이다.
- 이는 연결된 MonoBehaviour 스크립트에 변경되지 않는 데이터를 저장하는 프리팹이 있는 프로젝트의 경우 유용하다.
- https://docs.unity3d.com/kr/2022.3/Manual/class-ScriptableObject.html
ScriptableObject - Unity 매뉴얼
ScriptableObject는 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너입니다. ScriptableObject의 주요 사용 사례 중 하나는 값의 사본이 생성되는 것을 방지하
docs.unity3d.com


위와같이 new Item으로 데이터를 만들어줘서 입력해주고 여러가지로 활용할 수 있다.
Random.value는 0.0에서 1.0 사이의 임의의 부동 소수점 수를 제공한다.
일반적인 사용법은 해당 결과를 곱하여 0과 선택한 범위 사이의 숫자로 변환하는 것이다.
ex)
Quaternion.Euler(Vector3.one * Random.value * 360)
애니메이션에 이벤트를 넣을때 했던 실수
계속 이렇게 나와서 왜 이런지 몰랐다.
애니메이션이 실행되는 해당 오브젝트를 클릭 후 이벤트를 누르면 인스펙터창이 위와 같이 변하는데 Function에 실행시키려는 메서드를 넣어주면 된다.
네비게이션패키지를 설치하고 window창 들어가면 아래와 같이 나온다.
위와 같이 다 이동가능한지 아닌지 설정하고 Bake에서 Bake를 눌러주면 위와같이 Scene이 바뀐다.
이건 Show NavMesh를 통해서 씬에서 보이거나 안보이게 할 수 있다.
나무와 같은 장애물들은 Nav Mesh Obstacle을 오브젝트에 넣어주면 된다.
Nav Mesh Obstacle
1. 내비게이션 시스템에서 AI가 피해야 할 장애물을 설정하는 컴포넌트
2. AI가 장애물을 피하도록 설정, Nav Mesh Agent가 장애물과 충돌하지 않고 우회
3. 정적, 동적 장애물 지원, 움직이는 장애물에도 설정 가능
4. NavMesh를 실시간으로 변경 가능, AI가 장애물을 인식하고 경로를 재설정함
5. AI가 특정 오브젝트를 피하도록 쉽게 설정 가능
Nav Mesh Agent
1. AI 캐릭터가 NavMesh 위에서 자동으로 이동하고, 장애물을 피하며 경로를 찾아가도록 도와주는 컴포넌트
2. 플레이어를 쫒아가거나, 특정위치로 이동하는 AI를 손쉽게 구현가능
3. 자동경로 탐색, 목적지까지 최적의 경로를 찾아 이동함
4. Nav Mesh Obstacle을 자동으로 피해감
5. AI 속도, 회전 속도, 정지 여부 등 조절 가능
6. 애니메이션 연동 가능
7. 계단, 경사로 등을 자연스럽게 이동
NavMesh.SamplePosition
NavMesh.SamplePosition(Vector3 sourcePosition, out NavMeshHit hit, float maxDistance, int areaMask)
1. sourcePosition : 기준이 되는 위치 (이 위치를 중심으로 NavMesh 위의 가장 가까운 점을 찾음)
2. out hit : 검색 결과를 저장하는 변수 (hit.position이 가장 가까운 NavMesh 위치)
3. maxDistance : sourcePosition에서 NavMesh를 검색할 최대 거리 (이 거리 내에서만 찾음)
4. areaMask : 어떤 NavMesh 영역(Areas) 에서 찾을지 지정 (모든 영역을 포함하려면 NavMesh.AllAreas 사용)
사용이유
1. 잘못된 목표 위치로 인한 SetDesination() 오류 방지
2. 장애물이나 언덕 등으로 인해 AI가 갈수 없는 위치를 자동 보정
3. 특정 NavMesh 구역만 탐색 가능
4. NavMesh 바깥 위치를 NavMesh위로 보정
NavMesh.CalculatePath
1. AI가 목적지까지 이동 가능한지 사전에 확인
2. 장애물이나 지형 문제로 인해 도달할 수 없는 경우를 감지
3. 플레이어 또는 다른 AI가 경로를 차단했을 때 대체 경로를 찾기 위한 용도
4. AI가 특정 경로를 따라 이동하도록 직접 제어할 때
NavMeshAgent.SetDestination
1. AI가 NavMesh 위에서 자동으로 목적지까지 이동하도록 할 때 사용
2. AI가 플레이어를 쫒거나, 특정 지점으로 가도록 만들때 유용
3. 경로 탐색과 장애물 회피를 자동으로 처리하므로 AI 이동을 쉽게 구현 가능
4. 목적지가 NavMesh위에 없으면 이동하지 않음
5. 이동이 멈추지 않는 경우 isStopped 체크해야함
Random.onUnitSphere
1. AI가 무작위 방향으로 이동할때 좋음
2. 특정 거리 내에서 랜덤 위치를 얻기 위해 사용
3. 반지름이 1인 구 표면 위에 랜덤한 점을 반환(벡터 크기가 항상 1)
4. 크기가 1 이라 방향만 결정됨
5.여기에 거리를 곱하면 랜덤한 거리까지 이동이 가능하다.
'개발 TIL' 카테고리의 다른 글
내일배움캠프TIL 31일차 트러블 슈팅 (0) | 2025.03.07 |
---|---|
내일배움캠프TIL 30일차 트러블슈팅 및 구조 (0) | 2025.03.06 |
내일배움캠프 28일차 TIL 배운 내용 정리 (0) | 2025.03.04 |
내일배움캠프 27일차 TIL 프로젝트 마무리 및 배운내용 정리 (0) | 2025.02.28 |
내일배움캠프 26일차 TIL 트러블 슈팅 (0) | 2025.02.27 |