오늘의 코드카타
공 이동 시뮬레이션
- 범위 기반 시뮬레이션
- LV3 - 22% (복습 필요)
-> 문제 풀이
오늘의 공부
팀 프로젝트 진행 내용
1. AI가 공격받았을 때, 화남 상태 전환이 안 됨
- AI가 공격받는 상태가 되면 Angry State로 변환이 되고, 해당 ability를 우선적으로 실행시키기를 원함
- 하지만 Angry State로 변환은 되나, Behavior Tree에서 이미 다른 노드를 실행하고 있기 때문에 Angry State에서 ability 실행이 무시가 되고 없던 일이 되어버림
- Decorator : Blackboard에서 별도로 설정이 필요함 + Behavior Tree의 우선순위를 가장 최상위에 둬야 함


- Notify Observer
- 언제 해당 Decorator를 재평가할지 여부를 정하는 설정
On Value Change : Blackboard Key가 변할 때 노드를 재평가
On Result Change(Default) : 가져온 컨디션의 결과가 변할 때만 노드를 재평가(nullptr이 되면 재평가)
-> 중간에 Blackboard Key가 Angry가 되면 중간에 끊고 들어가야 되기 때문에 On Value Changed로 설정
- Observer Aborts
- 관찰자 중단으로 다른 브랜치 실행을 끊고, 새 브랜치로 넘어가게 하는 설정
None : 아무것도 안 함
Self : 이 Decorator가 붙은 자신의 브랜치만 끊음
Lower Priority : 자기보다 우선순위 낮은 브랜치들을 끊음
Both : Self + Lower Priority 둘 다 끊음
-> 다른 노드랑 공격을 다시 받았을 시에도 화를 다시 내게 하기 위해서 Both로 설정
2. 아이템 구조 설계
- AI 개발이 의도한만큼 완료되었기 때문에 아이템 개발을 맡기로 했다.
- 개발해야 하는 아이템
- 일시적으로 스태미나 무제한 (버프형)
- 다른 플레이어 점프
- 다른 플레이어 위치 보기
- 다른 플레이어 알 위치 보기
- 추가적으로 랜덤 아이템 스포너 개발 필요
아이템 아키텍처
- 아이템 인터페이스
OnPickUp() 함수를 통해 플레이어가 오버랩 시 호출
- 아이템 베이스 클래스
- 콜리전 컴포넌트로 오버랩 감지
- 오버랩 이벤트 발생 시, 인터페이스의
OnPickUp() 실행
- GAS 연동
- GameplayEffect를 통해 스태미나 무제한 버프 구현
오늘의 CS
프로세스와 스레드의 차이점
- 프로세스
- 컴퓨터에서 실행 중인 하나의 프로그램을 뜻함
- 프로그램은 특정 작업을 수행하기 위한 명령어의 집합
- 실행할 때 운영체제가 독립적인 메모리 공간과 자원을 할당해주고, 각각의 프로세스는 서로의 메모리에 직접 접근 불가
- 스레드
- 프로세스 내부에서 실행되는 작업 흐름 단위
- 스레드는 프로세스의 메모리 공간을 이용하고, 지역 변수를 저장하는 스택 영역을 할당받음
- 코드, 데이터, 힙 영역은 스레드끼리 공유함
- 스택은 스레드 간 공유가 불가능함
스택 오버플로우
- 정의
- 스택에 할당된 공간을 초과하여 데이터를 저장하려 할 때 발생하는 오류
- 원인
- 무한 재귀 호출 : 함수가 자기 자신을 끝없이 호출하는 무한 재귀에 빠질 때 발생
- 지나치게 큰 지역 변수 : 함수 내에서 매우 큰 배열 같은 지역 변수를 선언하면, 스택 공간을 너무 많이 차지하여 오버플로우 발생 가능
- 해결법
- 함수 종료 조건을 명확하게 함
- 재귀 대신 반복문을 사용
- 과도한 스택 사이즈보다는 동적 메모리 할당을 사용
- 컴파일러 옵션을 통한 스택 사이즈 조절
시간복잡도
- 정의
- 알고리즘이 실행되는 데 걸리는 시간(연산 횟수)을 입력 크기 n의 함수로 나타낸 것
- 하드웨어와 무관하게 알고리즘의 효율성을 비교하기 위해 사용
- 표기 방법
- O (빅오 표기법) : 최악의 경우 시간 복잡도
- Ω (빅오메가 표기법): 최선의 경우 시간 복잡도
- Θ (세타 표기법): 평균/정확한 차수