UE4 CurveTable에 대한 메모

개요



UnrealEngine 데이터 테이블의 커브 테이블에 대한 메모입니다.

환경



Windows10
Visual Studio 2017
UnrealEngine 4.22

참고



다음을 참고로 해 주셔서 감사합니다.

[UE4] CSV 데이터를 다루는 방법 CurveTable 편
UE4 값이 보완되는 CSV 파일 사용(Curve Table, Evaluate Data Table Row)

커브 테이블(CurveTable)



언리얼에는 커브 애셋이 많이 있습니다.



↑ 커브가 아닌 데이터 테이블 파생 커브 테이블을 다룹니다.

커브 테이블 자산 만들기



먼저 csv 데이터를 준비합니다.

CT_test.csv
,0,10,20,30,40,50,60,70,80,90,100
Curve01,10,11,12,13,50,51,52,53,1000,1100,1200
Curve02,20,21,22,23,24,25,500,600,700,800,900


콘텐츠 브라우저로 csv 데이터를 드래그 앤 드롭합니다.
데이터 테이블과 마찬가지로 가져오기 메뉴가 표시됩니다.



가져오기를 CurveTable, 곡선 보간 유형을 Liner를 선택합니다.
보간 타입에 따라 별도 선택이 필요합니다.

생성된 자산을 열면 데이터를 볼 수 있습니다.
csv 데이터와 동일합니다.


윈도우 -> CurveView를 선택하면 디스플레이가 전환됩니다.



미묘하게 보기 어렵지만, 곡선의 상태를 볼 수 있습니다.
(커브와 달리 왠지 커브 테이블은 줌할 수 없습니다.)

또한 커브 보간 유형은 처음 가져올 때 결정되며 변경할 수 없습니다.

보충



위의 예에서는 csv에서 만들었지만 데이터 테이블처럼 json에서도 만들 수 있습니다.
그 경우는 다음과 같은 JSON 데이터가 됩니다.

CT_test.json
[
    {
        "Name": "Curve01",
        "0": 10,
        "10": 11,
        "20": 12,
        "30": 13,
        "40": 50,
        "50": 51,
        "60": 52,
        "70": 53,
        "80": 1000,
        "90": 1100,
        "100": 1200
    },
    {
        "Name": "Curve02",
        "0": 20,
        "10": 21,
        "20": 22,
        "30": 23,
        "40": 24,
        "50": 25,
        "60": 500,
        "70": 600,
        "80": 700,
        "90": 800,
        "100": 900
    }
]

BP에서 곡선 데이터 획득



BP에서는 [Evalute Curve Table Row]를 사용하여 테이블 데이터와 행 이름을 지정하여 검색할 수 있습니다.
(소스는 "Engine\Source\Runtime\Engine\Private\DataTableFunctionLibrary.cpp"입니다)


위의 예에서는 [In XY]에서 15.0을 지정하고 있으므로 [Out XY]에서 11.5가 반환됩니다. (커브 보간 방법이 다르면 값도 바뀝니다)

C++에서 커브 데이터 획득



다음은 C++에서 검색 코드 예제입니다.

.h
UPROPERTY()
UCurveTable* CurveTable;

CurveTable 에셋의 포인터를 생성자 로 Find 해, FCurveTableRowHandle 경유로 취득하는지, 커브를 일단 보관 유지하고 나서 값을 취득합니다.

.cpp
#include "Classes/Engine/CurveTable.h"

// コンストラクタ
// CT_test というカーブテーブルを探す
static ConstructorHelpers::FObjectFinder< UCurveTable > find_curvetable(TEXT("CurveTable'/Game/CT_test.CT_test'"));
if (find_curvetable.Succeeded()) {
    CurveTable = find_curvetable.Object;
}

...

// カーブデータを取得例1
FCurveTableRowHandle _Handle;
_Handle.CurveTable = CurveTable;
_Handle.RowName = *FString::Printf(TEXT("Curve01"));
float _OutXY;
static const FString _ContextString(TEXT("GENERAL"));

if (_Handle.Eval(15.0f, &_OutXY, _ContextString)) {
    UE_LOG(LogTemp, Log, TEXT("OutXY = %f"), _OutXY);
}

// カーブデータを取得例2
auto _Curve = CurveTable->FindCurve(*FString::Printf(TEXT("Curve02")), _ContextString);
if (_Curve != nullptr) {
    UE_LOG(LogTemp, Log, TEXT("Value=%f"), _Curve->Eval(25.0f) );
}

복합 곡선 테이블(Composite Curve Table)



4.21부터 추가된 자산 유형인 것 같습니다.
여러 커브 테이블을 결합할 수 있습니다.



CT_test 와 CT_test2 의 커브 테이블을 정리하고 있습니다.


Row 데이터 검색은 일반 곡선 테이블과 마찬가지로 [Evalutate Curve Table Row] 노드를 사용하여 검색할 수 있는 것 같습니다.
컴포지트 커브 테이블을 사용하면 커브 보간 타입이 다른 커브 테이블을 정리하여 하나의 자산처럼 취급할 수 있습니다.

여러 개의 커브 테이블을 정리하기 때문에 Row 이름이 붙으면 어떻게 되는지는 검증할 수 없지만, 경고와 같은 것은 확인할 수 없었습니다.
사용하는 경우는 Row명의 룰 결정이 필요하다고 생각됩니다.

요약



커브는 여러 종류가 많고, 에디터의 뷰도 다르기 때문에 주의가 필요한 것 같습니다.
커브 테이블은 심플한 만들기 때문에 캐릭터의 파라미터 보간 등의 용도로 사용할 수 있다고 생각합니다.

좋은 웹페이지 즐겨찾기