class reference 기반 spawn 플로우

Detail Pannel에서 [class reference]칸 만들기

  1. ADisPatcherChild를 상속하는 클래스 중 선택
    1. UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dispatcher")
         TSubclassOf<ADisPatcherChild> ChildClass;
      
  2. 선택된 class의 객체 만들기
    1. [SpawnActorDeferred<AActor> 사용]
      1. TempChild = GetWorld()->SpawnActorDeferred<AActor>(ChildClass, FTransform(TargetLoc), nullptr, nullptr, ESpawnActorCollisionHandlingMethod::AlwaysSpawn);
        TempChild->FinishSpawning(FTransform(TargetLoc));
      2. Cast는 따로 해줘야 함 ( return값은 AActor type )

 

좌표 변환

예시 : 

TargetLoc = FScaleRotationTranslationMatrix(FVector(0, 0, 0), FRotator(0, 0, 0), FVector(0, 0, 0)).TransformPosition(TargetLoc);
  • (combine)(dependent)(select)FScaleMatrix.(FVector).TransformPosition(location)(FVector)Rotation(FRotator)Vector(direction)Translation(FVector)

 

function Override

  1. 필요한 argument들을 가진 method를 만든다. ( header & source ) ( copilot🧡 )
  2. [Component or Actor] → [Target function].AddDynamic( target instance, ref 위에서만든 method )
    1. BP에선 override function인데, 가상함수가 아님.. arguments입력시의 휴먼에러 대한 무결성을 보장해주지는 않는듯?
    2. 원하는 method를 특정 event에 matching시켜주는 형태 ( parameter는 수기입.. )
      1. 필요한 argument들을 가진 method를 만든다. ( header & source ) ( copilot🧡 )
      2.  
      3. [Component or Actor] → [Target function].AddDynamic( target instance, ref 위에서만든 method )
        1. BP에선 override function인데, 가상함수가 아님.. arguments입력시의 휴먼에러 대한 무결성을 보장해주지는 않는듯?
        2. 원하는 method를 특정 event에 matching시켜주는 형태 ( parameter는 수기입.. )

 

코드에서 경로로 에셋 참조하기

SkeletalMesh3에게 "주소"가 참조하는 class를 <USkeletalMesh>의 ptr 타입을 포함한 클래스 반환 ( ptr은 .Object에 저장 )
이렇게 반환받은 SkeletalMesh3에 .Object var에 저장 ( USkeletalMEsh ptr 타입으로 )

'Unreal > UE Architecture' 카테고리의 다른 글

Unreal Interface  (0) 2024.06.16
Gameplay Ability System  (0) 2024.06.13
문자열 처리  (0) 2024.05.16
UE Macro & Reflection System  (0) 2024.05.16
Smart Pointer & Container & Serialize  (0) 2024.05.16

'Unreal > BP & UE Library' 카테고리의 다른 글

code 내장 함수  (0) 2024.05.17
BP Interface  (0) 2024.05.16
BP node list 1  (0) 2024.05.16
UE Dispatch & Delegate  (0) 2024.05.16
BP Node 리스트  (0) 2024.05.16
  • #pragma once : 다중상속 중 일부클래스 중첩 시 에러(중복적용)을 막기 위해, 1번만컴파일 선언 ( 헤더의 최상단에 입력 )
  • Kismet/GameplayStatics.h
    • UGamePlayStatics
      • GetPlayerController
  • ObjectGlobals
    • NewObject<template>(owner, template::StaticClass());
  • APlayerController*
    • → GetViewTarget()  #해당 컨트롤러의 view가 빙의한 Camera 참조
    • SetViewTarget(arg)  #해당 PC의 view를 arg(Camera)에 빙의
    • SetViewTargetWithBlend(arg1, arg2)  #위와동일, arg2는 blend time
    • GetViewportSize(int&, int&)
    • SetMouseLocation(int, int)
    • GetAudioListenerPosition(FVetor&, FVector&, FVector&) : 위치, 앞방향, 오른쪽방향
    • ULocalPlayer* ( 접근 : Cast<ULocalPlayer>(Player) )
      • ViewportClient
        • ShouldAlwaysLockMouse()
    • GetHitResultAtScreenPosition(FVector2 ViewportClient→GetMousePosition(넣을 FVector2D), TEnumAsByte<ECollisionChannel> APlayerController::CurrentClickTraceChannel, bool (trace complex여부), FHitResult (HitResult 반환할 변수))
  • UParticleSystemComponent*
  • USphereComponent*
  • CreateDefaultSubobject<Component타입>(TEXT(Component네임))
  • RootComponent  #해당 actor의 rootComponent_ set/get
  • SetupPlayerInputComponent(UInputComponent)
  • PlayerInputComponent : UInputComponent형의 플레이어 입력 저장 큐
    • BindAxis(프로젝트세팅_Input_AxisMapping 이름(str), this, &호출함수), 입력명의 Scale(float)값을 호출함수의 인자로 전달 ( 호출함수는 float arg를 하나 가져야 함 )
  • Actor
    • (T) GetComponentByClass(T::StaticClass()) : return actor의 T형 component
    • (T) FindComponentByClass(T::StaticClass()) : return actor의 T형 component ( 차이는 모름 )
  • Cast<T>(component*) : return component의 T형변환Pawn : APawn형
    • Controller : 제어자, AController형
      • → GetControlRotation() : FRotator형
    • Character
      • AddControllerYawInput : 마우스좌우효과 (화면돌리기)
      • AddControllerPitchInput : 마우스 상하효과 (화면돌리기)
      • bPressedJump : Bool형, 점프효과(true 점프를 누르고있는 상태 → false 후 다시 true로 변해야 점프효과 발생)
    • AddMovementInput(방향, 속도)
    • SetupPlayerInputComponent(UInputComponent* PlayerInputComponent);
  • UE
    • FMath
      • TRotationMatrix<double>
      • Clamp(value1, min, max)
  • USkeletalMeshComponent
    • → SetOnlyOwnerSee(bool)
  • UObject
    • CreateDefaultSubobject<type>(name)
  • RotationMatrix(Rotatior)
    • .GetScaledAxis(EAxis::축)
  • F(Scale)(Rotation)(Translation)Matrix([vector]scale, [rotator]rotation, [vector]translation).transform[Position/Vector] : 좌표계 변환 ( 직교좌표계 → 직교좌표계 한정 )
  • GEngine→AddOnScreenDebugMessage(타입-1, int 시간, FColor::색상, TEXT 내용)
  • GetPawn() : controller가 빙의한 pawn을 return. 비어있을 시 nullptr 반환
  • World : GetWorld( )
    • DeltaSeconds : GetDeltaSeconds( )
  • 통합
    • DrawDebugDirectionalArrow(월드_GetWorld(), FVector(시작위치), ~~ )

 

'Unreal > BP & UE Library' 카테고리의 다른 글

Class Name 접두  (0) 2024.05.17
BP Interface  (0) 2024.05.16
BP node list 1  (0) 2024.05.16
UE Dispatch & Delegate  (0) 2024.05.16
BP Node 리스트  (0) 2024.05.16

exec

 

stat scenerendering : 씬 렌더링 프로퍼티

 

'Unreal > Editor Interface' 카테고리의 다른 글

Main Screen  (0) 2024.05.16

Char[] → FString

Char[] ← *FString ↔ FCString

 

Char[]
FString
FCString
Char[]   FString   FCString
Char[]
( *Char )
-> FString <-> FCString
Char[]
( *Char )
<- *FString    

 

FString

FCString

  • 메모리수준 조작이라고 하는데 사실 언제 쓸지 감이 안잡힘 

 

'Unreal > UE Architecture' 카테고리의 다른 글

Gameplay Ability System  (0) 2024.06.13
Cpp -> BP Pipeline 1  (0) 2024.05.17
UE Macro & Reflection System  (0) 2024.05.16
Smart Pointer & Container & Serialize  (0) 2024.05.16
Input  (0) 2024.05.16

Unreal Macro 선언 및 flag

  • UCLASS( )
  • UENUM( )
    • BlueprintType : Blueprint에서 read / write 가능
  • USTRUCT
    • Atomic : 하나단위로 직렬화
    • BlueprintType : Blueprint에서 read / write 가능
  • UFUNCTION( )
    • BlueprintCallable : Blueprint에서 사용 가능
    • Category = <string>("TopCategory|SubCategory|Etc") : function은 필수 항목
  • UPROPERTY( )
    • EditAnywhere / VisibleAnywhere : architecture type / level에 배치된 instance 양쪽에서 수정 가능
    • BlueprintReadWrite / BlueprintReadOnly : blueprint에서 read, write
    • Category = <string> : detail 패널에서 categorizing

 

Refleaction System

클래스 관리, 참조, 접근을 위해 클래스 포맷을 관리하는 시스템

  • C#이나 Java같은 후발 객체지향언어에는 언어자체에서 구현되어있는 개념

 

UBT(unreal build tool) 및 UHT(unreal header tool)을 통해 모사

  • 클래스 생성 시, 클래스에 대한 형태를 관리하는 매크로를 자동 생성
  • 런타임에 클래스 포맷 혹은 포맷분석을 통해 역으로 바이너리 데이터를 탐색/조작하기 위함 ( 자기 자신을 파악 )
  • UHT에 의해 만들어진 리플렉션 포맷 파일은 intermediate 폴더 내에 자동으로 생성
    • 구문이 변경될떄마다 자동으로 수정됨
    • 컴파일 분석 수준의 기능은 제공하지 않음
  • 주 용도
    • 런타임에 class내의 property 접근(읽기/쓰기) ( editor환경 등 )
    • 직렬화
    • 자체적인 GC시스템
  • 주 관리
    • <UClass> {class}::staticclass를 통해 class포맷에 접근 가능 ( 자기자신은 getClass() )
      • createdefaultsubobject(cdo), newobject(runtime)
      • <UProperty> FindPropertyByName
    • 생성자에서 명시한 건 CDO(class default object) 수준에서 관리 ( UClass에서 CDO를 참조함 )
    •  
  • 클래스 하이어라키
    • UField
      • UStruct
        • UClass
        • UScriptStruct
        • UFunction
      • UEnum
      • UProperty

 

'Unreal > UE Architecture' 카테고리의 다른 글

Cpp -> BP Pipeline 1  (0) 2024.05.17
문자열 처리  (0) 2024.05.16
Smart Pointer & Container & Serialize  (0) 2024.05.16
Input  (0) 2024.05.16
기본 구성  (0) 2024.05.16
  • Subsystem 의 자식class들은 자동으로 SubsystemCollection class에 의해 생성, 관리됨
    • ubsystemCollectionBase::Initialize
      에서 생성
    • USubsystem* GetSubsystemInternal(UClass* SubsystemClass) const;
      에서 관리되며, 외부에서는 UWorld.GetSubsystem<class명>( ) 을 통해 접근 가능
      • 주로 static ::get( ) 에 해당 메서드를 연결시키는 듯

'Unreal > UE Class :: UObject' 카테고리의 다른 글

Field  (0) 2024.05.16
기본 구성 리스트  (0) 2024.05.16
Procedural Mesh  (0) 2024.05.16

Smart Pointer

  • 구조
  • 구성
  Own the object Prevent Deletion Unique Property Converted by
TSharedPtr yes yes
(ref counting)
can point null MakeShared()
TSharedRef yes yes must point valid object MakeShareable()
TWeakPtr no no breaks ref cycle  
  • TSharePtr - 참조 카운트 기반 GC, 오브젝트 소유
  • TShareRef - Ptr과 동일하나, null값 미허용
  • TWeakPtr - Ptr과 동일하나, 오브젝트 미소유
  • TUniquePtr - Ptr과 동일하나, 하나의 오브젝트는 여러개의 UniquePtr을 가질 수 없음 ( 소유권 이전은 가능 )
  • ( MakeSharable )

 

Hard, Soft referencing

    • A가 B를 Hard Reference 하고 있다면, A가 로딩될 때 B도 로딩된다.
      반면 A가 B를 Soft Reference 한다면, B 애셋의 경로 등을 string의 형태로 가지고 있다는 뜻이다.

Direct Property Reference (Hard Reference)

    • UPROPERTY를 붙여 변수를 선언하면, 해당 변수(혹은 블루프린트)가 로드될 때 이에 대응하는 애셋 또한 로딩된다.
    • Hard Reference
      /** construction start sound stinger */
      UPROPERTY(EditDefaultsOnly, Category=Building)
      USoundCue* ConstructionStartStinger;

Construction Time Reference (Hard Reference)

    • ConstructorHelpers 클래스를 이용해 애셋을 로딩할 때도 동일하다.
    • Hard Reference
      /** gray health bar texture */
      UPROPERTY()
      class UTexture2D* BarFillTexture;
       
      AStrategyHUD::AStrategyHUD(const FObjectInitializer& ObjectInitializer) :
          Super(ObjectInitializer)
      {
          static ConstructorHelpers::FObjectFinder<UTexture2D> BarFillObj(TEXT("/Game/UI/HUD/BarFill"));
          assert(nullptr != BarFillObj);
          BarFillTexture = BarFillObj.Object;
      }

Indirect Property Reference (Soft Reference)

    • FSoftObjectPath를 이용해 경로를 보관한다. 그 후 TSoftObjectPtr를 사용해 템플릿화 된 코드를 저장한다.
      실제로 애셋을 로딩할 때는 LoadObject<T>() 함수를 호출해야 한다.
    • Soft Reference
      UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category=Building)
      TSoftObjectPtr<UStaticMesh> BaseMesh;
       
      UStaticMesh* GetLazyLoadedMesh()
      {
          if (BaseMesh.IsPending())
          {
              const FSoftObjectPath& AssetRef = BaseMesh.ToStringReference();
              BaseMesh = Cast< UStaticMesh>(Streamable.SynchronousLoad(AssetRef));
          }
          return BaseMesh.Get();
      }

Find / Load Object (Soft Reference)

    • UPROPERTY를 이용하지 않고, 애셋과 경로 정보를 가지고 직접 애셋을 로드할 수 도 있다.
      만약 이미 로드된 애셋(혹은 UObject)을 찾는다면 FindObject<T>()를 사용하면 된다.
      만약 로드되지 않은 애셋을 로드하고 싶다면 LoadObject<T>()를 사용한다.
    • Soft Reference
      AFunctionalTest* TestToRun = FindObject<AFunctionalTest>(TestsOuter, *TestName);
      GridTexture = LoadObject<UTexture2D>(NULL, TEXT("/Engine/EngineMaterials/DefaultWhiteGrid.DefaultWhiteGrid"), NULL, LOAD_None, NULL);

 

Container

  • Common
    • 값복사 : FMemory::Memcpy( {복사될 컨테이너}, {복사할 컨테이너}, 복사할 메모리 크기 ( ex, sizeof(int32) * {복사될 컨테이너}.Num )
    • 언리얼 배열 초기화 : { 값1, 값2, ... 값n }
    • 기본 메서드
      • Num : 배열 길이 반환
      • Add / Emplace : 끝에 값 추가 ( add는 임시변수에 넣은 다음 컨테이너에 복사하므로, 보통 emplace가 낫다는듯 )
    • Contains는 체크용. (if true, get return)값도 얻을거면 Find

 

 

 

  •  TMap
    • key-value map
    • Find( {key} ) → return할때 value의 pointer를 반환하는것에 주의
    • 동적배열이라 iteration 속도 괜춘
    • 해시 기반이라 searching 빠름 ( TSet 형태 따름 )
      • 기본이 key값 Unique. key값 중복 필요하면 TMultiMap 사용
    • TSet의 항목을 TPair<KeyType, ValueType>으로 구성한 구조

 

  • UStruct
    • Generated_body 매크로 선언시, 실제로는 UScriptStruct 클래스로 구현됨
      • 제한적 리플렉션. UPROPERTY만 선언가능, UFUNCTION은 불가
    • F가 접두로 붙음
      • 힙 메모리 할당(포인터 연산) 없이 스택내 데이터로 사용 ( new, newobject 사용 불가 )

 

 

Serialize

  • Path Manager
    • FPaths
      • <FString> Combine ( <FString> PrePath, <FString> PostPath ) : 경로 string을 합쳐주는듯..? 그냥 concat, join이랑 동일한듯..?
        • 사이에 "/" 붙여주는 듯
      • <void> MakeStandardFileName ( <FString> 변환할 ptr ) : 변환할 ptr을 스탠다트 경로로 바꿔줌 ( 절대경로)
        • 현재의 상대경로를 절대경로로 변경 해줌
    • FPlatformMisc
      • <FString> ProjectDir( ) : 프로젝트 루트 경로 반환

 

'Unreal > UE Architecture' 카테고리의 다른 글

Cpp -> BP Pipeline 1  (0) 2024.05.17
문자열 처리  (0) 2024.05.16
UE Macro & Reflection System  (0) 2024.05.16
Input  (0) 2024.05.16
기본 구성  (0) 2024.05.16

+ Recent posts