midas+son의 크리에이티브(creative) 이야기

FString CommonFunc::ConvertHexToFString(FString& inStr)

{

FString resultString;


int count = inStr.Len() / 4;

for (int i = 0; i < count; i++)

{

FString tempFString = inStr.Mid(i * 4, 4);

std::string tempStr(TCHAR_TO_UTF8(*tempFString));

int strHex = strtoul(tempStr.c_str(), 0, 16);


resultString.AppendChar(strHex);

}


return resultString;

}



한글이 유니코드(2byte)로 되어있을 때

16진수(hex)나 2진(binary)가 아니라 

스트링(FString)으로만 구성되어있을때 

변환하는 방법을 찾았다.

(예를 들면 "레벨"이라는 한글이 "B808BCA8"로 들어올 때, "레"가 "B808"이다.)


한글 한글자 16진수 코드 4개로 이루어져 2byte이고

이를 숫자로 바꾸었다. (std::string으로 바꾸고 strroul함수 사용)


그리고 wchar_t라는 와이드캐릭터셋 변수에 넣으면

숫자를 알아서 한글로 바꾸어준다.

언리얼4의 FString은 내부적으로 wchar_t의 배열이므로

AppendChar()함수에 숫자로 변환한 값을 넣어주면

FString에 한글이 정산적으로 들어가는 것을 확인할 수 있다.


별도의 인코딩 함수가 없어서 고생했다. 

완성된 문자열로 들어온 값이라 hex가 아니라 스트링으로만 인식 된다.

wchar_t 의 속성을 나중에야 찾아서 그제서야 해결했다.

'공부 > Unreal 4' 카테고리의 다른 글

언리얼 코딩 표준  (0) 2017.02.13
유용한 사이트  (0) 2017.02.06
언리얼4 체인 효과 내기  (0) 2017.01.11
언리얼 인벤토리 시스템 자료  (0) 2017.01.11
블루프린트 받아올 때 실수한 부분  (0) 2017.01.10

https://www.youtube.com/watch?v=Fqp4Lh2FF0M


FBX를 임포트 하고 스켈레탈메시 블루프린트에서 

체인 효과를 내는 방법이 

잘나와있는 유튜브 영상이다.


크레인과 후크에 적용하기 괜찮아서 적용해보았다.


좋은 자료를 찾아서 기록용으로 작성


https://www.youtube.com/watch?v=kpzd3yFxj74

유튜브 동영상


https://drive.google.com/file/d/0B45Kp15-PhyOWXQ3SzdTVjBtWmM/view

관련 언리얼프로젝트 받을 수 있는 구글 드라이브(블루프린트 Only)

//PathToBlueprint : 블루프린트 경로 FString

//FStringAssetReference ItemToReference(PathToBlueprint);

//UObject* ItemObject = ItemToReference.ResolveObject();

if ((MyWorld))

{

//UBlueprint* GeneratedBP = Cast<UBlueprint>(ItemObject);

UBlueprint* GeneratedBP = Cast<UBlueprint>(StaticLoadObject(UBlueprint::StaticClass(), NULL, *PathToBlueprint));

return MyWorld->SpawnActor<AMeshActor>(GeneratedBP->GeneratedClass, SpawnLocation, SpawnRotation, SpawnInfo);

}

FStringAssetReference 에 대해 ResolveObject()로 오브젝트를 받아올 때

에디터 모드에서는 정상적으로 블루프린트를 가져왔지만

exe빌드(실행모드) 에서는 관련 속성이 nullptr이 나왔었다.


그리하여 StaticLoadObject로 가져오니 

정상적으로 실행모드에서도 블루프린트의 모든속성을 정상적으로 가져오게 되었다.

void Function(FString path)

{

//std::string filename(TCHAR_TO_UTF8(*path));

//인코딩 문제 발생 : https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/StringHandling/CharacterEncoding/


const wchar_t* ptr = *path;

int csize = 128; //글자 바이트 제한

char* tempFileName = new char[csize];

char def = '?';


//함수 참고 Url : https://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx

WideCharToMultiByte(CP_ACP, 0, ptr, -1, tempFileName, csize, &def, NULL);


std::string fileName(tempFileName);

delete[] tempFileName;

}

TCHAR_TO_UTF8로 받으면 ???으로 한글이 바뀐다.

WideCharToMultiByte 를 사용하여 처리하면 한글로 제대로 보여지게 된다.

각 주석의 url을 걸어놨으니 확인해보자.

c++ 에서 Ubutton에 Onclicked.Add() 로 동적인 함수를 호출 하고자

TScriptDelegate<FWeakObjectPtr> 변수에 BindUFunction을 하였다.

함수가 받는 파라미터가 없으면 괜찮게 동작하는데

파라미터를 받는 함수는 에러가 난다.

파라미터를 넘기는 부분을 찾았으나 없었고

Although templated, the parameter is not intended to be anything other than the default, and is only a template for module organization reasons.

이라는 것을 찾았다.


오직 모듈 구성상으로만 이용되며 파라미터를 받지 못하는 것 같다.

다른 방법을 찾아 강구 해봐야 겠다.