목차
유니티 숙련 챕터 마무리
오늘은 꼭!! 이번 챕터 강의를 다 듣고 마무리 해야지!!!
AI 네비게이션
NPC나 캐릭터가 가상 환경에서 지능적으로 이동할 수 있도록 만드는 기술로, 주로 3D 게임에서 활용된다.
네비게이션 메쉬 (Navigation Mesh)
이동 가능한 영역과 불가능한 영역을 나누는 3D 메쉬
경로 탐색의 기반이 되는 구조로, Unity에서는 NavMesh로 제공됨
경로 탐색 (Pathfinding)
A* 알고리즘 등을 통해 캐릭터의 현재 위치에서 목적지까지 최적의 경로를 계산
목표 지점까지의 이동 경로를 찾는 핵심 로직
스티어링 동작 (Steering Behavior)
캐릭터가 경로를 따르면서도 자연스럽게 이동하도록 조정
이동 방향, 속도를 동적으로 계산하여 부드러운 동작 유도
장애물 피하기 (Obstacle Avoidance)
이동 중 장애물과 충돌하지 않도록 회피하는 로직
센서나 충돌 감지를 통해 동적으로 대응
근접 회피 (Local Avoidance)
다수의 캐릭터 간 충돌 방지
군중 속에서도 캐릭터들이 유기적으로 움직이도록 회피 알고리즘 적용
Nav Mesh Obstacle Component

네비게이션 경로상에 장애물로 작용하도록 만드는 컴포넌트이다.
AI가 경로를 계산할 때 이 오브젝트를 피해서 우회하도록 유도한다.
- Carve: 장애물이 NavMesh에 구멍을 뚫는 효과를 냄. (움직이는 장애물일 경우 이걸 켜야 AI가 실시간으로 경로를 재계산함)
- Shape: Box 또는 Capsule 형태 중 선택 가능
- Center/Size: 장애물의 위치와 크기 조절
- Carve Only Stationary: 움직이지 않을 때만 NavMesh를 갱신하게 할지 여부. 움직이는 오브젝트라면 비활성화해야 더 정확한 회피가 된다.
Nav Mesh Agent Component

AI 캐릭터가 NavMesh 위에서 자동으로 경로를 탐색하고 이동하게 해주는 컴포넌트이다.
목표 지점까지 최적 경로를 따라 움직이며, 장애물 회피 등도 자동으로 수행한다.
- Destination: 이동 목표 지점 (예: agent.destination = target.position;)
- Speed: 이동 속도
- Angular Speed: 회전 속도 (도/초 단위)
- Acceleration: 가속도, 정지 상태에서 최대 속도까지 도달하는 속도
- Stopping Distance: 목표 지점에 어느정도 거리까지 접근하면 멈출지 설정
- Auto Braking: 목표 지점에 가까워지면 자동으로 감속할지 여부
- Obstacle Avoidance: 장애물 회피를 위한 품질 설정 (Low ~ High)
- Auto Traverse OffMeshLink: 점프 등 특수한 경로를 자동으로 이동할지 여부
- Update Position / Rotation: Transform 위치/회전을 NaveMeshAgent가 직접 갱신할지 여부
NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>();
agent.destination = target.position;
}
주의사항
NavMeshAgent와 NaveMeshObstacle을 같은 GameObject에 동시에 붙이면 충돌이 생긴다.
움직이는 장애물을 만들고 싶을 때는 두 컴포넌트를 토글하는 방식으로 처리해야한다.
NavMesh가 베이크되지 않은 곳에서는 이동할 수 없다.
객체지향 프로그래밍 특강 2회차
필기는 접은글!!
GoF의 디자인패턴 에서 몇가지를 뽑아서 볼겁니다.
guru design patterns <사이트 참고
이전의 코드를 모르면 장점이 보이지 않는다.
디자인패턴! 몰라도 객체지향적 설계 가능하다.
우리는 이미 Prototype, Facade, Composite 패턴 들을 쓰고 있었다.
객체 지향의 핵심은 의존도, 결합도를 줄이는 것.
동시 작업을 했을 때 서로의 코드에 영향을 주지 않도록 작업하는 것도 고려해야한다.
Prototype: 프리팹이 프로토타입 기반으로 만들어졌음.
Bridge: Shape과 Color 속성을 갖는 객체들을 Shape과 Color로 나누어 서로 연결하는 것을 말하는 듯. 다양한 몬스터 이동, 공격 패턴 만들때 유용. 탐색, 이동, 공격을 인터페이스로 나눠서 적용할 수 있다.
탐색해서 적이 검출되면 이동한다. 가까워지면 공격한다 <라고 추상적으로 짜놓으면,
탐색을 어떻게 할지, 이동을 어떻게 할지, 공격을 어떻게 할지는 추상부를 상속 받은 구현부에서 구현하면 된다.
Facade: 플레이어라는 Facade 안에다가 각 기능을 넣어두는 느낌.
Player안에 Controller, Condition, 등등 들어가 있는.
Fleyweight
Observer >
Strategy
Builder
Singleton
Composite: 컴포넌트들.
State
TemplateMethod: Bridge 패턴과 매우 유사. (인터페이스와 추상클래스를 잘 활용하는 것에서 출발했다는 점에서)
어떻게 하면 else if를 줄이지? switch를 줄이지??
Q. 브릿지는 여러 파츠를 섞어서 하나에 넣고 쓴다고 템플릿은 각 영할을 하는 거를 따로 만드는 건가요? A. 맞다.
분기점을 없애는 데 목적을 두는 것.
Command
불필요한 생성 => 생성패턴 사용
불필요한 탐색/정렬 => 구조패턴 사용
불필요한 연산/조건문 => 행위패턴 사용
파생클래스보단 base 클래스
구현 클래스보단 추상화된 클래스/인터페이스를 캐싱하는 것을 목적으로.
UI쪽에서 활용 많이 됨.
모든 패턴은 SOLID를 지켰을까?
아니다. 예: 싱글톤: 이거 다 의존/결합 아닌가?
결국에는 효율을 따져야한다.
앞으로는
State
Decorator
Command
Object Pooling
Dirty Flag
InfiniteScroll
Behavior Tree
들을 배울겁니다.
미치겠다. 최종까지 5주도 안남음..!!
느낀점
도핑이 끝난 것 같다...
근 2~3주 동안은 12시간을 알차게 가득 채워서 진행했었는데 요즘은 절반도 집중하지 못하는 것 같다.
재미있어서 도파민 돌면서 하다가 그게 잠잠해지니 살짝 번아웃 느낌처럼 집중력이 덜해진 것 같다.
내일 학습 할 것은 무엇인지
개인과제 시작 잠깐하고
'부트캠프 > 본캠프' 카테고리의 다른 글
| [내일배움캠프_2025AUG12] 개인 과제, 챌린지반 특강 Delegate (0) | 2025.08.12 |
|---|---|
| [내일배움캠프_2025AUG11] 개인 과제 시작 (0) | 2025.08.11 |
| [내일배움캠프_2025AUG07] 유니티 숙련 챕터 (0) | 2025.08.07 |
| [내일배움캠프_2025AUG06] 유니티 숙련 챕터 시작 (0) | 2025.08.06 |
| [내일배움캠프_2025AUG05] 팀 프로젝트 발표! (0) | 2025.08.05 |