[내일배움캠프 Day44] BlueprintImplementableEvent
·
내일배움캠프/TIL
아웃게임을 구현하는 와중 C++에서 함수의 선언만 하고, 블루프린트에서 해당 함수를 구현할 일이 생겨 검색하던 중 BlueprintImplementableEvent를 알게 되었습니다.BlueprintImplementableEvent는 C++에서 선언된 함수가 블루프린트에서 구현될 수 있도록 하는 UFUNCTION 속성으로 블루프린트에서 해당 이벤트를 재정의하면, C++에서 호출 시 블루프린트에서 정의한 내용이 실행됩니다. 마우스 커서 등 위젯 관련 코드는 블루프린트에서 하는 것이 더 직관적이고 간단해 GameOver이 되면 블루프린트에서 구현할 수 있도록 BlueprintImplementableEvent를 사용했습니다.참고로 이를 사용하면 CPP에서 함수의 정의부를 구현하면 에러가 발생하며 빌드가 되지 ..
[내일배움캠프 Day43] BT 애니메이션 실행
·
내일배움캠프/TIL
EBTNodeResult::Type UBTTask_DrinkWater::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory){ Super::ExecuteTask(OwnerComp, NodeMemory); AAIController* AIController = OwnerComp.GetAIOwner(); if (!AIController) return EBTNodeResult::Failed; AAnimal* AICharacter = Cast(AIController->GetPawn()); if (!AICharacter) return EBTNodeResult::Failed; if (AICharacter->DrinkMon..
[내일배움캠프 Day42] 알고리즘 수업 Wrap-Up
·
내일배움캠프/TIL
STL이란?STL은 C++에 내장된 템플릿 기반의 라이브러리이며, 크게 컨테이너, 반복자(Iterator), 그리고 알고리즘으로 구성되어 있다.컨테이너(Container): 데이터를 저장·관리하는 구조체(자료구조)들의 집합반복자(Iterator): 컨테이너 내 데이터를 순회(Navigation)할 수 있도록 도와주는 일종의 '포인터' 역할알고리즘(Algorithm): 정렬, 탐색, 삽입, 삭제 등과 같은 로직을 매우 효율적이고 제네릭하게 제공https://dev0404.tistory.com/5 [사전 캠프 Day4] STL요즘 기초가 부족하다고 느껴 프로그래밍 책들을 읽는 중입니다.최근에는 effective c++, 객체지향의 사실과 오해 책을 읽으면서 노션에 정리하고 있는데 effective c++는 ..
[내일배움캠프 Day41] 언리얼 AI 구현
·
내일배움캠프/TIL
지난주 목, 금 여행 일정으로 인해 TIL은 작성하지 못했습니다. 이번 팀 프로젝트에서 AI 구현을 맡게 되어서 과거 '이득우의 언리얼 C++ 게임 개발의 정석' 책을 읽고 정리한 내용을 작성해 보았습니다. AI 컨트롤러와 비헤이비어 트리AIController와 내비게이션 시스템NPC에 인공지능을 추가해 스스로 영역을 정찰하고 플레이어를 감지하면 쫓아가서 공격하도록 만들 수 있다.AIController을 부모클래스로 하는 ABAIController 클래스 생성하고ABCharacter.cpp#include "ABAIController.h"AABCharacter::AABCharacter(){ ... AIControllerClass = AABAIController::StaticClas..
[내일배움캠프 Day38] 8주차 과제 진행
·
내일배움캠프/TIL
내일배움캠프 CH3에서 진행한 강의를 바탕으로 추가 구현을 더해서 과제를 내주셨습니다.강의 목차는 위와 같으며 대략적으로 레벨마다 맵과 배치된 아이템이 바뀌면서 코인을 먹는 프로젝트입니다. 강의에서는 언리얼 프로젝트를 진행하면서 필요한 기초적인 내용들을 배웠습니다. 8번 과제를 하면서 어려운 점은 따로 없었으나 구현하면서 에러가 발생했던 점은 따로 블로그에 정리했습니다.https://dev0404.tistory.com/58 [내일배움캠프 Day37] TWeakObjectPtr과제를 진행하면서 위와 같이 에러가 발생하였는데, 맵이 바뀌면서 기존의 파티클이 제거되었는데도 파티클을 없애려고 하는 것이 원인이었습니다. 아래 언리얼 공식 문서를 보면 자세하게 나dev0404.tistory.com 시연 영상http..
[내일배움캠프 Day37] TWeakObjectPtr
·
내일배움캠프/TIL
과제를 진행하면서 위와 같이 에러가 발생하였는데, 맵이 바뀌면서 기존의 파티클이 제거되었는데도 파티클을 없애려고 하는 것이 원인이었습니다. 아래 언리얼 공식 문서를 보면 자세하게 나와있습니다.https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-object-handling-in-unreal-engine UParticleSystemComponent* Particle = nullptr;GetWorld()->GetTimerManager().SetTimer( DestroyParticleTimerHandle, [Particle]() { if (Particle) { Particle->Des..
[내일배움캠프 Day35] 알고리즘 수업 1주차 과제
·
내일배움캠프/TIL
코드#include #include #include using namespace std;int main() { map> students; // ID, 과목, 점수 map>> scores; // 과목, ID, 점수 cout > choice; // 학생 성적 추가 if (choice == 1) { int id, score; string subject; cout > id >> subject >> score; // 0 ~ 100점까지 유효한 범위 if (score 100) continue; students[id][sub..
[내일배움캠프 Day34] push_back과 emplace_back의 차이점
·
내일배움캠프/TIL
push_back()과 emplace_back() 둘 다 벡터의 뒤쪽에 원소를 추가합니다. 그런데 실제로 구현된 복사/이동 방식은 크게 다르며, 성능에서도 차이가 납니다. push_back()vs.push_back(s)는 문자열을 벡터로 복사합니다. 먼저, char *로 초기화된 새 문자열 객체가 암시적으로 생성됩니다. 그 다음 push_back()이 호출되는데, push_back()은 이동 생성자를 이용해 임시 문자열을 벡터로 복사합니다. 작업이 다 끝나면 임시 객체를 없앱니다.   emplace_back()vs.emplace_back(s)는 임시 문자열을 생성하지 않습니다. emplace_back()이 char *를 인수로 하여 직접 호출합니다. 그런 다음 이 char *로 초기화된 벡터에 저장할 문..
[내일배움캠프 Day32] 가상 함수 동작 원리
·
내일배움캠프/TIL
C++의 가상 함수 동작 원리가상 함수는 'vtable', 혹은 가상 테이블(virtual table)에 의존한다. 어떤 클래스의 함수가 virtual로 선언되어 있으면, 해당 클래스의 가상 함수 주소를 보관하는 vtable이 만들어진다. 컴파일러는 또한 해당 클래스의 vtable을 가리키는 vptr이라는 숨겨진 변수(hidden variable)를 해당 클래스에 추가한다.하위클래스가 상위 클래스의 가상 함수를 오버라이드(override)하지 않으면 하위 클래스의 vtable은 상위 클래스의 가상 함수 주소를 보관한다. 이 vtable을 사용하여 가상 함수가 호출될 때 어느 주소에 있는 함수가 호출되어야 하는지를 결정한다. c++의 동적 바인딩(dynamic binding)은 이 가상 테이블 메커니즘을 ..
[내일배움캠프 Day31] 순차 컨테이너
·
내일배움캠프/TIL
순차 컨테이너(sequential container)는 원소들이 선형으로 배열된 데이터 구조를 나타냅니다. 컨테이너헤더설명array표준 C 언어 스타일 배열vector활용도가 높은 기본 컨테이너list연결 리스트(linked list)deque양방향 큐(queue) 배열(std::array)array는 고정된 크기의 배열을 담는 컨테이너입니다. 인덱스를 이용해 원소에 빠르게 접근할 수 있다는 장점이 있습니다. 배열 컨테이너 선언#include using namespace std;array 객체_이름; array 컨테이너를 초기화하는 방법은 일반 배열과 같습니다. 또한 일반 배열처럼 [] 연산자로 각 원소에 접근할 수 있습니다. 배열의 유효 범위 밖의 인덱스로 접근을 시도하면 런타임 오류가 발생합니다.ar..