GridLayoutGroup
이 포넌트는 UI 요소들을 그리드 형식으로 정렬하는 데 사용
주로 2D UI 개발에서 사용되며, 버튼, 이미지, 텍스트 등의 UI 요소들을 규칙적인 그리드에 배치하는 데 유용
- 셀 크기(Cell Size): 각 셀의 너비와 높이를 설정. 이는 그리드 내의 개별 요소들이 차지하는 공간의 크기를 결정
- 간격(Spacing): 셀 사이의 수평 및 수직 간격을 정의. 값을 조정함으로써 셀들 사이의 공간을 늘리거나 줄일 수 있다.
- Start Corner: 그리드의 시작점을 정의. 예를 들어, 'Upper Left'로 설정하면 그리드는 왼쪽 상단 모서리에서 시작하여 오른쪽 및 아래쪽으로 확장.
- Start Axis: 셀이 채워지는 축을 결정. 'Horizontal'로 설정하면 셀이 수평으로 먼저 채워지고, 'Vertical'로 설정하면 셀이 수직으로 먼저 채워진다.
- Constraint: 이 설정을 통해 그리드의 열 또는 행 수를 제한할 수 있다. 예를 들어, 'Fixed Column Count'를 설정하고 열의 수를 3으로 지정하면, 그리드는 항상 3열로 구성.
클래스 간의 종속성과 코드의 가독성
예시
- 종속성(Dependency): Inventory 클래스는 ItemSlot 타입의 객체를 사용. C#에서는 사용되는 클래스나 타입이 코드에서 먼저 정의되거나 알려져 있어야 한다. 따라서 ItemSlot 클래스가 Inventory 클래스보다 먼저 정의되어야 Inventory 클래스 내에서 ItemSlot 타입을 문제없이 사용할 수 있다.
- 가독성(Readability): 일반적으로, 작은 클래스나 도우미 클래스(helper class)를 먼저 정의하고, 이를 사용하는 더 큰 클래스나 메인 클래스를 나중에 정의. 이렇게 하면 코드를 읽는 사람이 각 클래스의 역할과 관계를 더 쉽게 이해할 수 있다.
- 코드 구조(Code Structure): Unity와 C# 개발에서는 종종 관련된 클래스들을 동일한 파일에 배치. 이렇게 함으로써 관련된 기능들을 한 곳에서 관리할 수 있어 유지보수가 용이.
적 생성과 로직 - 핵심내용
AI 네비게이션(AI Navigation)
AI 네비게이션(AI Navigation)은 인공지능이 게임이나 시뮬레이션 등 가상 환경에서 이동하는 방법을 결정하는 기술이다. 주로 3D 게임에서 캐릭터나 NPC가 지능적으로 이동하도록 만들어진다.
이를 위해 AI 네비게이션 시스템은 지형, 장애물, 목표 지점 등을 고려하여 적절한 경로를 생성하고 이동하는데 사용된다.
- Navigation Mesh (네비게이션 매쉬):
- 3D 공간을 그리드로 나누어 이동 가능한 지역과 장애물이 있는 지역을 구분하는 매쉬
- 캐릭터가 이동할 수 있는 영역과 이동할 수 없는 영역을 정의하고, 이를 기반으로 경로를 계산
- Pathfinding (경로 탐색):
- 캐릭터의 현재 위치에서 목표 지점까지 가장 적절한 경로를 찾는 알고리즘
- 주로 A* 알고리즘 등이 사용되며, 지정된 목표 위치까지 최단 경로를 탐색
- Steering Behavior (스티어링 동작):
- 캐릭터나 NPC가 경로를 따라 이동할 때, 보다 자연스러운 동작을 구현하는데 사용
- 동적으로 캐릭터의 이동 방향과 속력을 조정하여 부드럽고 현실적인 이동을 시뮬레이션
- Obstacle Avoidance (장애물 피하기):
- 캐릭터가 이동 중에 장애물과 충돌하지 않도록 하는 기술
- 각종 센서나 알고리즘을 사용하여 장애물을 감지하고 피하는 동작을 수행
- Local Avoidance (근접 회피):
- 여러 캐릭터나 NPC가 서로 충돌하지 않도록 하는 기술
- 캐릭터들 사이의 거리를 유지하거나 회피 동작을 수행하여 서로 부딪히지 않도록 한다.
OnClick 이벤트와 GameObject.SetActive
UI 인터랙션과 게임 오브젝트의 활성화/비활성화를 관리하는 데 매우 흔한 방법
GameObject.SetActive 메서드
- SetActive 메서드는 게임 오브젝트의 활성화 상태를 변경
- 이 메서드는 bool 값을 매개변수로 받아, true로 설정하면 오브젝트를 활성화하고, false로 설정하면 비활성화
- 활성화된 오브젝트는 화면에 보이고, 모든 컴포넌트가 작동. 반대로, 비활성화된 오브젝트는 화면에서 사라지고, 모든 컴포넌트가 비활성화
ScriptableObject
유니티에서 데이터를 저장하고 관리하기 위한 특별한 유형의 클래스
클래스는 MonoBehaviour와 달리 게임 오브젝트에 붙일 필요가 없으며,
주로 데이터를 모듈화하고, 재사용 가능하며, 쉽게 관리할 수 있도록 설계
간단예시
using UnityEngine;
// 스크립터블 오브젝트 클래스 정의
[CreateAssetMenu(fileName = "NewGameSettings", menuName = "Game Settings", order = 1)]
public class GameSettings : ScriptableObject
{
public string gameName;
public int maxPlayers;
public float gameTime;
}
// 스크립터블 오브젝트 사용 예
public class GameManager : MonoBehaviour
{
public GameSettings settings;
void Start()
{
Debug.Log("Game Name: " + settings.gameName);
Debug.Log("Max Players: " + settings.maxPlayers);
Debug.Log("Game Time: " + settings.gameTime);
}
}
- GameSettings 클래스는 ScriptableObject를 상속. 이 클래스는 게임 설정 데이터를 저장하기 위해 사용
- CreateAssetMenu 어트리뷰트를 사용하여 유니티 에디터에서 새로운 GameSettings 객체를 쉽게 생성
- GameManager 클래스는 GameSettings 인스턴스를 참조하여 그 안에 저장된 데이터에 접근
- Start 메서드에서 GameSettings의 데이터를 로그로 출력
앵커(Anchor)
역할은 UI 요소의 위치와 크기를 부모 컨테이너에 대해 상대적으로 정의하는 것
- 앵커 포인트: 앵커 포인트는 UI 요소가 부모 컨테이너의 어느 위치에 기준을 두고 배치될지 결정. 예를 들어, 앵커를 부모의 왼쪽 상단에 설정하면, UI 요소는 화면 크기가 변해도 항상 부모의 왼쪽 상단에 위치.
- 위치와 크기 조정: 앵커는 부모 컨테이너의 크기 변화에 따라 UI 요소의 위치와 크기가 어떻게 조정될지 결정. 예를 들어, 모든 모서리에 앵커를 설정하면 부모 컨테이너의 크기에 따라 UI 요소의 크기가 자동으로 조정
- 반응형 디자인: 다양한 화면 크기와 해상도에서 UI 요소가 올바르게 보이도록 하기 위해 앵커를 사용. 예를 들어, 태블릿과 스마트폰에서 동일한 UI를 사용할 때, 앵커 설정을 통해 각 화면에 맞게 UI 요소가 조정
- 편집기에서의 사용: 유니티 편집기에서는 RectTransform 컴포넌트를 통해 UI 요소의 앵커를 쉽게 설정할 수 있다. 이를 통해 드래그 앤 드롭으로 간단하게 앵커 포인트를 조정할 수 있다.
'TIL' 카테고리의 다른 글
12.26 (TIL-Unity3D) (0) | 2023.12.26 |
---|---|
12.22 (TIL-코딩문제) (1) | 2023.12.22 |
12.20 (TIL - Unity) (1) | 2023.12.20 |
12.19 (TIL-Unity3D) (0) | 2023.12.19 |
12.18 (TIL-코딩문제) (1) | 2023.12.18 |