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


* SkeletalMesh를 이미 UE4 Editor를 통해 만들었을 때를 기준으로 함


튜토리얼 및 대부분의 정보는 AActor클래스를 상속받은 액터 클래스 내부에서 ConstructorHelper::FObjectFinder를 통하여 생성된 Mesh를 읽어들이게 가이드 하고 있다.

  1. {  
  2.     static ConstructorHelpers::FObjectFinder< USkeletalMesh > NewMesh( TEXT( "/Game/SkeletalMeshPath" ) );  
  3.     if( NewMesh.Succeeded() )  
  4.     {  
  5.         /* below code is using if this block is class of component */  
  6.         SetSkeletalMesh( NewMesh.Object );  
  7.         /* If this code block is class of actor, should use like below code. 
  8.             Component->SetSkeletalMesh( NewMesh.Object ); 
  9.         */  
  10.     }  
  11. }  


문제는 모든 메시별 클래스를 만들어줄 것인가? 에서 부터 시작되었는데, 만들어진 Mesh Path의 문자열만 가지고 Component object를 위한 Skeletal Mesh를 Actor loading단계에서 불러오고 싶은데, ConstructorHelper::FObjectFinder를 사용하게 되면 다음의 Crash 에 직면하게 된다.

(이런건 좀 튜토리얼 레벨에서 알려주면 안되나...)

  1. void ConstructorHelpers::CheckIfIsInConstructor(const TCHAR* ObjectToFind)  
  2. {  
  3.     auto& ThreadContext = FUObjectThreadContext::Get();  
  4.     UE_CLOG(!ThreadContext.IsInConstructor, LogUObjectGlobals, Fatal, TEXT("FObjectFinders can't be used outside of constructors to find %s"), ObjectToFind);  
  5. }  


해결방법은 다음의 소스코드를 사용하면 해결된다. (삽질한 시간대비 참 허무한 결과...)

  1. void UEquipment::SetContentMesh( const TCHAR* ContentPath )  
  2. {  
  3.     USkeletalMesh* NewMesh = Cast< USkeletalMesh >( StaticLoadObject( USkeletalMesh::StaticClass(), NULL, ContentPath ) );  
  4.     if( NewMesh )  
  5.     {  
  6.         SetSkeletalMesh( NewMesh );  
  7.     }  
  8. }  



참고자료 : https://wiki.unrealengine.com/Dynamic_Load_Object


2014. 3. 26. 12:27

[쿠폰번호] 샤이닝 스토리, 가디언스리그, 세븐나이츠, 다함께 붕붕붕 (선착순)


사용 안하는 쿠폰 각 게임 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


2013. 8. 28. 18:42

[Cocos2d-x] build_native.sh 오류 해결하기.

cocos2d-x 프로젝트를 visual studio로 작업하고 apk 생성을 위해 작업을 진행하던중 다음과 같은 오류가 발생합니다.


version : visual studio 2012, ndk r9


Compile++ thumb  : cocos2dx_static <= CCCommon.cpp
In function 'void cocos2d::CCLog(char const*, ...)':
CCCommon.cpp:44:72: error: format not a string literal and no format arguments [-Werror=format-security]
CCCommon.cpp: In function 'void cocos2d::CCLuaLog(char const*)':
CCCommon.cpp:54:77: error: format not a string literal and no format arguments [-Werror=format-security]
cc1plus.exe: some warnings being treated as errors


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 파일 맨 아래에도 위 라인을 삽입해주면 앞으로 생성되는 프로젝트는 다 달려서 나옵니다.