목록언리얼/언리얼 C++ (12)
안선생의 개발 블로그
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bdEGRl/btsJbhjQLET/ylvGinOlGHBl5jd8saMGL0/img.png)
하드 참조 (Hard Reference)직접 참조: 하드 참조는 리소스를 직접 참조하는 방식입니다. 예를 들어, 특정 오브젝트나 액터에 대해 하드 참조를 사용하면, 그 오브젝트가 필요할 때마다 언리얼 엔진은 해당 오브젝트를 메모리에 항상 로드해 둡니다.메모리 사용: 하드 참조는 메모리에 상주하게 되므로, 큰 오브젝트나 많은 리소스를 하드 참조할 경우 메모리 사용량이 증가할 수 있습니다.로드 타임: 하드 참조된 오브젝트는 게임이 시작되거나 해당 오브젝트가 필요할 때 미리 로드되기 때문에, 필요할 때 바로 사용할 수 있지만, 초기 로드 시간은 길어질 수 있습니다.소프트 참조 (Soft Reference)참고로, 소프트 참조는 필요할 때만 리소스를 로드하는 방식으로, 메모리 관리에 유리하지만, 처음 접근할 때..
전역 C++ 함수 : BindStatic API를 사용해 등록 전역 C++ 람다 함수 : BindLambda API를 사용해 등록 C++클래스 멤버 함수 : BindRaw API를 사용해 등록 공유포인터 클래스의 멤버 함수 (쓰레드 미지원) : BindSP API를 사용해 등록 공유포인터 클래스의 멤버 함수 (쓰레드 지원) : BindThreadSafeSP API를 사용해 등록 UFUNCTION 멤버 함수 : BindUFunction API를 사용해 등록 언리얼 오브젝트의 멤버함수 : BindUObject API를 사용해 등록 위 API 목록 중에서 우리가 바인딩하려는 RequestTokenComplete 함수는 언리얼 오브젝트 ABGameInstance의 멤버 함수 이므로, CreateUObject를 ..
TObjectPtr은 UObject에 대한 포인터 유형입니다. 원시 포인터 멤버 속성을 대체합니다. 64비트 포인터와 동일한 크기이며 편집기 빌드에서 액세스 추적 및 선택적 지연 로드 동작을 지원합니다. 참조된 개체에 대한 주소 또는 아직 로드되지 않은 참조된 개체를 설명하는 개체 핸들 테이블의 인덱스(편집기 빌드에서)를 저장합니다. 이는 UObject에 대한 원시 포인터와 동일하게 직렬화됩니다. 해결되면 가비지 수집에 참여하는 것은 UObject에 대한 원시 포인터와 동일합니다. 이는 고급 요리 시간 종속성 추적 및 편집기 시간 지연 로드 사용 사례를 지원하기 위해 원시 포인터를 자동으로 교체하는 데 유용합니다. 공식문서에서 보면 위와 같다 더알아봤는데 원시 포인터와 동일하게 동작하지만 편집기에는 액세..
OnComponentBeginOverlap 컴포넌트 간의 겹칠때 호출되는 이벤트입니다. 캐릭터가 만약 특정 지점에 갈 시 레벨이 이동 되거나 할 때 쓰거나 캐릭터가 총에 맞을 때 데미지 구현 할 때 등등 정말 많이 쓰니 알아두도록 하자 사용방법 헤더파일 UFUNCTION() void OnComponentBeginOverlap( UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult ); private: { UPROPERTY(VisibleAnywhere) TObjectPtr..
인터페이스 인터페이스 클래스는 (잠재적으로) 무관한 클래스 세트가 공통의 함수 세트를 구현할 수 있도록 하는 데 쓰입니다. 그대로라면 유사성이 없었을 크고 복잡한 클래스들에 어떤 게임 함수 기능을 공유시키고자 하는 경우 매우 좋습니다. 예를 들어 트리거 볼륨에 들어서면 함정이 발동되거나, 적에게 경보가 울리거나, 플레이어에게 점수를 주는 시스템을 가진 게임이 있다 칩시다. 함정, 적, 점수에서 ReactToTrigger (트리거에 반응) 함수를 구현하면 될 것입니다. 하지만 함정은 AActor 에서 파생될 수도, 적은 특수 APawn 또는 ACharacter 서브클래스일 수도, 점수는 UDataAsset 일 수도 있습니다. 이 모든 클래스에 공유 함수 기능이 필요하지만, UObject 말고는 공통 조상이..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cjptvi/btszUzzLITK/RHi2gGglU7ErG4HEtLBeKk/img.png)
1. C++ 클래스 생성해 줍니다. 툴->C++클래스 생성하기 2. C++에서 원하는 코드를 작성합니다. 3. C++로 컴파일해서 언리얼을 열어줍니다. 4. 원하는 곳에 우클릭 -> 블루프린트 클래스 -> 모든 클래스 -> 만든 C++이름 검색 5. 만든 액터를 레벨로 드래그 해주고 실행! 그러면 C++에서 작성한 코드가 실행되는걸 알 수 있습니다. 이렇게 C++이랑 블루프린트 연결하실수 있어요. 연결한 블루프린트 클래스는 C++로 작성해도 되고 블루프린트에서 작성해도 실행된답니다! 한번 해볼까요? C++로만든 블루프린트 클래스에다 프린트 스프링 해볼게요 그러고 실행하면? 둘다 출력이 되는걸 알 수 있어요! 이렇게 연결해서 쓰면 C++로 복잡한거 작성하시거나 블루프린트로도 같이 혼합해서 사용하면 더 깔끔..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bPsp1Q/btszyRuiDAq/naDLlvaNHUOMWtY5NZzsX0/img.png)
라이브 코딩 라이브 코딩은 엔진이 실행 중인 동안 애플리케이션의 C++ 코드를 리빌드하고 바이너리를 패치할 수 있는 시스템입니다. 즉 C++에서 컴파일 안하고 실시간으로 코딩하는 방법이다. 라이브 코딩은 게임 개발의 생산성을 향상시키고 개발 시간을 단축하는 데 도움이 됩니다. 라이브 코딩 사용처 언리얼 에디터에서 애플리케이션을 편집하는 경우 에디터에서 플레이(PIE)로 애플리케이션을 실행하는 경우 디버깅 용도로 에디터에 어태치된 애플리케이션의 패키지 데스크톱 빌드를 실행하는 경우 라이브 코딩 기능 실시간 코드 수정: 개발자는 게임 실행 중에 코드를 수정하고 이 변경 사항을 즉시 게임에 적용할 수 있습니다. 디버깅 및 테스트: 라이브 코딩을 통해 코드 디버깅 및 테스트를 진행하면서 문제를 더 빠르게 해결할..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bdKa2A/btszj7x8f2x/evHuYSzEZ0s8HftVBkMlv1/img.png)
생성자, BeginPlay, Tick 아래와 같이 액터 클래스를 처음 생성하면 보통 이 3가지는 기본으로제공 해주는데 과연 이것이 무엇인지 오늘은 이 3가지의 대해서 알아보겠습니다. 생성자 말 그대로 생성될 때 호출된다. 생성자에서 보통 기본값이나 액터의 프로퍼티를 초기화해 준다. BeginPlay() 비긴플레이도 말 그대로 시작할 때 딱 한번 호출되는 함수이다. 쉽게 말하자면 게임이 시작되었음을 알리는 함수라고 생각하면 된다. Tick 틱함수는 매 프레임마다 호출됩니다. 쉽게 말하자면 게임이 시작되면 계속 실행되는 함수라고 생각하면 된다. 틱함수를 쓸려면 생성자에 있는 PrimaryActorTick.bCanEverTick = true; 해주셔야 합니다. 아래 로그를 출력해서 각각 무슨 역할을 하는지 제..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/luVOu/btszlaVh5Wm/45k7l8cNP7TQHbOEarZPh1/img.png)
첫번 째 방법 1. 메인 에디터에서 툴-> 새로운 C++클래스 선택 두번쨰 방법 1. 콘텐츠 드로우에서 C++클래스 폴더의 오른쪽 화면에서 우클릭 -> 새C++클래스 선택 2. 그러면 C++ 클래스 마법사가 뜨며, 원하는 클래스를 선택해줍니다 없으면 모든 클래스를 선택 후 검색해서 찾아줍니다. 일반 클래스 모든 클래스 원하는 클래스를 선택하고 다음을 클릭 3. 새로운 클래스에 이름을 입력하라는 창이 뜹니다. 입력한 다음클래스 생성버튼을 누릅니다. 그러면 헤더(.h) 와 소스(.cpp) 파일이 생성됩니다. 클래스 이름은 알파벳과 숫자만 가능하며, 공백은 불가능합니다. 잘못된 이름을 입력하면 입력칸을 통해 알 수 있습니다. 클래스 타입을 퍼블릭이나 프라이빗으로 폴더형식으로 정리 할 수 있습니다. 큰 파일은 ..
언리얼 클래스 언리얼 엔진의 모든 게임플레이 클래스는 클래스 헤더 (.h) 파일과 클래스 소스 (.cpp) 파일로 이루어져 있습니다. 클래스 헤더에는 클래스와 그 멤버, 즉 변수와 함수에 대한 선언이 들어 있는 반면, 클래스 구현에는 해당 클래스에 속하는 함수 구현 (implement)을 통해 클래스의 함수성을 정의하는 곳입니다. 언리얼 엔진의 클래스에는 표준화된 작명 규칙이 있어, 클래스 이름 첫 글자, 다른말로 접두사만 봐도 클래스의 종류를 바로 알 수 있다. A 스폰가능한 게임플레이 오브젝트의 베이스 클래스에서 확장됩니다. 이들은 Actor, 액터로 월드에 바로 스폰 가능합니다. (APawn,ACharacter)등 Actor에서 파생됨 U 모든 게임플레이 오브젝트의 베이스 클래스에서 확장됩니다. 월..