1번
이스케이프 프롬 타르코프 시스템 모작
설계구상 [ 마인드맵 ]
이스케이프 프롬 타르코프 라는 게임의 총기 모딩시스템, 플레이어의 상호작용, 아이템 인벤토리 시스템 등을 구현할 것
모든 아이템은 HashMap으로 자신의 상태값을 가져야한다.
아이템 사전을 만든다고 이해하면 된다.
공용으로 가져야 하는 부분
총기 -> 부품 -> 부품위치 -> 상호작용 가능한 객체 ( 서로 겹치는 객체는 동시에 장착 불가 등 ) 이런것과 같이 상속관계 조정
자기자신에 부착되는 하위부품들
총기부품의 스테이터스
캐릭터
캐릭터는, 플레이어의 주관대로 스스로 행동 이동 공격 할 수 있어야하고, 자신의 앞에 있는 물체를 집거나, 물체가 존재함을 인지하여야 한다.
UI를 통해 자신의 체력, 스테미너, 팔 스테미너 를 관리할 수 있어야 한다.
임의의 키 버튼을 눌러서 현재 게임플레이 시간을 확인할 수 있어야 한다.
임의의 키 버튼을 눌러서 현재 게임의 탈출구 를 확인할 수 있어야 한다.
캐릭터의 달리는 속도, 앉는 정도를 휠버튼과 쉬프트로 조정할 수 있어야 한다.
IK를 활용하여 캐릭터의 손 위치나 발 위치 등을 조정할 수 있어야 한다.
현재까지 목표는 위와 같다.
2번
Collision을 사용하지 않는 AI컨트롤
설계 구상 [ 마인드맵 ]
게임 캐릭터의 AI에 관련하여 직접적인 Collision작용 없이 AI가 임의의 객체를 판별할 수 있게 한다.
CNN - > U_Net알고리즘을 응용하여, AI객체의 판별행동인 Move, Attack, Jump, 회피 등의 행동을 유도한다.
예상 생성 가능한 노드는 다음과 같다.
이동, 공격, 점프, 회피, 탐색
이미지 연산과정.
AI기준의 DIrection방향으로 500x500사이즈의 이미지( 256, 256정도로도 무방할것으로 예상 ) 를 생성한 뒤, GPU연산을 해야하기 떄문에 hlsl을 통해 데이터 연산을 시킨다.
현재 노드에 대한 행동원리키값은 5가지 임으로, 5가지 노드에 전달하기 위한 중간과정을 이미지 병합으로 이루어지게 한다.
가장 상위의 점수는 Player의 위치포인트를 기준으로, Player가 존재한다는 가능성이 가장 클 경우, 해당 위치로 이동 또는 공격한다.
화면 View에 palyer의 이미지가 일정범위 안에 차 있을 경우, 공격 또는 이동으로 노드가 갈려야 한다.
순서상, 이미지 생성 - > 픽셀병합 -> 플레이어 탐색 -> 여기서 플레이어가 있을 경우, 아닐경우 갈린다.
있을 경우 -> 플레이어 의 거리를 픽셀의 범위사이즈로 판별. 플레이어 픽셀이 화면의 일정 범위를 차지했을 때, 공격.
-> 실패했을 경우, 현재 화면범위의 가중치를 낮춘다. 성공했을 경우 현재 화면범위의 가중치를 높인다.
없을 경우 -> 현재 파악된 데이터의 범위 상, 가장 유력한 물체의 위치로 판별하고. 길이 많을경우, 길쪽으로, 물체가 많을경우 이동판별이 안될 때 회전 등으로 판별시킨다.
이미지 생성
AI가 이미지를 뷰타겟으로 생성하고, 램에 데이터를 남기든,SSD에 데이터를 남기든, 저장하게 한다.
픽셀 병합.
hlsl로, 현재나타난 이미지를 연산한다. 마스크를 통해 이미지를 줄이게 되며, 마스크는 0.3 0.3 0.3 형태의 마스크를 띈다.
(다른 마스크를 고려해도 좋다)
1단계 이미지의 연산과정에서 이미지 노드를 지정한다. ( 이미지를 병합하고, 가장 확률이 높은 부분의 색을 마스킹)
2단계 이미지의 연산과정에서 이미지 노드를 지정한다. (1단계와 같다.)
위 연산과정을 픽셀병합이 1개로 줄어들 때 까지 반복.,
이후 다시 픽셀을 펼친다.
약 7단계 까지 진행했을 때, 역순으로, 마지막 전단계의 이미지 픽셀을 가져와서 이미지 마스킹을 시도한다. (U_Net방식)
이것을 최종단계까지 이미지마스킹을 종료할 때 까지 반복.
마스킹결과의 이미지를, 플레이어 탐색 과정에 넘긴다.
플레이어 탐색
AI가 생성한 뷰타겟을 기준으로, 이미지가 병합된 노드를 바탕으로. 설계한다.
먼저, 현재 이미지 뷰 타겟에 지정자가. 미리 지정해놓은 알고리즘을 바탕으로 이미지 뷰의 노드탐색을 진행하게 한다.
( 예를들어, 길이 하단부에 존재하고, 앞에 가로막는 물체가 없다고 판별했을 때.)
길이 중심부까지 이어져있음으로, Move부분이 더 확률이 높기 떄문에, Move한다.
Move의 기준은, 현재 바라보고있는 ViewTarget의 기준, 길로 판별된 이미지 픽셀의 중심점으로 방향을 Trans하여 전진하게 한다.
이동의 실패근거는, 1초판별로 1초뒤에 현재 위치와 내가 지정한 방향으로 MoveSpeed만큼 1초간 이동한 거리가 나타나지 않았을 때 실패로 판별한 뒤, 현재 수행한 노드의 키값의 %를 낮춘다.
위의 과정을 무한 반복하여, 일정동작을 보장하게 한다.
'작업사항 정리 > UnrealC++' 카테고리의 다른 글
UnrealC++ PP 20240618_6 (0) | 2024.06.18 |
---|---|
UnrealC++ PP 20240614_5 (0) | 2024.06.14 |
UnrealC++ PP 20240609_4 (1) | 2024.06.09 |
UnrealC++ PP 20240606_3 (0) | 2024.06.06 |
UnrealC++ PP 20240605_2 (0) | 2024.06.05 |