ExtendText Example Project

UE4의 플러그인인 ExtendText의 예제 프로젝트 입니다.

ExtendText 플러그인이 설치되어 있어야 사용 가능합니다.

Example Link

Advertisements

UE4, OnlineSubsystemFacebook(iOS) 사용하기.

HumanDevil 프로젝트는 Facebook 계정을 연동하여 플레이 할 수 있다.

Android 같은 경우에는 다운받은 FacebookSDK.jar을 추가하여 직접 사용하였지만,

iOS나 Window같은 경우에는 OnlineSubsystem으로 Facebook이 제공이 된다.

 

필요한 Module이름은 OnlineSubsystemFacebook이며 아래와 같이 Project.Build.cs에 추가하면 된다.

if ( Target.Platform == UnrealTargetPlatform.IOS )
{
PrivateDependencyModuleNames.Add("OnlineSubsystemFacebook");
}

 

그 다음 필요한 것은 Config/DefaultEngine.ini 파일을 수정하는 것이다.

OnlineSubsystemFacebook 코드 내부에는 아래와 같은 코드가 있으며,

GConfig->GetBool( 
TEXT("OnlineSubsystemFacebook"), 
TEXT("bEnabled"), 
bEnableFacebook, 
GEngineIni);

bEnableFacebook 값이 false이면, OnlineSubsystemFacebook이 생성되지 않는다.

Config/DefaultEngine.ini 파일에 아래의 코드를 넣어준다.

[OnlineSubsystemFacebook]
bEnabled=true

그 다음으로 해야할 것은 .plist 파일을 수정하는 것인데, 이것은 빌드시에 매번 자동으로 생성이 되는것 이다.
우리가 필요한 정보를 넣기 위해선 에디터에서 추가하거나 직접 Config 파일에 추가하는 것인데,
에디터에서는 IOS 설정에서 Extra Plist Data에 필요한 데이터들을 추가하면 된다.
필요한 데이터는 Facebook Developer 사이트를 참고하면 된다.

<key>FacebookAppID</key>	
<string>정보</string>	
<key>FacebookDisplayName</key>	
<string>정보</string>	
<key>CFBundleURLTypes</key>	
<array>
	<dict>		
	<key>CFBundleURLSchemes</key>	
		<array>	
			<string>정보</string>
		</array>
	</dict>	
</array>

이제 Facebook을 사용할곳에서 OnlineSubsystemFacebook.h를 포함한 후에 코드를 작성 하면된다.

간단히 Login 하는 방법을 나열하자면,
1. IOnlineSubsystem::Get(TEXT(“Facebook”)); 이와 같은 방법으로 OnlineSubsystem을 가져온다.
2. 가져온 시스템에서 GetIdentityInterface()를 이용하여 IdentityInterface를 얻어온 후, Login()를 호출하면 된다.
3. Login이 되던, 실패하던 어떠한 이벤트를 전달 받으려면 델리게이트를 추가해줘야 한다.

AddOnLoginCompleteDelegate_Handle(
0,
FOnLoginCompleteDelegate::CreateUObject(
this, 
&Class::Function));

이와 같이 추가한 후, 전달받은 정보를 통하여 로직을 구성하면 된다.

사용하지 않는 리소스들을 제외하여 쿠킹 했을 시, 리소스 동적 로드가 실패할 경우..

블루프린트와 코드를 폴리싱하는 중,
어느 순간 부터 모바일 배포 버전에서 아이템 아이콘들만 보이지 않는 문제가 발생 했다.

캡처
아주 가끔 몇몇 리소스들이 쿠킹되지 않는 경우가 있어서 대수롭지 않게 클린 빌드를 하였다.
하지만 그렇게 해결이 되었다면 이 글을 쓰지 않았다-_-..

결론을 말하자면, 빌드 과정에서 아이콘 리소스가 모조리 빠져서 패키징이 되어버렸기 때문이다.
리소스가 없으니.. 당연히 동적 로드는 실패하고, 아이콘은 보이지 않았던 것이다.

모바일 배포 버전을 만들때는 에디터에서 하지 않고, AutomationTool 을 이용하여 직접 빌드를 한다.
이유는 리소스의 압축과 사용되지 않는(레퍼런스 되지 않은) 리소스들을 제외하고 빌드를 하기 위해서다.
문제가 발생하기 이전에는 블루프린트에서 기존의 아이템 코드에 따라 특정 리소스를 일일이 다 셋팅을 해주었었다.
이 과정에서 리소스들은 레퍼런스가 되었고, 당연히 빌드에 포함이 되어 패키징이 되었다.

하지만 아이콘이 점점 많아 짐에 따라 유지보수가 어려워지므로, 리소스 경로를 이용하여 동적 로드를 하게 하였고 아이콘 텍스처들은 다른 블루 프린트 내에서 직접 쓰이지 않는 이상 레퍼런스 되지가 않는다. 이 상태에서 빌드를 진행하면, 레퍼런스되어 있지 않기 때문에.. 당연히 제외 되었다. 생각한 해결 방법은..

  1. 빌드를 할 떄 무조건 포함하여야할 리소스들을 알려주는 것이다.
  2. 어디서든 해당 리소스들을 레퍼런스 시키는 것

=== 150606 추가.

첫번째 방법을 찾았다.

-CookDir=”dir1″ + “dir2” 를 추가하여 빌드를 하면 된다.

추가 끝===

하지만 첫번째 방법은 쉽게 방법을 찾지 못했고, 임시로 두번째 방법을 사용하였다.
블루프린트 내에서 각각 리소스를 레퍼런스하는 노드를 만드는것 ㅠㅠ.
직접 실행이 되지 않는 노드들이고.. 오로지 리소스를 레퍼런스하여 빌드에 포함되게 하려는 용도 이다.
캡처 캡처
빌드를 하니 잘 보인다..
주말에 시간이 남으면 첫번째 방법이나 더 좋은 방법을 찾아봐야겠다.

UE4에서 Android 외부 저장소 경로….

4.7.6 기준)… FFileHelper 같은 파일을 다룰 때, 기본 경로는 넥서스4 기준으로 /mmt/sdcard/게임이름/ 였다. 파일이나 디렉토리도 잘 생성됨.. 하지만 Android.cpp에 선언되어 있는 GFileBasePath나 GExternalFilePath? 같은 경로로는 파일이나 폴더를 생성 할 수 없다. 퍼미션도 줬는뎅..

2015년 Unreal Summit 참가!

5월 9일 세종대 컨벤션 홀에서 열린 Unreal summit에 참가 했다.

원래는 전쟁기념관에서 개관될 어벤져스 전시회를 가려 했으나, 15일로 연기되는 바람에…

정말 좋은 내용들이 많았으나, 가장 기억에 남는 내용은 두 가지 같다.

첫째로 4.8 버전에서 추가되고 향상된 오픈 월드에 대한 기능들.

둘째로 패치 시스템.

아무래도 가장 관심이 가는 부분이다 보니.. 더 좋은 내용들보다 기억에 남는다.

지금 작업하는것이 모바일 게임인지라, 패치 시스템 우선 구현해보기로 했다.

Unreal Engine4, 모바일 패치 시스템 만들기(작성 중)