잠깐 블루프린트까지는 썼었는데 기억이 하나도 안나서언리얼5 나온 김에 다시 공부해보려 한다.아마 강의를 듣고 기록하는 내용으로 가지 않을까 싶다
나중에 다시 보면 헷갈릴 것 같은 부분들 위주로 정리한다.🔼Event BeginPlay : 최초 1회 실행 (유니티의 Start?)Event Tick : 매 프레임 실행 (유니티의 Update?)🔼 커스텀으로 이벤트 호출 타이밍 지정 가능🔼 수정하고 꼭 컴파일 후
🔼Bool 형 \- 이름 앞에 b를 붙이는것이 관례. 유니티의 m\_ 처럼 알아서 디테일 뷰에 생략해서 보여짐.Byte 형 (0 ~ 255)\- ex) 커스터마이징 색상 설정할 때Int 형\- 웬만한 값은 다 int로 처리Int64 형\- 간혹 오래된 게임에서 데미지
총알 발사 및 재장전
🔼 Format Text : 출력하고 싶은 변수를 {} 안에 입력 후 연결 🔼 위 두 사진은 동일
데미지 입는 처리 🔼 동일한 로직이지만 아래 부분은 MAX 사용 종류 MAX MIN CLAMP 구구단 반복문 종류 주의 : Last Index 포함됨.
🔼Gate\- 말 그대로 게이트의 열림/닫힘 상태를 조절해 코드 실행 흐름을 조절하는 것.Open 상태일때만 Exit 할 수 있다.MultiGate\- 들어온 후 Out 순서대로 실행 결과가 달라짐\- 한번 실행된 Out 은 닫힌 상태지만 옵션을 조절해 다시 개방할
가위바위보
함수 생성 구현 응용  호출스택 확인 브레이크포인트 목록 확인
1~45 사이 숫자 중 랜덤으로 6개의 숫자를 추출하는 방법
Array (동적 배열) 생성 기본 출력 🔼 for 문 🔼 for-each 문 기타 자주 사용할만한 함수 🧐 이벤
참조타입이 아니기 때문에 복사할 경우 새로운 메모리 공간 생김.복사본을 수정해도 원본에는 변화가 없음.🔼 선택 가능
날아가서 다시 적는다.. 😫타겟 방향으로 쭉 직진함 (타겟을 지나쳐도 계속 이동)
타겟이 공중으로 뜰 경우 플레이어의 몸도 함께 기울어지는 현상 발생
맵 상에서 충돌이벤트 발생용. 유니티의 box collider 같은 느낌유니티의 오브젝트 Collider와 같은 역할.마찬가지로 충돌 영역 조절 가능🔽 충돌 이벤트
ForEach 사용.Event Tick 때마다 동작하기 때문에 효율적이지 못함!👉 종료조건을 하나씩 검사해야 해서 번거로움특정 조건에서 특정한 이벤트를 실행하도록 할 수 있는 기능미리 특정 이벤트를 호출하겠다 지정해놓고, 해당 이벤트를 원하는 때에 할당할 수 있음도착
👀 유니티와의 가장 큰 차이점유니티는 빈 오브젝트에 컴포넌트를 쌓아서 만들어가는 구조.언리얼은 오브젝트를 생성할 때 반드시 역할을 미리 정하고 상속받아서 구현해야 함Texture : 주로 3D 기반에서 물체에 메테리얼을 입히는 용도로 사용됨. 단독으로 사용되지 않음.
입력 기능과 동작하는 기능을 분리해서 사용.다양한 플랫폼의 입력값을 처리할 수 있음👉 커맨드 패턴🔼 입력값이 없어도 계속 체크하기 때문에 성능 향상을 위해 0이 아닐때만 처리하도록 함✏️ Compare Float 매크로위의 코드를 아래 형태로 단순화 할 수 있음
위의 코드를 아래처럼 단순화 할 수 있음.출력핀을 여러개로 나눌 수 있음함수가 아니기 때문에 delay 와 같은 흐름 제어 코드를 추가할 수 있음이렇게 보면 함수와 비슷해 보이지만 가장 큰 차이점은함수는 스택프레임이 존재하기 때문에 해당 코드를 실행한 후 다시 돌아오는
↓ 단순화Select 핀타입 변경 방법 bool 형으로 움직임 여부를 체크하지 않고 State Enum을 추가.공격중(Skill)이 아니고, Up이나 Right의 입력값이 있으면 Move, 아니면 IdleAttack상태가 되면 모션의 길이만큼만 재생하고 다시 상태 전환
비슷한 함수로 Add Actor World Offset이 있음이미 다양한 방식의 movement 컴포넌트가 만들어져 있음.Set Actor Location 방식처럼 일일히 Delta Seconds를 곱하며 구현할 필요 없이 해당 기능들을 사용하면 됨(대신 가속도 존재함
상속구조를 구현하기 전에 우선 데이터 작업이 필요하다. 몬스터와 캐릭터의 공통 로직인 move, attack, idle 애니메이션 전환을 쉽게 하기 위함이다. 데이터 Structure 구조체에 위와 같은 형태로 설정한다. Data Table Designer :
왔다갔다 하다가 일정 거리내에 플레이어 발견시 다가와서 공격하는 등의 몬스터 움직임을 구현한다.이미 존재하는 State 값에 따라 행동이 변화한다.필드 위에서 BP_Knight 클래스를 찾고, 발견한 값이 Valid 하면 Target Enemy에 저장 후이동할 수 있도
지금까지 구현했던 내용들을 언리얼 내부의 Controller와 GameMode를 통해 리팩토링한다.키입력이나 이동 로직 등을 기본 Player Controller를 상속받아서 커스텀한다.(로직을 한군데서 관리하지 않고 분리하기 위함)기존 BP_Knight에 있던 Upd
레이어 기능도 존재함!다만 레이어 기능을 사용하면 레이어 간에 갭이 많이 눈에 띈다.기본이 4로 설정되어 있었는데 0.1 로 줄이니까 많이 괜찮아지긴 했다.(0으로 설정하면 레이어가 겹쳐서 제대로 안나옴)TileSet에서 아래 버튼을 누르면 콜라이더가 추가된 타일을 쉽
PaperTileMapActor 각 타일의 정보를 가져오거나 하는 등 더 심화적인 과정을 필요로 할때 사용한다. 만들어둔 타일맵을 가져다 쓸 수 있음. 타일맵 넓이 가져오는 방법 타일맵 정보 저장 bool형 1차원 배열을 사용해서 갈수 없는 타일이면 (=Layer
최소 이동 기준을 좌표 한칸으로 하고자 한다.이동하고자 하는 목적지 좌표를 각각 Grid Pos와 Dest Location에 저장목적지와 현재 위치의 거리가 10 미만이면 도착했다고 판단Stop Move 가 true가 아니라면 계속해서 이동.현재좌표 + 방향좌표를 더해
타일맵 위 랜덤 위치에 몬스터 스폰 Get Random Empty Grid Pos 타일맵 상에서 Creature를 스폰할수 있는 위치를 찾는 함수. 스폰할 크리처가 많거나, 맵이 복잡해서 빈칸이 적을 경우 효율적인 방법은 아님. 맵이 단순하고, 기껏해봐야 두세마리
코드를 리팩토링하고 수정하면서 어느순간 몬스터의 AI가 작동하지 않았다.그러면서 새로 알게된 부분이,사진처럼 'Auto Possess AI' 옵션에 따라서 또 동작하는 방식이 다르다는 부분이었다.저번에 BP_AIController를 만들어서 몬스터의 행동상태를 제어하도
👀 https://dev.epicgames.com/documentation/ko-kr/unreal-engine/unreal-architecture?application_version=4.27GameMode에 선언된 변수나 함수는 해당 레벨의 모든 클래스들이
바로 아래 SceneComponent 와의 차이점은 월드에 배치될수 있는지의 여부.📝 참고 1가운데 흰 선을 기준으로 transform 등 좌표가 존재하는 컴포넌트는 선 위에,그렇지 않은 컴포넌트는 선 아래에 생긴다.📝 참고 2컴포넌트 입장에서 자신을 소유한 부모를
물체의 조각 모양.어떻게 생겼는지를 결정함.정점(삼각형)들의 집합.색상 등 어떻게 보여질지 결정하는 스킨 같은 개념.(숫자 3 + 마우스 좌클릭)단순 색상이 아닌 오브젝트의 세부 좌표별로 어떻게 보여질지 결정하는 것.다양한 질감이나 색상을 표현할 수 있음.실제 오브젝트
커스텀 GameMode를 생성해서 기본적으로 비행기 캐릭터가 자동으로 생성 및 Possess되도록 함.캐릭터 역할을 할 비행기(라고 하자)를 만들고, Spring Arm에 카메라를 붙여서 적당한 각도로 조절.현재 Actor의 앞 방향.xyz 고민할 필요 없이 간단하게
에픽스토어에서 무료 에셋을 다운받아 사용했다. Skeletal Mesh 2D 캐릭터는 플립북 처럼 여러 이미지를 빠르게 재생시켜 애니메이션을 만듦. 그러나 3D 캐릭터는 그런 방식으로 만들수가 없음. 따라서 bone 이라는 뼈대를 지정해두고, 해당 bone 값을 이
카메라 회전 회전을 마우스의 움직임에 따라 변하도록 변경했는데, Mouse Y 값을 따라 움직이도록 했더니 캐릭터가 돌아가는 현상이 있었다. (이것도 물론 위 옵션 체크해야함) 그렇다면 카메라를 회전시키면 된다! Spring Arm에서 위 옵션을 찾아 체크하면 셀
애니메이션과 관련된 것들을 처리해주는 블루프린트.Mesh 에서 연결해서 사용해주면 된다.상태머신을 통해 캐릭터의 상태를 관리한다.ex) '죽은 상태' 일 때는 건강상태에서 할 수 있는 달리기, 점프 등을 할 수 없어야 함.이처럼 각 State를 만들고내부에 어떤 애니메
다르게 얘기해서 PlayerController과 Pawn의 회전을 분리하는 개념이라고 이해했다.지금까지 작성한 코드는 세로 회전의 경우 캐릭터를 고정시키고 카메라만 움직이지만,가로로 움직일때에는 캐릭터도 따라서 움직이고 있다.이를 해결하기 위해서 우선 Controlle
총을 쏘는 상태(Fire)를 따로 관리하게 되면,걸으면서(Move) 동시에 총을 쏠(Fire) 수가 없음.그때 사용할 수 있는것이 애니메이션 몽타주.애니메이션을 필요한 것만 따로 떼다 섞어서 사용할 수 있음.(상위) Group > Slot > Section (하위)Se
지금까지 만들었던 이동 방식과 조금 다르게,카메라 방향(aim)은 고정한채로 (보고있는 방향)과 (이동하려는 방향) 사이 각도를 계산해 애니메이션을 결정한다.빨간 화살표 (aim 값)초록 화살표사이 각도 값(😭 잘 안보이지만 0, 180, 90, -90 순으로 Yaw
카메라가 좌우로 회전할 때 캐릭터가 따라 움직이지 않도록 하기 위한 방법 중에서쉽고 빠른 방법은 Use Controller Rotation Yaw의 체크값을 해제하는 것이다.체크시해제시또 다른 방법으로는 Root Bone을 회전시키는 방법이 있다.Root Bone이란
지금까지 90도 내외로는 캐릭터가 움직이지 않게 만들었었다.실제 게임에서는 이런 움직임은 부자연스러우므로, 마우스가 따라다니는 위치로 에임(상체)을 움직이게하는 애니메이션을 추가한다.FPS 기반 엔진이라 그런지 그 기능도 이미 다 구현되어 있다!Snap to Grid
언리얼 공식 문서👀 https://dev.epicgames.com/documentation/ko-kr/unreal-engine/ik-rig-in-unreal-engine👀 https://dev.epicgames.com/documentation/ko
Collision Presets : 기본값이 존재하며, 수정해서 사용하고 싶을 땐 Custom 사용. Object Type : 현재 오브젝트의 타입 Project Setting - Collision에서 타입 추가 가능 Ignore : 이벤트 무시 Block : 유
HUD를 사용해서 간단한 UI를 표시할 수 있다.스크린 사이즈 ( Size X, Size Y) 를 2로 나누어 스크린의 중심을 찾아주고,그대로 그리면 스크린의 중심이 텍스처의 왼쪽 위 꼭짓점이 되기 때문에그릴 크기의 절반만큼(64 / 2 = 32) 위치를 빼준다.그럼
Behavior Tree와 세트.AI 관련해서 필요한 정보들을 기록해두는 곳.Animation에 필요한 것들을 Animation Blueprint에서 전담해서 사용했던 것과 비슷한 개념?블랙보드에 키값을 추가하면,Behavior Tree에서도 사용할 수 있게 자동으로