내 클래스를 좀 특별하게 처리해달라.
내 클래스가 에디터에서 보이지 않았으면 좋겠는 등등. 나중에 협업할 때나 필요할 것임
클래스 위에 붙여줘야함. 이걸 안넣으면 언리얼 에디터상에서는 사용할 수 없다.
내 함수를 에디터에서 좀 특별하게 처리해달라. 대표적으로 에디터에서 노드형식으로 사용하게 해달라.
min, max값 설정할 수 있는데 블루프린트에서 설정한 민맥스가 코드상에 적용안될거임
그냥 그렇게 중요한 값이면 코드상에 치는게 나음. 근데 그렇다고 exec함수에 직접 치지말라.
변수에 붙이는 디파인
하나의 프로퍼티 옵션들은 ,
로 구분되고
변수에서는 조금 더 중요하게 기억해야할 녀석들이 존재한다.
메모리와 관련이 있기 때문에 중요한 변수들은 꼭 UPROPERTY 붙여주는것이 좋다.
Visible 뭐시기들
어디에서 보일거냐를 정의할 수 있다.
이 클래스를 사용할 때 쓸 수 있냐 없냐와 에디터에서 보일거냐 말거냐를 정의할 수 있음.
VisibleAnywhere
: 프로퍼티 창에 보임. 보이기만 해라
BlueprintReadOnly
: Get함수만 가능. 수정 불가
BlueprintReadWrite
: Get, Set 둘다 가능
언리얼에서 알아서 만들어줌. ReadOnly, ReadWrite 둘 다 Get함수가 있고 ReadWrite로 설정한 변수만 Set함수가 있음.
중단점 걸어보고 누가 호출했는지 보기
블루프린트는 CPP에 영향줄수는없음.
내가 CPP 고친걸 에디터가 바로 적용하려고하는게 라이브코딩. dll을 다시 다 빌드함.
xxxMinimal.h 헤더 내부를 가보면 필수 헤더들 모아놓은 헤더임. 약간 더 기능이 많은 EngineMinimal.h을 사용할 수도 있음.
~~.generated.h 헤더는 위 헤더들을 분석해서 다시 한 번 헤더툴이 정리해주는 헤더. 위쪽 헤더들을 참고해서 또 새로운 헤더에 필요한 코드를 만들어낸 헤더이기 때문에 맨 아래에 놔야함. 어기면 안 됨.
언리얼은 이미 모든 프레임워크의 단계를 완성해놨다.
ex) GameMode는 어느 시점에 만들어진다가 이미 정해져 있음. 내가 그걸 바꿀 수 없음.
우리는 그 기존 클래스들을 상속받는 나만의 클래스를 만들어서 언리얼이 하는 일 + 내가 시키는 일을 끼워넣기 식으로 처리하는 것이다.
Super::BeginPlay() 처럼 언리얼이 기본적으로 뭔가 하는 단계를 빼면 문제가 터짐.
ModuleDirectory
그냥 액터는 주인공아님. 입력못바듬. Pawn을 받아야 키보드 입력 받을 수 있다고 정했음.
AddMovementInput MovementComponent에 움직임 예약하는거. 중력, 모양 등등 다 감안한 움직임을 계산하고 움직여줌.
GEngine→AddOnScreenDebugMessage : 화면에 글자 띄워줌
MoveForward 입력할때만 들어오는게아니고 상시 들어옴??
언리얼은 초당 60프레임 제한걸려있음 그래서 델타타임을 곱해줘야 한다.
레벨에 존재해야한다 ⇒ AActor 생성
위치를 가져야 한다 ⇒ 내부에 SceneComponent를 상속받은 컴포넌트가 하나 들어가 있어야 함.
Static Mesh Renderer ⇒ 애니메이션 없는 매쉬 렌더링하는 렌더러
SkeletalMesh Renderer ⇒ 애니메이션 있는 매쉬를 렌더링하는 렌더러
이미지를 에디터에 끌어다 놓으면 그게 load끝난거임.
텍스처를 사용하기위해 Sprite 만들어야 함.