[언리얼엔진] C++로 UI, UMG에 접근하기, C++로 게임 내 클래스 찾기
·
unreal engine
경로는 /Game/PuzzlePlatforms/BP_PlatformTrigger이다. //BPClass인 TriggerPlatform를 C++로 찾아보기 //FClassFinder을 사용한다. ConstructorHelpers::FClassFinder PlatformTriggerBPClass(TEXT("/Game/PiuzzlePlatforms/BP_PlatformTrigger")); //nullptr인지 확인한다. //포인터가 저장되는곳은 .Calss이기에 꼭 기억하자 if (!ensure(PlatformTriggerBPClass.Class != nullptr)) return; mPlatformTrigger = PlatformTriggerBPClass.Class; //문자열을 얻어온다. 포인터이기에 *를..
[언리얼엔진] 언리얼엔진 C++ GameInstance 게임 인스턴스와 Exec
·
unreal engine
게임 인스턴스 생성 .. 일반 클래스에 없기에 모든 클래스에서 찾아야한다. 게임 인스턴스를 프로젝트 세팅에서 생성한것으로 교체한다. https://docs.unrealengine.com/5.0/en-US/API/Runtime/Engine/Engine/UGameInstance/ UGameInstance GameInstance: high-level manager object for an instance of the running game. docs.unrealengine.com UGameInstanceGameInstance: 실행 중인 게임의 인스턴스에 대한 상위 수준 관리자 개체입니다. //게임 인스턴스 생성자, Init보다 먼저 실행된다. UPuzzlePlatformsGameInstance(const F..
[언리얼엔진] C++로 트리거함수 콜백시키기, 트리거로 다른 오브젝트 작동
·
unreal engine
UPROPERTY(EditAnywhere) TArray LinkedMovingPlatforms; 트리거 플랫폼에서 트리거가 발생하면 다른 컴포넌트에게 특정한 함수를 호출하게 해야한다. 대상은 무빙플랫폼 void ActiveTrigger(); void DeactiveTrigger(); UPROPERTY(EditAnywhere) int RemainActiveTriggersNum; 무빙플랫폼에서 실행할 함수와 움직이기위한 조건인 Remain 선언 void AMyMovingPlatform__A::Tick(float DeltaTime) { Super::Tick(DeltaTime); //남은 트리거 개수가 0보다 크면 -> 필요한것이 남아있는것... -> 작동 못하게 if (RemainActiveTriggersNu..
[언리얼엔진] C++로 트리거 재정의하기 (AddDynamic)
·
unreal engine
[UE4]CreateDefaultSubobject CreateDefaultSubobject 는 클래스를 인스턴스화 시키는 메소드 이다. AS 2.0 에서의 attachMovie 와... blog.naver.com public ... // declare overlap begin function UFUNCTION() void OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult); // declare overlap end f..
[언리얼엔진] C++로 움직이는(왕복) 물체 만들기
·
unreal engine
// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Engine/StaticMeshActor.h" #include "MyMovingPlatform__A.generated.h" /** * */ UCLASS() class PUZZLEPLATFORMS_API AMyMovingPlatform__A : public AStaticMeshActor { GENERATED_BODY() public: protected: private: AMyMovingPlatform__A(); virtual void BeginPlay() override; virtu..
[언리얼엔진] C++로 컴포넌트 생성하기
·
unreal engine
https://docs.unrealengine.com/4.27/en-US/API/Runtime/CoreUObject/UObject/UObject/CreateDefaultSubobject/2/ UObject::CreateDefaultSubobject Create a component or subobject, allows creating a child class and returning the parent class. docs.unrealengine.com 구성 요소 또는 하위 개체를 만들고 자식 클래스를 만들고 부모 클래스를 반환할 수 있습니다. template TReturnType * CreateDefaultSubobject ( FName SubobjectName, bool bTransient ) thi..
[언리얼엔진] Gizmo로 FVector 이동, 월드좌표로 변환
·
unreal engine
TargetLocation을 기즈모로 나타냄 UPROPERTY(EditAnywhere, Meta = (MakeEditWidget = true)) FVector mTargetLocation; mTargetLocation은 Actor의 자식 오브젝트이다. 상대좌표로 나오기에 의도하지 않은 방향으로 이동함. mTargetLocation을 월드좌표로 변환해야함. //방향은 목적지 - 현재위치에서 GetSafeNormal로 한다. //자식 오브젝트인 mTargetLocation은 World좌표로 변환시킨다. this->mDirection = (GetTransform().TransformPosition(mTargetLocation) - GetActorLocation()).GetSafeNormal(); void AM..
[언리얼엔진] Authotiry와 멀티플레이 관계
·
unreal engine
UE5는 중앙서버가 자신의 정보를 접속한 클라이언트들에게 복제하는 방식으로 구현됨. Authority를 통해 서버 권한인지 확인 후, 계산을 하고 클라이언트들로 그 결과를 복제(준다)한다. void AMovingPlatform_B::Tick(float DeltaTime) { //서버의 권한인가?, 서버에서 실행하나? //!HasAuthority일경우 클라이언트의 권한. if (HasAuthority()) { //이동 FVector Location = GetActorLocation(); Location += mSpeed * DeltaTime; //위치 변경 SetActorLocation(Location); } } Tick마다 서버의 권한일경우만 (오소리티가 있는경우?) 해당 액터를 옮기는것을 계산함. vo..
[언리얼엔진] 클라이언트 - 서버 모델, 커맨드로 언리얼 실행
·
unreal engine
커맨드로 언리얼 클라 - 서버 모델을 이용하기 위해선 에디터 경로 + 프로젝트 경로가 필요하다 프롬프트에서 UE5 경로 + 프로젝트 경로를 하면 게임으로 실행하려면 (클라이언트) 마지막에 '-game'을 붙인다. C:\Users\vldkd>"C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\Win64\UnrealEditor.exe" "F:\Local\UnrealEngine\PuzzlePlatforms 5.0\PuzzlePlatforms.uproject" -game 클라이언트로 실행이 되는 모습을 볼 수 있음. 접미사 -game 게임으로 (클라)로 연다 -log 로그를 출력한다. -server 서버로 열기 아이피주소 해당 아이피 주소로 접속 /Game/경로/맵이름 ..
[언리얼엔진] C++에서 메뉴 탐색하기
·
unreal engine
C++에서 위젯스위처를 획득해야한다. 버튼을 획득하기위해 BindWidget을 했던것과 동일하게 하나 클래스 타입은 해당 오브젝트위에 마우스를 올려놓으면 WidgetSwitcher처럼 나온다. UWidgetSwitcher을 사용하면 됨. 위젯스위처 UWidgetSwitcher*을 이용하여 변수를 선언하고 헤더파일에는 WidgetSwitcher 헤더를 포함시켜서 사용한다. //Join 버튼에 사용할 클래스 UPROPERTY(meta = (BindWidget)) class UButton* BTN_Join; //위젯스위처에 사용 UPROPERTY(meta = (BindWidget)) class UWidgetSwitcher* MenuSwitcher; https://docs.unrealengine.com/4.26..
[언리얼엔진] 위젯 스위처를 지닌 서브 메뉴
·
unreal engine
위젯스위처로 자식들을 인덱스번호에 맞게 출력할 수 있다. 여러가지의 기능을 구현하고 필요에맞게 해당 인덱스를 출력함 인덱스번호에 해당하는 UI가 나타나게 된다. 인덱스번호가 0번이면 타이틀 메뉴가 나온다. 인덱스번호가 1번이면 Join 메뉴가 나온다. 인덱스번호에 나오는 순서는 위젯 스위처의 자식의 순서이다.
[언리얼엔진] 메뉴 버튼 비활성화 (GameModeInput)
·
unreal engine
현재 메뉴에서 호스트버튼을 누르면 호스팅 함수까지 실행이 정상적으로 이루어지나, 그 후 입력이 처리되지 않은 문제가 발생함. -> 여전히 입력이 메뉴에 전달되기때문 번외로 GameInstance의 LoadMenu의 함수에 메뉴를 뷰포트로 포함시키고 설정하는 내용의 위치가 적절하지 않아 MainMenu.cpp에 옮긴다. 인스턴스에 있는 LoadMenu()의 내용을 MainMenu->Setup으로 옮긴다. GameInstance에서 GetPlayerController을 MainMenu클래스에서는 사용할 수 없기때문에 UWorld에서 호출하는 방식으로 찾아서 완성시킨다. UWorld* World = GetWorld(); //플레이어 컨트롤러 획득 APlayerController* PlayerController..
[언리얼엔진] 종속성 반전 인터페이스 (inverting dependencies)
·
unreal engine
모든 게임 내의 여러 UI 오브젝트를 메뉴시스템으로 종속시키려고한다. 게임 -> 메뉴시스템 (컴파일 타임) 메뉴시스템 게임 (양방향 호출, 런타임 종속성) Unreal Interface C++ 생성 추가는 했지만 핫리로드 컴파일이 실패한경우 이전 글에서 다룬것처럼 VS를 열어 수정한다. #include "MenuInterface.h" Cpp 파일을 위와같이 수정한다. // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "UObject/Interface.h" #include "MenuInterface.generated.h" // 두개의..
[언리얼엔진] 언리얼 모션 그래픽을 C++에 연결
·
unreal engine
UserWidget C++ 클래스 생성한다. 자동컴파일이 실패한경우 cpp파일에 MainMenu.h 를 포함시킨다. //자동 생성된 5번 줄을 //#include "MenuSystem/MainMenu.h" //아래 줄 8번 줄로 바꾼다. #include "MainMenu.h" 이렇게 바꿔줘야 컴파일이 가능해짐 (버그인듯) MainMenu UI의 부모를 재지정 해준다 (C++로) 부모를 변경한 모습. https://benui.ca/unreal/ui-bindwidget/ Connect C++ to UMG Blueprints with BindWidget How to control logic from C++ and configure visuals in Blueprints. benui.ca MainMenu.h에서..
[언리얼엔진] 커스텀 버튼과 폰트
·
unreal engine
이미지와 버튼 커스텀 Image 오브젝트의 외관 탭에서 이미지를 넣을 수 있다. https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/UMG/UserGuide/Styling/ Styling A guide to stylizing Widget Blueprints in UMG. docs.unrealengine.com 이미지를 스케일링 하면 가운데 부분이 늘어나거나 줄어든다. 전체적인 스케일 변경이 아님. 이미지가 9개의 조각으로 나위어져 중간부분이 크기가 변한다. 스케일링 비율은 다음으로 드로 속성에 따라 다르다 Border일경우 보더를 지정하여 늘리기 비율을 조절한다 Image일경우 일반적인 이미지 스케일링 방식을 따른다. 글꼴 _ 폰트 구글폰트에..
[언리얼엔진] ue4 위젯 레이아웃 고급기능
·
unreal engine
레이아웃 오브젝트에는 자식 슬롯이 있다. 버튼이나 텍스트같은 오브젝트들은 하나의 자식 슬롯이 있기 때문에 하나의 자식만 할당할 수 있다. 하지만 CanvasPanel과 같은것들은 여러개의 자식슬롯이 있다.' 슬롯 프로퍼티는 부모의 성질에 따라 다르게 나타난다. 캔버스 위젯의 프로퍼티는 앵커를 설정한다. 사이즈 박스로 래핑이 가능하다. 크기를 재지정할수있음. 사이즈박스를 버튼 사이에 배치하여 공간을 두게 만들 수 있다!! 이미지 이미지를 삽입하면 맨위로 나타나는것을 ZOrder로 렌더링 순서를 지정할 수 있다. 오버레이패널에서 자식의 순서가 렌더링의 순서가 된다. Image가 먼저일경우, Image 출력 -> Vertical 출력.
[언리얼엔진] ue4 위젯 UI 입력 모드 변경하기 (입력모드, 커서보이기)
·
unreal engine
https://lfio.tistory.com/19 UMG 셋팅하고 적용하기 프로젝트 파일로 가서 source -> 프로젝트이름 폴더 -> 프로젝트이름 .build.cs 라는 c#문서를 열어서 UMG를 추가해준다. 에디터에서 마우스오른클 ->유저 인터페이스 -> 위젯 블루프린트를 만들고 대충 lfio.tistory.com https://docs.unrealengine.com/4.26/en-US/API/Runtime/Engine/GameFramework/APlayerController/SetInputMode/ APlayerController::SetInputMode Setup an input mode. docs.unrealengine.com https://docs.unrealengine.com/4.26/en..
[언리얼엔진] C++에서 언리얼 모션 그래픽(UMG) 로드 및 표시하기
·
unreal engine
//GameInstance에서 LoadMenu Exec 함수 생성 UFUNCTION(Exec) void LoadMenu(); https://docs.unrealengine.com/4.27/en-US/API/Runtime/UMG/Blueprint/CreateWidget/ CreateWidget docs.unrealengine.com void UPuzzlePlatformsGameInstance::LoadMenu() { //생성자에서 mMenuClass가 할당되지 않을경우 리턴한다. (이전 장에서 다룸) if (!ensure(mMenuClass != nullptr)) return; //CreateWidget함수로 위젯을 생성한다. UUserWidget* Menu = CreateWidget(this, mMenu..
[언리얼엔진] C++에서 UI 클래스에 엑세스 / FClassFinder / UMG Module
·
unreal engine
http://egloos.zum.com/sweeper/v/3208657 [UE4] ConstructorHelper::FObjectFinder/FClassFinder 1. ConstructorHelper 참고 : 애셋 레퍼런싱의 생성시간 레퍼런싱 이름에서 알 수 있듯이 ConstructorHelper는 UObject의 Constructor(생성자)에서만 사용 가능하다. (즉, CDO 제작에서만 사용된다는 얘기) 아래 FObj egloos.zum.com FClassFinder을 이용하여 PlatformTrigger을 찾아보자 #include "PlatformTrigger.h" GameInstanc의 생성자에서 찾을것이기에 헤더를 포함시킨다. 위 UObject/.... 도 포함시킨다. #include "Pla..
[언리얼엔진] WBP 앵커 + Host, Join UI 만들기
·
unreal engine
앵커가 모여있을경우 XY 위치 property 앵커 꽃잎이 떨어져있는경우 내부의 오브젝트 크기가 상대적으로 변경됨 offset pos property 현재 계층구조 호스트 / 조인할 UI 만들기 * 버튼에는 Text Property가 없어서 텍스트를 따로 만들었음. * 버튼 안에 Text를 자식으로 넣어서 만듦 * 하나의 오브젝트에 두개의 자식을 넣을 수 없다. * 자식의 자식을 가지고 그 자식이 다른 자식을 가지는 방식.
[언리얼엔진] ClientTravel (클라이언트트래블)
·
unreal engine
https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/GameFramework/APlayerController/ClientTravel/ APlayerController::ClientTravel Travel to a different map or IP address. docs.unrealengine.com
[언리얼엔진] ServerTravel (서버트래블)
·
unreal engine
https://docs.unrealengine.com/4.26/en-US/API/Runtime/Engine/Engine/UWorld/ServerTravel/ UWorld::ServerTravel Jumps the server to new level. docs.unrealengine.com void UPuzzlePlatformsGameInstance::Host() { UEngine* Engine = GetEngine(); if (!ensure(Engine != nullptr)) return; Engine->AddOnScreenDebugMessage(0, 2, FColor::Green, TEXT("호스팅")); UWorld* World = GetWorld(); if (!ensure(World != nullp..
[언리얼엔진] exec를 사용한 콘솔 명령
·
unreal engine
Exec가 가능한 클래스: 플레이어 컨트롤러 빙의된 폰 HUD 치트 매니저 게임모드 게임 인스턴스 https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/UEngine/AddOnScreenDebugMessage/1/ UEngine::AddOnScreenDebugMessage Add a [FString](API\Runtime\Core\Containers\FString) to the On-screen debug message system. docs.unrealengine.com Key: -1, 0 : 기존 메세지를 덮어쓸것인가? 새 메세지를 출력할것인가 출력시간? 색상 메시지 exec로 Join, Host 임시 명령어 만들기 UFUNCTION(..
[언리얼엔진] game instance (게임 인스턴스)
·
unreal engine
https://docs.unrealengine.com/4.26/en-US/API/Runtime/Engine/Engine/UGameInstance/ UGameInstance GameInstance: high-level manager object for an instance of the running game. docs.unrealengine.com gameinstance는 레벨이 변경되어도 초기화되지 않는 강력한 기능 -> 데이터를 유지. ☆ GameInstance::Init과 클래스 생성자의 차이점? 이니셜라이저를 사용하면 obj가 생성된 후에 obj의 속성을 설정할 수 있지만 그 전에는 다른 많은 작업을 수행할 수 있습니다. 그리고 어떤 이유로 초기화가 실패할 수 있지만 생성자는 그렇지 않습니다. 따라..
[언리얼엔진] add dynamic overlap event
·
unreal engine
트리거 박스 만들기 //동적 이벤트는 UFUNCTION()을 써준다 UFUNCTION() //오버라이드 void OnOverlapBegin(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult); //cpp에서 재정의 void APlatformTrigger::OnOverlapBegin(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex,..
bonnate
'UE' 태그의 글 목록