축
- 왼손 좌표계
- 회전의 경우 해당 축에서 시계방향임.
- X,(빨) Y(초), Z(파), XY 평면을 사용하기 위해 다이렉트랑 축이 다름.
- Yaw(Z, 도리도리), Pitch(Y, 끄덕끄덕), Roll(X, 뒹굴뒹굴)
- Gizmo 의 수직 모양을 클릭하면 해당 평면에서 이동가능
단축키
Content Browser
F2 는 이름바꾸기
Ctrl + Shift + S => 모두저장
Ctrl + W => 복사
Level
Ctrl + S => 저장
Cntrl + N => 새 Level
BluePrint
Alt + Click => Break Node Link
Node 2개 클릭 + Q => 자동정렬
선 중앙 더블클릭 => 선 중간에 점 생성(Jump 기능)
구조체 -> Break => 따로 노드 빼서 구조체 확인 가능
Wildcard => 자료형 지정 안됨. 노드 상에서 회색으로 나옴.
Input 에서 펼쳐보기 해서 Pass by Reference 하면 참조 가능. 즉 Out 으로 가능.
Viewport
Alt + Click Pivot => Copy
F8 => 카메라 빙의
AI
navigation mesh 를 outliner 에서 선택 후 P => 구역보임
' => AI Debug 모드
Content Browser
우하단 View Option => Show Engine Content 에서 엔진 내부 폴더 볼 수 있음
EngineContents->BasicShapes 에서 엔진 내부 메시가 있음
BluePrint
Window
우상 부모 클래스 확인
블루프린트 클래스는 화면에 있는 인스턴스에게 적용됨
Debug Filter 를 통해 개체를 선택해서 BreakPoint(F9), Watch This Value 가능
구조체의 경우 Pin -> Combine/Re Struct Pin 가능
Get 의 경우 Pin -> Validated Get / Pure Get 왔다갔다 가능
Class Setting 에서 부모클래스 설정 가능
상속받은 값 포함 기본값은 Detail 에서 설정가능하니 참고.
Class Setting
부모 클래스 설정 가능
Run Construct Script 설정 가능
Class
코드, 즉 C++ 에선 접두사가 붙어서 U 가 붙음
상속
UObejct => 블루프린트에서 최상위 클래스
AActor => 맵에 배치가능. Place Actors Window 의 이름의 유래
APawn => Input Component + Controller
ACharacter => Character Movement Component
UActorComponent => 부모자식 불가능. Transform 없기 때문.
USceneComponent => 부모자식 가능. Transform 있기때문.
Animation
Asset->좌클릭->Advanced Asset->Animation 에서 생성
State Machine 으로 상세구현
상속
AnimInstance => Animation BP 최상위 클래스
Component
Comp
StaticMesh 가 잘 쓰임
Spring Arm => 카메라 이동시 완충재 역할로 많이 씀
use Pawn Control Rotation 을 켜야지 Target Rotation 을 사용함
상속
Actor Component => 데이터의 상속 기능
Scene Component => Transform 가짐. BP Component 에서 위쪽 영역 표시됨
폴더에서 오른쪽, 객체 Detail 에서 Blueprint/Add
AnimNotify
Animation 추가하는 Notifies 에 해당함
GetNotifyName 으로 Animation 에서 보이는 이름 바꿀 수 있음.
Notify State 에 Trail, Timed Particle 으로 궤도 설정 가능.
Structure
Advanced Asset -> Blueprint 에서 생성
보통 U 같은 접두사를 Editor 에서 빼서 보여주는데 구조체는 아니라서 F 붙여줘야함.
GameMode
UActor 로부터 상속받음
대표정보
Game Session => 한 사람에 대한 서버가 주는 구역
Game State Class => 전체 게임 상태 ( 현재 버퍼링 중 라던가)
Player Controller State => 입력, 네트워크까지 담당하는 Pawn 에 기본으로 있는거
Player State Class => 서버 통신 어쩌고
HUD => UI 총괄 관리 및 렌더링
Default Pawn Class => 우리가 기본으로 선택할 클래스. 편의성에 가까움.
Spectator Class => 관찰자, 중계용 카메라
사용
Project Setting -> Maps & Modes 에서 지정 가능
지정하면 Settings 옆의 Blueprints -> Project Setting -> Game Mode ... 에서 확인
Variable
Tip
드래그 시 Ctrl => Get, Alt => Set
F9 로 BreakPoint 가능
Watch This Value 하면 값이 윈도우에 뜸
옆에 눈동자 모양으로 해당 변수가 Detail of Instance 에서 수정가능하게 함.
Type
color = 0~255
linear color = 0~1
Object
Object Reference 가 기본형임. 객체 내부의 값을 가져올 수 있음.
Get 변수 => Promote to Variable 쓰면 자동으로 변수생성됨
문자열
String, Name(대소문자 구분, Skeleton Socket 이름), Text(완전한 유니코드)
Interface
보통 클래스와는 다르게 다중상속이 가능해서 분할가능한 기능은 여기서 구현
Return Value 가 있으면 Function 없으면 Event 로 인식해서 bool 값 return 해주자
Notify 의 return 값이 의미없지만 있는 이유와도 관계가 있음(notify interface?)
Material
Material Interface
Material
Instance
material 의 BP 나 값을 변경하면 할 때마다 컴파일을 하기 때문에 필요함
우클릭 Create Instance 로 생성
에디터 상에서만 변수 바꿀 수 있음.
값 공유가 일어나 최적화가 됨
Instance Dynamic
프로그래밍으로 변수 수정 가능하고 프로그래밍에서만 생성가능
Controller(Character Movement)
빙의
Pawn->Auto Poccess Player 에서 설정 가능
3인칭 이동회전
Character Movement Rotation Setting->Orient Rotation To Movement
이동시 캐릭터가 움직이는 방향으로 회전하게 함
Pawn 의 Use Controller Rotation Yaw 해제해서 카메라랑 같이 회전 막음.
Spring Arm 이 있는 경우 Use Pawn Control Rotation 을 켜줘야함.
Animation
State Machine
Montage
Section
Play Anim Montage 에서 재생의 Section을 지정할 수 있음.
여러 애니메이션 끌어서 합치는거도 됨.
Montage Section Window 에서 Link 를 설정가능하고 다음링크가 자신이면 루프.
Slot
Skeleton->Anim Slot Manager 에서 Slot 생성
생성
Animation 좌클릭 -> Create -> Create AnimMontage
Montage 에서 원하는 Slot 지정하고 Notify 필요하면 지정.
사용
Event Graph 에서 Play Anim Montage 로 특정 Slot에 특정 Anim 을 재생
Anim Graph 에서 Montage 를 사용할 수 있음.
이때 이전 노드가 초기화가 되서 Cache 를 사용해야함.
Layered Blend Per Bone 을 Anim Graph 에서 사용해서 특정 관절 이하 블렌드.
이를 위해선 Config -> Layered Setup -> Branch Filter 에서 Filter 를 생성해야함.
이때 안보이면 화살표 누르기
주의
애니메이션의 경우 Root Motion 이 이동해야함.
Animation -> Viewport 창의 Character -> Animation -> Process Root Motion
여기에 Detail -> Root Motion -> Enable Root Motion 으로 확인
Anim 이 연속적으로 움직일 때 Montage 를 썼을 때 위치가 바뀜.
Cache
Physics
Box 같은 Collider 을 눌러야 Detail 에서 확일 할 수 있음.
Physics 의 Simulate Physics 를 On 하면 움직임 ( Static, Stational, Dynamic )
충돌
Overlap
Query 에 해당함.
Generate Overlap 이 받는 쪽만 켜져있으면 Event 사용가능.
Block(Hit)
Physics 에 해당함.
Simulation Generates Hits 가 서로 켜져있으면 Event 사용가능.
Damage
Actor Object 는 ApplyDamage 를 호출
Damaged Actor 에게 서버 혹은 로컬이 DamageAny 를 호출해줌
이때 Instigator 가 공격자의 Controller, Causer 가 데미지를 준 무기에 해당될 것.
Event
Delay => 마지막 Delay 로부터
ReTriggable Delay => 최초의 Delay Call 시간부터
UI
타입
Widget => 하나하나의 컨트롤
Slate Widget UI => Editor 상의 UI
Widget Blueprint UI => InGame 상의 UI
Component
Canvas Panel => 화면 크기를 기준으로 함
Size Box => 상대 위치
기타
영문체 폰트사이즈 = 96
Detail 에서 Is Variable 을 체크하면 이벤트 그래프에서 변수로 사용가능
사용
Class 에서 Widget 추가
=> Detail -> User Interface 에서 Draw Size, Widget Class 설정
AI
AI Controller
Blackboard
[Get/Set] Value as [Type] 함수로 BP 내에서 값 접근 가능
Behavior Tree 에서 Blackboard 를 직접 지정함
Behavior Tree 를 실행하는 AIController 에서도 GetBlackboard 로 가져올 수 있음.
Behavior Tree
AI Controller 가 BT 를 실행시킴
Blackboard 를 꼭 Behavior Tree 에서 지정해야함
Decorator
Flow Control 용
Add Decorator -> Blackboard
사실상 이거만 씀
Abort 옵션에 self 면 자기과 자식노드, Lower Priority 면 오른쪽 노드, Both 면 둘다.
Service
주로 Blackborad 값 설정 용
overload function 에서 ai 가 붙으면 BT 내부, 없으면 외부에서 호출되는 함수.
주의사항
TInverval 이 실행 중에 Tick이 실행 안될 수도 있음.
그래서 Inverval 을 3초 이렇게하면 Tick 을 씹고 같은 행동을 하게됨.
그래서 Tick 에서 상태검사를 할 시 Receive Search Start 에서도 해야함.
Task
Leaf 노드에서 행동을 지정할 때 씀
AI Perception
AIController 에 AIPerception Component 를 넣어서 주로 사용
Sense Config 에 여러 종류의 감각을 등록할 수 있음.
Hearing
그냥 소리가 아니라 Make Noise 에 반응함
Sight
시야각도 조정 가능함
GetCurrentlyPerceivedActors 로 현재 인식된 개체들을 알 수 있음
Navigation Mesh
A* 을 대체하는 길찾기 알고리즘용 영역.
ai 의 MoveTo 를 쓰려면 이 영역에 Controller 가 있어야함.
크기 조정을 Brush 라고 따로 있음. Transform 의 Scale 이 아님.
P 를 누르면 영역이 화면에 표시됨
EQS(Environment Query System)
Query Item 을 환경에 배치해서 Test 에 따라 점수를 매김.
이러한 점수-item 쌍들에 Behavior Tree 가 접근가능해 선택가능.
Score 는 결과값을 0~1 범위로 정규화함에 주의
EnvQueryContext
Dot Test 에서 Line 을 지정할 때 EnvQueryContext_Querier 등을 보았을 거임.
그거처럼 우리가 원하는 액터를 불러오고 싶을 때 사용함.
이는 EnvQueryContext_Base 를 상속해서 구현이 가능함.
Querier 가 인자로 오는데 여기서 Blackboard 에 접근해 값을 빼오는게 일반적.
Data
Data Table
csv 형식으로 많이 사용함
자신이 만든 Struct 타입을 행으로 해서 데이터를 외부에서 가져와 정리 가능
Reference Path
에셋을 불러올 땐 reference path 을 사용함
자료형'경로' 의 형식이 정석으로 충돌때문에 약식은 거의 사용하지 않음
클래스 타입을 가져오는 경우 맨 뒤에 _C 를 붙임 ( '_C' )
Data Assets
폴더
Config(엔진정보), Content, Cache,Intermediate(중간저장파일), Saved(로그) => 앞 두개면 충분
"/Game/" 은 컨텐츠 경로
"/Engine/" 은 언리얼 기본 제공 소스 경로
Viewport
Active Play Mode
Stand Alone Game => 게임화질 최대로
New Editor Window => F8 안통하는 새창
Setting
Project Setting->map&mode->default map => 기본 실행 레벨 설정
Engine Scalability Setting -> Quality => 에디터에서 렌더링 퀄리티 설정
Engine Input -> Binding -> Axis / Action Mapping 으로 Input 처리. 여기서 그룹은 BP_Evnet 에서 쓸 수 있음.
File
Package Project
PBR (Physically Based Rendering)
- Roughness, Metallic
Normalize
tolerance => 0 으로 나눠야 할 때 이 값으로 나눔
Tag
Actor 밑에 확장하면 있음