UE4 CurveTable에 대한 메모
12250 단어 위 4UnrealEngine4UnrealC++
개요
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++에서 검색 코드 예제입니다.
.hUPROPERTY()
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명의 룰 결정이 필요하다고 생각됩니다.
요약
커브는 여러 종류가 많고, 에디터의 뷰도 다르기 때문에 주의가 필요한 것 같습니다.
커브 테이블은 심플한 만들기 때문에 캐릭터의 파라미터 보간 등의 용도로 사용할 수 있다고 생각합니다.
Reference
이 문제에 관하여(UE4 CurveTable에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/unknown_ds/items/03c75c2b74411c5f5a58
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
언리얼에는 커브 애셋이 많이 있습니다.
↑ 커브가 아닌 데이터 테이블 파생 커브 테이블을 다룹니다.
커브 테이블 자산 만들기
먼저 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명의 룰 결정이 필요하다고 생각됩니다.
요약
커브는 여러 종류가 많고, 에디터의 뷰도 다르기 때문에 주의가 필요한 것 같습니다.
커브 테이블은 심플한 만들기 때문에 캐릭터의 파라미터 보간 등의 용도로 사용할 수 있다고 생각합니다.
Reference
이 문제에 관하여(UE4 CurveTable에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/unknown_ds/items/03c75c2b74411c5f5a58
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
커브는 여러 종류가 많고, 에디터의 뷰도 다르기 때문에 주의가 필요한 것 같습니다.
커브 테이블은 심플한 만들기 때문에 캐릭터의 파라미터 보간 등의 용도로 사용할 수 있다고 생각합니다.
Reference
이 문제에 관하여(UE4 CurveTable에 대한 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/unknown_ds/items/03c75c2b74411c5f5a58텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)