[내일배움캠프 Day87] AI - 애니메이션, 사운드
·
내일배움캠프/TIL
AI NPC의 애니메이션 세팅1) 애니메이션 블루프린트animgraph : state machine을 만들기 위한 그래프event graph : 애니메이션에 관련된 블루프린트를 디자인하는 그래프 2) 플레이어 캐릭터 VS AI NPC 애니메이션 작동 메커니즘 비교AI와 플레이어 캐릭터는 조종 주체가 플레이어냐, 인공지능(시스템) 자기 자신이냐가 핵심 차이점 1. 입력 방식의 차이 2. 애니메이션 전환 방식 AI NPC의 스테이트 머신 설계1) AI 애니메이션 블루프린트 디자인Event BlueprintInitializeAnimation 노드는 BeginPlay노드와 유사. 시뮬레이션이 시작되면 1회 호출된다.해당 로직은 해당 애니메이션 블루프린트를 사용하는 클라이언트 액터(BP_FriendAI)의 Mov..
[내일배움캠프 Day86] AI - 회피, 자동 네비게이션 링크
·
내일배움캠프/TIL
AI 이동 명령 및 경로 찾기(Pathfinding) 알고리즘1) Unreal Engine의 경로탐색(Pathfinding)원리언리얼 엔진의 AI는 A*(A-Star) 알고리즘 혹은 다익스트라(Djikstra) 알고리즘 등과 같이 특정 경로로 이동하기 위한 비용 최적화 경로 탐색 공식을 바탕으로 경로를 탐색한다.언리얼 엔진의 Pathfinding의 알고리즘은 가장 저렴한 비용으로 목표 지점까지 이동하도록 설계되어 있다.위 사진의 경우 Start지점에서 Goal까지 이동하기 위해 가장 저렴한 비용은 3(1+1+1)이다. 2) 언리얼 엔진에서의 경로탐색 알고리즘 응용네비메시는 Runtime 중 동적 생성이 불가능하다. 엔진의 아키텍처 설계상의 이유로 Brush가 Runtime 중 재생성되지 않기 때문이다.이..
[내일배움캠프 Day85] Unreal Engine AI 기초
·
내일배움캠프/TIL
AI 기초1. Unreal Engine AI 개요인터랙티브 경험의 핵심 요소인 Unreal Engine AI게임 등 엔터테인먼트 콘텐츠가 재미있는 이유 중 하나는 인터랙션이다. 게임 속 몬스터를 따돌리고 컨트롤을 이용해서 강력한 상대를 무찌르는 등 게임 속의 룰/오브젝트와 상호작용하며 목표를 달성해내는게 게임의 주요 재미다.몬스터나 NPC, 맵 내의 액터들이 플레이어가 나타나면 기다렸다는듯 인지하고 공격하는 등 액터가 마치 지능이 있는 것처럼 행동하도록 설계하는 기능을 언리얼 엔진의 “인공지능”이라고 한다. 2. Unreal Engine AI 구현Unreal Engine AI는 아래와 같은 3가지 오브젝트로 구성된다.우리 뇌-신경처럼 게임속 AI 액터를 찾아서 움직이도록 조작하는 AI Controller..
[내일배움캠프 Day75] 1주차 멀티플레이 팀플
·
내일배움캠프/TIL
이번 팀플에서 캐릭터, AI 제외한 나머지를 맡게 되었습니다.오늘까지 진행한 내용은 싱글플레이 관련 UI로 게임 시작부터 인게임까지 싱글 플레이 관련 구현을 마쳤습니다. 3D 캐릭터를 UI에 보이기위해1. BP_CharacterSelector 안에 SceneCaptureComponent2D를 두어, 3D 캐릭터를 별도의 카메라로 렌더링2. 그 결과를 RenderTarget으로 출력3. 그 RenderTarget을 머티리얼로 감싸서 이미지에 적용이런 방식으로 구현했습니다.  주로 참고한 영상은 아래와 같으며 https://www.youtube.com/watch?v=Ff67XtqgSxchttps://youtu.be/sHq69iYfd9E?si=smireKaY3hTZBdsG 구현한 내용은 아래와 같습니다. 현재..
[내일배움캠프 Day62] 블랙보드값 enum 연결 문제 해결
·
카테고리 없음
c++에서 블랙보드값을 enum으로 정의했는데아무리해도 열거형 타입에 c++로 정의한 enum 값이 안떠서 고민하던중 아래 사이트를 통해 알게 되어서 정리하게 되었습니다. https://forums.unrealengine.com/t/can-i-use-the-c-enum-in-ai-bt-blackboard/339672#pragma once#include "CoreMinimal.h"#include "AIStateOfDay.generated.h"UENUM(BlueprintType) enum class EAIStateOfDay : uint8{ Day UMETA(DisplayName = "Day"), Evening UMETA(DisplayName = "Evening"), Night UMETA(Displ..
[내일배움캠프 Day59] 숫자 야구 게임 과제
·
내일배움캠프/TIL
[9번 과제] 숫자 야구 게임  판정과 난수 생성 로직은 별도의 C++ 라이브러리로 분리해서 구현하고 그 외는 블루프린트로 구현하라고 하셔서 그렇게 과제를 진행했는데 오히려 블루프린트가 더 미숙해 생각보다 시간이 좀 걸렸습니다. 참고로 2주차 강의 채팅 따라 하기에 추가로 구현한 과제입니다. 해당 내용은 아래 블로그에 정리해 놓았습니다. https://dev0404.tistory.com/68 [내일배움캠프 Day58] 채팅 따라하기Listen Server를 이용해 RPC를 호출해서 채팅을 만드는 강의를 듣고 정리해보았습니다. 전체 Flow서버 사용자가 Host, 클라이언트 사용자는 Guest로 UserID를 할당한다.채널에 참가하면 사용자의 ID를 출dev0404.tistory.com  일단 판정과 난수..
[내일배움캠프 Day58] 채팅 따라하기
·
내일배움캠프/TIL
Listen Server를 이용해 RPC를 호출해서 채팅을 만드는 강의를 듣고 정리해보았습니다. 전체 Flow서버 사용자가 Host, 클라이언트 사용자는 Guest로 UserID를 할당한다.채널에 참가하면 사용자의 ID를 출력한다.메시지를 입력하면 서버 측에서 클라이언트 측으로 브로드캐스팅된다. 결과물 레벨 블루프린트시작이 되면 Widget_ChatWindow 를 Viewport에 할당한다.현재 실행 중인 인스턴스가 서버인지 확인. BP_Controller가 확인되면 OnLoginWithID 이벤트를 실행한다.서버일 경우: "Host"라는 ID를 전달한다.클라이언트일 경우: "Guest"라는 ID를 전달한다. Widget_ChatWindowUI 위젯이 생성될 때 BP_Controller로 캐스팅하고 On..
[내일배움캠프 Day56] 브루트포스 과제
·
내일배움캠프/TIL
브루트포스(Brute Force)는 말 그대로 무식하게 문제를 푸는 방법입니다. 가능한 모든 경우의 수를 전부 시도해 보는 것입니다. 과거 '프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략' 책에 나오는 브루트포스에 대해 정리한 글을 추가합니다.https://dev0404.tistory.com/24 완전 탐색(Brute Force)‘무식하게 푼다(brute-force)’ 는 컴퓨터의 빠른 계산 능력을 이용해 가능한 경우의 수를 일일이 나열하면서 답을 찾는 방법을 의미합니다.이렇게 가능한 방법을 전부 만들어 보는 알고리즘을 완dev0404.tistory.com 강의에서는 위와 같은 내용 이외에도 경우의 수를 ‘어떻게’ 만들어 낼지에 대해 여러 가지 전략을 알려주셨습니다.중첩 반복문을 활용한 직접 생성b..
[내일배움캠프 Day55] GGF 프로젝트 1주차 WIL
·
내일배움캠프/TIL
프로젝트가 끝나면서 3주간 코드 작업으로 너무 바빠 티스토리에 정리를 많이 못했다고 느껴 3주 간의 내용을 간단하게 정리하고자 글을 쓰게 되었습니다. 먼저 1주 차 때 작업한 내용을 크게 정리하자면 아래와 같습니다.게임모드 구현퀘스트 시스템 구현ai 기본적인 노드 구현health 시스템 구현전체 아웃게임 위젯 구현 1주 차 스프린트 내용은 아래와 같습니다. AI 작업을 다른 분과 함께 하게 되어서 그분이 밀렵꾼 AI, AIController 코드 작업(AI perception 시야, 청각)을 맡아 저는 그 외에 동물 AI와 게임 플레이를 하게 되어서 1주 차 때는 안 겹치는 작업 위주로 진행했습니다. 따로 팀원들 공유용으로 스프린트1가 끝난 후 AI 작업 정리한 내용도 첨부하면 아래와 같습니다. 하지만 ..
[내일배움캠프 Day46] AI 무리지어 이동 구현(Boids Algorithm)
·
내일배움캠프/TIL
팀플 기획 중에 동물들 중 사슴이 무리 지어 이동한다는 기획이 있어 관련 구현 내용을 정리해 보았습니다. 처음에 바로 떠오른 아이디어는 Boids Algorithm이었으나 구현이 어려울 것 같아 단순하게 리더 정해서 리더 아닌 사슴들은 리더를 타깃으로 이동하도록 구현했었습니다.다만 AI들이 각 AIController이 독립적으로 작동하면서 각 AI마다 새로운 BlackboardComponent가 생성되다보니, 각 사슴은 같은 Blackboard 데이터셋을 가져도 독립적인 BlackboardComponent를 사용해 데이터가 공유되지 않는 문제가 발생했습니다. 즉, AI가 같은 블랙 보드를 공유해야지 팔로워 사슴이 리더 사슴의 주소를 가져올 수 있으므로 현재 팔로워 사슴이 LeaderPosKey를 읽을 때..