FBX 파일 언리얼5 애니메이션 리타겟팅하는 방법 -애니메이션을 제외하고 임포트 (임포트 시 체크 확인) -애니메이션 임포트 (애니메이션에 스켈레톤을 연결 확인) -애니메이션 우클릭 -애니메이션 목록에 리타겟팅 원하는 파일에 익스포트
블렌더를 이용해서 이동 값 삭제 시 FBX 블렌더 임포트 > 이동 값 삭제 > 블렌더 FBX 익스포트 > 사용 - 해당 FBX 저장 시 선택한 오브젝트만 저장을 선택하여 저장
구르기 시 높은 곳에서 떨어질 시 중력 영향을 받도록 설정
Z 값을 캐릭터 무브먼트에 연결하여 개별 설정
고정형 보스 AI (블루프린트) 캐릭터 - 기본 언리얼 5 캐릭터 사용 - 추가 기능 : 구르기 (무적), 공격 구현 [개발중] 보스 몬스터 1페이즈 - 공격 패턴 구현 - 기본 공격인 좁은 범위 공격 - 범위 공격인 휩쓸기 - 조건부 패턴으로 바위 던지기 (일정 이상 거리가 벌어질 시) 기본 개발 목표로 개발 우선순서대로 나열
이전 진행도 -왼쪽 Shift 시 구르기 사용 가능 -구르기 시 애니메이션에 이동 값이 있어서 문제 애니메이션 이동 값 삭제 혹은 애니메이션 교체 예정 이후 진행도 -구르기 애니메이션 이동 값 삭제 후 블루프린터 값으로 이동 -캐릭터 공격 구성 중
이미시브 컬러 (방사, 방출) - Constant (값 입력) - 머테리얼 이미시브 컬러 연결 - 이를 이용한 특정 부분만 빛이 나도록 설정하는 방법
텍스처 - 검정색 부분은 0의 값 - 흰색 부분은 1의 값 TextureCoordinate - 텍스처 샘플 UVs 에 연결 (반복되는 텍스처 일 시 Multiply에 연결해서 UVs 분배 시 아래 값 개별 입력 필요 없음) - UTiling, VTiling (타일링 크기) - 조절이 필요할 시 가로, 세로 값을 일일히 설정 가능
선형 보간 - A < > B - 1 - 0 의 값 (Alpha 값) - 텍스쳐를 Alpha에 연결 시 위 텍스쳐 값을 기준으로 적용
고정형 보스 AI (블루프린트) 캐릭터 - 기본 제공 캐릭터 사용 - 추가 기능 : 구르기 (무적) [개발중], 공격 구현 보스 몬스터 1페이즈 - 공격 패턴 구현 - 기본 공격인 좁은 범위 공격 - 범위 공격인 휩쓸기 - 조건부 패턴으로 바위 던지기 (일정 이상 거리가 벌어질 시) 기본 개발 목표로 개발 우선순서대로 나열
진행도 -왼쪽 Shift 시 구르기 사용 가능 -구르기 시 애니메이션에 이동 값이 있어서 문제 애니메이션 이동 값 삭제 혹은 애니메이션 교체 예정
글을 쓰게 되는건 내가 생각하는거나 공부하는걸 정리하는데 공부를 진행하며 적기에는 효율이 좋지 못해서 잘 적지는 않는데 제일 중요한 바니걸에 대한 고찰을 빼고 적고 있었다.
어느때부터였을까 어느 순간 좋아하게 된게 맞다. 다른 복장도 많지만 개인적으로 좋아하는 복장 중 바니걸이 최고라고 생각된다.
우연치 않게 바니걸을 알아보는 중 알게된건 플레이보이 소위 말하는 서양에 잘알들이 개발한 복장이다. 정확히 나온 시기는 불분명하지만 20세기로 보이는데 이건 사실 중요하지 않다. 어떤 부분이 이목을 끄는건지 그게 중요하다고 생각한다.
바니걸에 기본 복장 구성은
나비 넥타이와 카라가 있는 초커, 커프 링크스를 단 셔츠를 닮은 손목 밴드, 가슴부터 골반까지 가려주는 레오타드, 팬티 스타킹, 토끼 꼬리 장식, 하이힐이다.
이 기본 구성 중 완성도를 높이는 요소는 골반의 노출도 귀에 형태가 중요하다고 생각한다. 그 중 괜찮았던건 아래 이미지
바니걸 선배님, 이 애니는 우연치 않게 바니걸을 보고 내용이 괜찮다는 의견을 듣고 보게 되었는데. 내용도 좋았고 재밌게 잘 봤다. 굳이 바니걸 요소를 출현 시킨건 이유가 나오지만 사실 작가가 좋아하는게 분명한 것 같다. 디테일이 남다르기 때문에 그렇게 생각한다. 골반 부분 파임 정도와 검은 스타킹, 토끼귀 형태가 정말 내가 좋아하는 디폴트 검정 바니걸이다.
흰색, 망사도 좋지만 검정 스타킹은 30~40데니아 정도가 최고인 것 같다.
그리고 귀는 아래가 좁고 한쪽이 접혀있는 형태는 다시봐도 디테일이 좋고 마음에 들었다. 접혀있는게 귀로 감정 표현을 하고 있는 것과 같이 마치 원래 있던 것과 같이 접혀있는 부분이 정말 좋다.
이정도로 열번을 토해냈으면 바니걸에 매력을 잘 알 수 있을꺼라고 생각된다. 글을 마치고 공부하러가야겠다.
그리고 해당 애니는 순수하게 재밌으니 봐도 괜찮아. '청춘돼지는 바니걸 선배의 꿈을 꾸지 않는다.'
투시가 없는 뷰 확인 용 (축마다 확인 가능), 휠 클릭 후 이동 시 중앙 기준으로 회전 가능 (빠르게 가능)
우측 손바닥을 누르고 마우스 이동 시 뷰포트 상하좌우 이동이 가능하다. (Shift+Alt 시 같은 기능)
우측 돋보기 누르고 위 아래로 마우스 이동 시 선택 오브젝트 기준 축소 확대 가능 (휠 업, 다운 시 같은 기능)
뷰 포트를 투시 투영과 직교 투영으로 전환하는 기능 (넘버 패드 5까지 단축키 존재)
*투시 투영(Perspective projection)은 우리 눈으로 보는 것과 같은 방식으로, 멀리 있는 물체는 작게, 가까이 있는 물체는 크게 보이는 효과를 줍니다. 현실감 있는 3D 장면을 표현하기에 적합합니다.
*직교 투영(Orthographic projection)은 물체의 크기를 일정하게 유지하며, 평행선을 유지하는 방식으로 투영합니다. 즉, 거리에 관계없이 물체의 크기가 동일하게 보입니다. 건축 도면이나 기술 도면처럼 정확한 비율과 치수를 표현해야 할 때 유용합니다.
해당 아이콘 클릭 및 넘버 패드 0 누를 시 현재 설정해둔 카메라 렌즈 기준에서 오브젝트를 볼 수 있습니다. (넘버 패드 0)
*추가
넘버 패드 1,3,7,9 축에 따른 직교 뷰포트로 변경하는 단축키
넘버 패드 4,8,6,2 경우 카메라 회전 조정 단축키
기준이 될 물체를 선택 View - Frame Selected 할 시 카메라 회전 기준이 변경됨 (넘버 패드 .)
part.2
크기 전환 시 마우스 <-> 상태에서 우클릭 시 나오는 뷰 설정
수직 분할 (Vertical Split)
수평 분할 (Horizontal Split)
작업 중 실수로 해당 창을 지워버릴 시 이미지에 활성화된 버튼을 눌러서 같이 다시 생성 가능
Join 기능은 현재 방향을 설정하여 합쳐지는 기능으로 변경됨
Ctrl+Space 시 해당 선택한 뷰포트가 전체화면으로 변경됨 (다시 한번 누를 시 해제)
퀵 메뉴 (T 단축키)
마우스 퀵 메뉴 (Shift+Space 단축키) - 더 유용할 듯
뷰포트 우측 < 를 누를 시 선택된 오브젝트의 속성 값이 표시됨 (N 단축키)
Shift + 우클릭 시 오브젝트의 회전이 되는 기준점 이동 가능
Shift + S 누르고 시 3D 커서에 대한 메뉴가 나오며 N 속성 값에서 View 탭 메뉴에서도 변경 가능하다.
이미지에 선택되어 있는 Cursor to World Origin 값을 선택할 시 기존 값으로 되돌아 간다.
마우스에 대한 정보
최종 이미지 렌더링 설정
출력 - 파일 저장 위치등 출력 내보내기 시 설정하는 값
우측 위 렌더링 미리 보기 기능
렌더링 시 월드(배경) 값을 설정하는 곳
오브젝트 속성 값
값 체크 시 렌더링 뷰포트에서 투평하게 처리 됨
수정자(Modifier) 오브젝트의 형태를 변경하는 데 사용되는 도구입니다. 오브젝트의 데이터를 직접 수정하지 않고도 다양한 효과를 적용할 수 있어 비파괴적인 작업 방식을 가능하게 합니다.
오브젝트 제약 조건(Object Constraint) 탭 오브젝트 제약 조건은 오브젝트의 위치, 회전, 크기 등을 다른 오브젝트나 특정 조건에 따라 제한하는 기능입니다. 애니메이션 작업이나 복잡한 움직임을 구현할 때 유용하게 사용됩니다.
오브젝트 데이터 속성(Object Data Properties) 탭 선택한 오브젝트의 유형에 따라 다양한 속성을 설정하고 편집
part.3
이동
회전
크기
단축키
G
R
S
X,Y,Z 축 이동 시
G + 각 축에 해당하는 X,Y,Z 키 입력
숫자 입력 후 Enter 시 해당하는 값 변경 가능
X
O
O
변경 시 방법
변경 후 클릭할 시 변경, 오른쪽 or ESC 누를 시 변경 취소 가능 Ctrl + Z 시 되돌리기
단축키 I - 키프레임 추가 ㄴ다음 키프레임에서 변경 후 I 를 눌러서 설정을 한번 더 해야함
ㄴ하지만, 이런 번거러움을 위한 기능인 Auto Keying이 있습니다.
단축키 X - 누를 시 삭제 가능 단축키 Shift + A - 빠르게 뷰포트에 오브젝트를 추가하는 방법
로케이션 값들을 키 프레임으로 변경할려면 해당 값을 변경해야합니다.
part.4
뉴 씬 단축키 Ctrl + N
타임 라인, 도프 시트, 그래프 편집기
타임라인 키 프레임을 이동하려면 단축키 G
누를 시 시작와 끝을 설정 후 반복 재생 가능 (보통 자세한 프레임 수정이 필요할 시 사용) 한번 더 누를 시 복구 휠 클릭 시 타임라인 이동 가능 Ctrl+Home 시 시작 프레임으로 이동 End 시에는 종료 프레임 설정 Shift+D 시 키프레임 복제 아래 마커 네임 F2로 설정 가능
part. 5 이후 기록은 하지 않겠습니다. 간단한거나 직접하며 숙달해야하는 부분 시 시간이 좀 더 걸려 기록을 생략할 예정입니다.
이번 파수인 스토리에서 나오는 노래인데 좋아서 링크 올려둡니다. 틀어두고 보셔도 좋습니다. 멀티 플랫폼 액션 게임 명조의 패링을 분석할 예정입니다.
패링
패링 조건
노도급(준보스급) 이상의 패링 패턴 시전 (이펙트 효과)
패링 성공 조건
몬스터 패링 패턴 시전 시 패링 표시 이펙트에 표시에 맞게 공격
프로젝트내 예상되는 패링 설정 방법
프로젝트 룰이 정해져있고(기본값) 패링이 가능/불가능한 공격에 대해서 파라미터로 개별 설정 가능할 것으로 예상
패링 불가능한 조건
캐릭터가 공격 시전 시 몬스터가 공격 사거리 밖에 있을 시
캐릭터의 공격이 패링 불가능한 공격 일 시
일반 투사체 공격
특정 스킬 공격
연발 투사체 스킬
마지막 피니쉬 공격이 있을 시 패링 가능
에코(소환수) 별 불가능한 에코와 가능한 에코로 나눠짐
캐릭터의 공격으로 패링 대상 사망 시
패링이 가능한 상태 표시 방법
이펙트 표기 (허점 아이콘)
패링 이후
메리트
몬스터 패턴 스킵
패링 히트 애니메이션으로 넘어가며 후속 패턴 스킵, 3초 가량 딜 타임
준보스급부터는 그로기 게이지가 존재, 패링 성공 시 게이지를 대량 감소 시킵니다.
시각적 효과
이펙트
사운드
카메라 쉐이크
포스트프로세싱
애니메이션
명조 패링 분석을 끝마치고 플랫폼별 패링의 차이점을 정리하며 마무리하겠습니다.
패링 시스템은 플랫폼에 따라, 특히 콘솔/PC 게임과 모바일 게임에서 뚜렷한 차이를 보입니다. 가장 큰 차이점은 바로 패링의 난이도입니다. 패링의 조건, 패링 타이밍 이펙트 표기 차이 등으로 패링의 난이도에서 큰 차이가 납니다.
이러한 차이는 플랫폼별 특징과 유저층, 게임 디자인의 방향성을 반영한 결과입니다. 모바일 게임은 터치스크린 조작, 이동 중 플레이 등의 특징을 지니고 있으며, 매번 반복해야 하는 콘텐츠 특성상 높은 난이도는 유저에게 피로감을 줄 수 있습니다. 따라서 모바일 환경에 맞춰 패링 난이도를 낮추는 선택을 한 것으로 보입니다.
결론적으로 개발자는 플랫폼의 특성과 게임의 장르, 타겟 유저층을 고려하여 최적화된 패링 시스템을 고려해야 합니다.
영상을 따라하며 AI 제작을 진행하였습니다. 포스팅은 복습용이므로 설명이 불충분한 부분은 영상으로 확인 바랍니다.
AI 플레이어 인지 종류 (AIPerception)
AI 인지 및 AI 동작 처리
정찰 (Investigating)
AI 인지 컴포넌트 생성: AIPerception
AI 시야 구성(Sight config) 최대 수명은 AI가 플레이어를 기억하는 시간 (목표가 벗어날 시 벗어난 좌표를 기억하고 좌표를 기반으로 행동 후 입력한 시간이 지난 후 완전히 벗어난 상태가 된다.)
디버그 방법 플레이 후 ' 키를 누를 시 디버그가 가능 숫자패드 0 ~ 4를 누를 시 각 디버그 (4. AI 인지 관련 디버그) [설정한 디버그 컬러로 나타남] 해당 키는 변경 가능
AI 인지 테스트: 키에 할당하여 테스트
Player에게 키를 할당하여 테스트 (사운드 및 대미지)
AI 인지 함수: Can Sense Actor
Can Sense Actor: 타깃에 대한 정보가 올바르게 인지한게 맞는지 검증하는 함수
AI 인지 후 동작 처리: 시야 범위에 들어왔을 시 ,청각 탐지 범위에서 소리가 났을 시 ,대미지를 입었을 시
플레이어를 어떤 방법으로 인지 시 플레이어 액터 정보를 시퀀스에 따라서 실행 "Can Sense Actor"에서 검증 후 True가 나오는 행동을 실행하는 블루프린트 구성 For Each Loop에 경우 여러 플레이어 처리를 위한 노드 사운드 경우 발생한 사운드 발생 위치에 대한 벡터 좌표가 필요
정찰(Investigating): AI를 정찰 상태로 변경
AI가 정찰 상태로 변경 시 필요한 정보를 받음
무브 스피드를 세팅하고 정찰 상태로 들어갈 시 얻은 Vector 정보에 따라서 이동 후 설정된 시간 동안 적이 감지가 안될 시 다시 패트롤 상태가 된다.
이번 강의 영상까지는 기초적인 AI를 만들었습니다. 다음은 AI가 지형지물을 이용하는 등 조금 더 똑똑한 AI로 만들 예정입니다.
영상을 토대로 학습하는데 있어 자막 자동 번역에 기능은 좋지만 학습하기에는 조금 부족한 부분이 있기 때문에 영상에서 사용하는 기능에 대한 개념, 기본 지식은 어느정도 알고 있어야 개념 설명 시 이해하기 쉽습니다. 언어를 알아 들을 수 있다면 더할 나위 없습니다.
전 한국어로 제작된 학습 자료를 통해 두, 세번 정도 간단한 AI를 만들어보고 진행하였습니다. 외 설명 시 이해가지 않는 부분은 구글링을 하였습니다. 불편함을 감수하고 이 강의를 선택한 이유는 시리즈 형태로 AI에 대한 전체적인 튜토리얼을 체계적이고 세심하게 다루고 있어서 입니다.
여러 단축키
팔로우 및 공격 AI (블루프린터로 구현)
애니메이션 시 LegIK 일시정지 방법
팔로우 및 공격 AI (비헤이어트리로 구현)
휘두르는 검 생성
많이 사용한 단축키
Ctrl + 스페이스
콘텐츠 드로우 호출
Alt + P
플레이
ESC
플레이 종료
블루프린터
정리할 항목 드래그 후 Q
선택된 노드 직선으로 나열하여 정리
애니메이션 타임라인에서 커브 추적
F
2. 팔로우 및 공격 AI (블루프린터로 구현)
AI 언리얼 제공 기능 사용
BeginPlay 시작 시 호출되는 이벤트로 경우에 따라서 호출이 늦어지는 경우가 있으므로 사용하지 않는 이벤트 커스텀 이벤트 생성 하여 언리얼에서 제공하는 AI Move To를 이용하여 구현
입력된 범위 안에 타겟이 들어올 시 이동 성공
공격 이벤트 생성
공격 실행 커스텀 이벤트 생성 (연결 되어있는 우측 완료 시, 중단 시는 무시하고 진행)
사용 할 애니메이션 시퀀스로 몽타주 생성 후 플레이 될 몽타주를 연결해 줍니다.
Attack 이벤트를 적절한 위치에 생성하여 연결하여 테스트
IK가 꼬이는 문제
몽타주 타임라인에서 커브 DisableLegIK를 추가 키 추가하여 0 - 1.0으로 수정하여 시간적 변형이 없게 설정합니다. 이후 테스트 시 몽타주 실행 중에만 IK가 적용되지 않고 재생 완료 후 IK가 적용되는 모습을 볼 수 있습니다.\
비헤이비어를 사용하여 구현
비헤이어트리 기본 설명은 생략합니다.
비헤이어트리로 기본 AI 구성 시 BP, BB, BT, AIC가 필요합니다. AIC에 Event On Possess 이벤트를 이용해 BT를 호출 기본 BeginPlay 사용보다 이걸 사용합니다. (위 설명)
Delay 경우 Enemy가 생성되기도 전에 호출되기 때문에 유예를 주기 위함입니다. 이러하면 AI 컨트롤러의 세팅이 완료됩니다.
새 태스크를 만들 시 중요한 사항으로 붉은 박스 안 이벤트와 함수를 양끝에 오도록 해야합니다.
이후에는 구현된 AI를 나열하겠습니다.
어택 단계입니다.
Attack 입니다. On Attack End 호출은 Attack 애니메이션이 다 재생 될 때까지 기다려주기 위함입니다.
Attack 이벤트를 실행 후 종료 On Attack End 호출을 기다린 후 이벤트를 끝냅니다.
휘두르는 검 생성 단계입니다.
WieldSword입니다. 미리 세팅된 스태틱 메쉬를 설정해둔 소켓에 생성하는 이벤트입니다. (검 생성) Rule 세팅과 올바른 Socket Name을 입력해줘야합니다.
생성한 WieldSword 태스크입니다. 검을 생성하는 태스크입니다.
검을 한번 생성한 후 이후 생성하지 않기 위한 생성한 데코레이터입니다.
타겟 포커스 부분입니다.
타겟을 포커스하는 이벤트입니다.
캐릭터 BP 무브먼트에서 이미지와 같이 세팅하여야 포커스가 올바르게 작동합니다.
좀 더 AI 처럼 만들기 위한 포커스를 초기화하는 이벤트입니다.
완성된 비헤이어트리입니다.
셀렉터로 검 생성 후 데코레이터가 생성된 검 검증 후 ChasePlayer 시퀀스가 실행됩니다.