[UE4] Static/Dynamic Object 생성 방법.

* SkeletalMesh를 이미 UE4 Editor를 통해 만들었을 때를 기준으로 함
튜토리얼 및 대부분의 정보는 AActor클래스를 상속받은 액터 클래스 내부에서 ConstructorHelper::FObjectFinder를 통하여 생성된 Mesh를 읽어들이게 가이드 하고 있다.
- {
- static ConstructorHelpers::FObjectFinder< USkeletalMesh > NewMesh( TEXT( "/Game/SkeletalMeshPath" ) );
- if( NewMesh.Succeeded() )
- {
- /* below code is using if this block is class of component */
- SetSkeletalMesh( NewMesh.Object );
- /* If this code block is class of actor, should use like below code.
- Component->SetSkeletalMesh( NewMesh.Object );
- */
- }
- }
문제는 모든 메시별 클래스를 만들어줄 것인가? 에서 부터 시작되었는데, 만들어진 Mesh Path의 문자열만 가지고 Component object를 위한 Skeletal Mesh를 Actor loading단계에서 불러오고 싶은데, ConstructorHelper::FObjectFinder를 사용하게 되면 다음의 Crash 에 직면하게 된다.
(이런건 좀 튜토리얼 레벨에서 알려주면 안되나...)
- void ConstructorHelpers::CheckIfIsInConstructor(const TCHAR* ObjectToFind)
- {
- auto& ThreadContext = FUObjectThreadContext::Get();
- UE_CLOG(!ThreadContext.IsInConstructor, LogUObjectGlobals, Fatal, TEXT("FObjectFinders can't be used outside of constructors to find %s"), ObjectToFind);
- }
해결방법은 다음의 소스코드를 사용하면 해결된다. (삽질한 시간대비 참 허무한 결과...)
- void UEquipment::SetContentMesh( const TCHAR* ContentPath )
- {
- USkeletalMesh* NewMesh = Cast< USkeletalMesh >( StaticLoadObject( USkeletalMesh::StaticClass(), NULL, ContentPath ) );
- if( NewMesh )
- {
- SetSkeletalMesh( NewMesh );
- }
- }
참고자료 : https://wiki.unrealengine.com/Dynamic_Load_Object
사용 안하는 쿠폰 각 게임 10장씩 보유중이니, 댓글로 원하는 게임과 받으실 메일 남겨주시는 분들께 수시로 확인하고 지급해드리도록 하겠습니다.
연락처 공개가 꺼려지시는 분들은 상단의 Guest Book에 비밀글로 남겨주셔도 무관합니다.
( 이미 오픈 쿠폰 사용하신분들은 중복 사용 안됩니다. )
선착순 각 게임마다 10명씩입니다.
그냥 갖다 쓸 수 있도록 공개하면 좋겠으나, 조용히 소리소문없이 낼름 갖다 쓰시는분들이 계시기 때문에.. 이리 불편한 절차를 ^^
쿠폰이 관리가 안될것을 우려해서 비공개 오픈을 하려고 했는데, 기간이 오늘까지인 쿠폰들도 있고 하니 그냥 오픈합니다.
1. [샤이닝 스토리] 3월 31일까지 사용 가능 - 남은수량 10개
65F4 - C17E - B63B - 4C57
2141 - 1376 - 83AA - 451A
9892 - 8355 - 4D4B - 43B9
8638 - CC4C - FAA8 - 4B52
435B - 8BF1 - 5678 - 41BB
46F0 - 4F8D - 3636 - 41D5
914B - 6EB5 - 7F7B - 46D2
9A5F - 12BF - 11E3 - 4950
D6EB - C5A1 - 1E16 - 4451
D370 - 1AEE - 117C - 4BE7
2. [가디언스리그] 6월 2일까지 사용 가능 - 남은수량 10개
37E0 - 3810 - B24A - 4F50
C65F - 687B - D9C5 - 4271
2E80 - D025 - 5EB1 - 45F3
DF37 - 77CA - E060 - 44D6
B109 - E8C3 - 9299 - 49F0
6249 - C195 - 5163 - 4D7B
3A00 - 2173 - 61E2 - 4F30
4E50 - 3F45 - FF81 - 4DD1
54E9 - 3BD8 - 2ED0 - 409F
A071 - FD46 - 9CD4 - 4956
3. [세븐나이츠] 3월 31일까지 사용 가능 - 남은수량 10개
51D4 - 7D8B - 5B40 - 4BA9
14C6 - 7E6C - 7928 - 4C65
A120 - BA47 - E00F - 405C
6D94 - 45D6 - E884 - 4214
1C36 - 9BE6 - D2DC - 42B3
E2CF - 8226 - 93A5 - 4D1E
0128 - E287 - B34F - 4AE7
7DCB - C087 - 6B7D - 45E4
6FFE - 7E90 - A275 - 40AE
BBA6 - 1AA1 - 3553 - 4F5C
4. [다함께 붕붕붕] ( 기간 제약 없음 ) - 남은수량 10개
BDAA - 6320 - 6384 - 4F50
4856 - E600 - 8837 - 4586
F008 - 3DDD - 49A8 - 4BD4
E790 - FFE9 - 87DD - 418D
DCCA - FDE6 - 3B09 - 40DE
F541 - E24A - 5B81 - 40D7
D7BE - A489 - 77DB - 4C43
58B5 - B861 - 382C - 41BE
C237 - E9A1 - 8787 - 4F47
E184 - 2CFE - A18C - 42E5
cocos2d-x 프로젝트를 visual studio로 작업하고 apk 생성을 위해 작업을 진행하던중 다음과 같은 오류가 발생합니다.
version : visual studio 2012, ndk r9
jni 폴더의 Application.mk 파일에 다음 라인을 마지막에 삽입하면 오류 없이 컴파일이 진행됩니다.
( 혹은 APP_CPPFLAGS의 마지막에 -Wno-error=format-security 를 추가해줘도 됩니다. )
APP_CFLAGS += -Wno-error=format-security
근데 이게 매번 프로젝트 생성해줄때마 해주는게 번거롭다는 생각이 들었습니다...
쭉 살펴보니, cpp 프로젝트의 경우 sample/HelloCpp/proj.android 에서 template을 끌어오는걸 확인했네요.
( 왜 template 폴더가 아닌거야 응? -_- )
cocos2d-x root 디렉토리의 sample/HelloCpp/proj.android/jni/Application.mk 파일 맨 아래에도 위 라인을 삽입해주면 앞으로 생성되는 프로젝트는 다 달려서 나옵니다.