2016-01-11
Kiyoung Moon
 Autodesk에서 제공하는 UI Solution
 플래시(Flash)를 만들고자 하는 응용 어플
리케이션에서 재생 및 상호작용 가능하게
해주는 미들웨어
 http://www.autodesk.com/products/scalefo
rm/overview
 플래시를 이용한 UI 구현, 특히 게임 UI를
제작할 때 디자이너 친화적인 환경 제공
 벡터 그래픽
 애니메이션 표현의 자유도 높음
 ActionScript(AS)를 통한 제어 자유도 높음
 쉽게 말해 플래시에서 표현 가능한 모든 것
들이 일반 응용 어플리케이션에서 표현 가
능함.
 UE4
 UnrealEngine4
 스케일폼을 UE4에 통합하여 플래시 재생
및 상호작용
 스케일폼의 구매 과정은 설명하지 않음
 진행하던 프로젝트의 이미지를 포함하고
있으므로 일부 이미지들은 못생긴 사각형
박스로 표현
 https://gameware.autodesk.com/developer
 사이트에서 Downloads탭을 선택하면 다음과 같은 화면이 나타난다.
 현재 사용하고 있는 엔진의 버전에 맞게
Integration 코드를 다운로드 받아야 한다.
현재 우리가 사용하고 있는 엔진 버전은
4.9.2이고 그에 맞는 sf_4.4_ue4_4.9.2.zip
를 다운로드 받는다.
 Scaleform SDK 역시 사용하고 있는 비주
얼 스튜디오 버전에 맞게 다운로드 받아주
자.
 Scaleform SDK
 Scaleform UE4 Integration
 2개를 받으면 된다. (하나도 아니고 두 개임)
 설치를 끝내면 브라우저를 실행할 수 있다.
 여기에서 대부분의 정보를 얻을 수 있다.
 앞서 엔진 버전에 맞는 통합 코드를 받아야
한다고 했다. 이것은 설치형 파일이 아니라
zip파일을 풀고 수동으로 통합을 해주어야
한다.
 Engine폴더에 있는 모든 소스 코드를 현재
사용하고 있는 엔진 코드에 Merge해야 한
다. 문서에는 overwriting이라는 적혀 있는
데 그냥 덮어 썼다간 엔진을 수정한 프로젝
트일 경우 소스를 날려 먹을 수 있다. 즉, 덮
어쓰지 않고 Merge해야 한다.
 Engine 폴더의 내용을 모두 합친 후에
GenerateProjectFiles.bat를 실행해서 솔루
션 파일을 만들면 통합 끝!
 평가판을 사용할 경우 오토데스크로부터
라이선스 키를 부여 받는데 이 키를 소스
코드에 등록해 주어야 제대로 사용이 가능
하다. 라이선스 키 확인은 게임웨어 사이트
에서 어카운트 정보를 보면 된다.
 라이선스 키를 적용하려면
ScaleformEngine.cpp파일을 찾은 후
Insert Scaleform License Key here라는 항
목을 검색해서 등록해주면 된다.
 AS2(ActionScript2)는 더 이상 지원하지 않는 경우도 있으므로 앞으
로 프로젝트를 진행하려면 AS3를 적극 사용할 것을 권한다.
 AS2를 사용하지 않는다면 다음과 같은 코드를 찾아서 주석 처리 하
자. 그러면 쓸모 없는 코드 사용을 하지 않게 된다.
 Ptr<GFx::ASSupport> pAS2Support = *SF_NEW GFx::AS2Support();
 mLoader.SetAS2Support(pAS2Support);
 만일 팀의 규모가 클 경우에 모든 개발자에게 스케일폼 SDK를 설치
하라고 하는 것은 좋지 못하다 그러므로 Prebuilt 형태로 제공하려면
다음과 같은 파일들을 모두 엔진에 복사해서 넣어주자.
 GFx SDK 4.3.283rdParty to UE4-
QAEngineSourceThirdPartyScaleformGFx3rdParty
 GFx SDK 4.3.28include to UE4-
QAEngineSourceThirdPartyScaleformGFxinclude
 GFx SDK 4.3.28libs to UE4-
QAEngineSourceThirdPartyScaleformGFxlibs
 GFx SDK 4.3.28Src to UE4-
QAEngineSourceThirdPartyScaleformGFxSrc
 핵심 에셋 타입으로는 SwfMovie,
GFxMoviePlayer가 있다. 이때 이 둘의 관
계는 다음과 같다.
 SwfMovie는 swf파일 내부에 있는 정보(텍
스쳐, 문자열 등)를 가지고 있고
MoviePlayer가 이것을사용한다. 이때 런타
임 정보들은 모두 GFxMoviePlayer가 가지
고 있는다. (예를 들어 AS의 상태)
GFxMoviePlayer SwfMovie
 MoviePlayer마다 사용자로부터 입력을 받는
다거나 받지 않는 것들이 존재한다. HUD의
경우 보통 사용자 입력을 받지 않는다. UE4에
서 이 두 에셋을 더블 클릭해서 보면 키보드
입력값을 처리하는지 여부, 마우스 처리를 하
는지 여부와 같은 설정 값들이 존재한다.
 보통 플레이어 HP의 경우 HUD로 Movie를 재
생해 사용자 입력을 배제하고 캐릭터 인벤토
리와 같은 위젯은 MoviePlayerBP를 사용하여
사용자 입력을 모두 처리하도록 한다.
 블루 프린트로 간단하게 플래시 파일을 화면에
등록해서 재생 가능하다. 레벨 블루 프린트를 연
후 다음과 같이 블루 프린트를 작성한다.
 F7키를 누르면 Open Movie를 사용해서
Window라는 플래시를 화면에 표시한다. 이때
Movie Player를 MoviePlayerBP를 사용했는
데 이는 사용자로부터 입력을 받아들일 수 있
는 플래시이기 때문이다. 만일 HUD와 같이
사용자 입력은 받지 않고 화면에 표시만 하는
역할이라면 MoviePlayerHUD를 사용하면 된
다. 추가로 Open Movie 이후에 SetViewport
를 사용해서 플래시 컨탠츠의 사이즈를 조절
하는 것을 볼 수 있다.
 C++에서 플래시 애니메이션을 재생하고 이것
을 컨트롤 하기 위해서 함수를 호출하거나 변
수 값을 변경할 수 있다. 가령 화면에 UI를 띄
우고 이 안의 내용을 변경할 때 (C++에서 원
하는 값을 화면에 표시할 때) 사용된다.
 이것은 MoviePlayer-
>Function( MovieClipName, Parameters );와
같이 호출할 수 있다.

 만일 플래시 내부 정보를 변경하려고 하면 함
수를 호출해 변수 값을 전달할 수 있다.
<Set Variable를 사용해 플래시 내부 정보를 변경하는 모습>
 주요하게 살펴볼 점은 Set Variable Value에 전달
하는 요소들이다. Movie Clip Name을 보면 현재
screen_message.textField를 사용하고 있는데
이것은 플래시에서 다음과 같다.
 동영상 클립의 이름이 screen_message
 screen_message에 textField가 있다. 이 textField
의 값을 ASValue로 변환해서 넣어주는데 현재는
문자열로 설정하기 위해서 ASString으로 전달했다.
이제 실행을 해보면 dsdfasdf라는 문자열이 바뀐
것을 확인할 수 있다.
 런타임에 문자열이 바뀐 것을 확인할 수 있다.
 C++에서 AS함수를 호출하는 것의 반대 역
시 가능하다. AS에서 ExternalInterface를
사용하면 된다. 다음과 같이 버튼이 존재하
고 AS를 작성할 때 다음과 같이 원하는
C++함수를 호출해주면 된다
 MoviePlayer를 생성하고 연결된
ExternalInterface 클래스에 다음과 같이
UFunction으로 등록해두면 AS에서 함수를 호
출 할 수 있다.
 MoviePlayer의 Close를 호출하면 메모리
가 해제되며 인수로 false를 넘기면 화면에
서만 사라지고 메모리에서 점유 되는 것을
볼 수 있다.
 언리얼 커맨드에서 stat Scaleform을 실행
하면 다음과 같이 스탯 정보를 볼 수 있다.
 주어진 플래시 영상을 화면에 표시하고
Close를 했을 때 메모리가 소멸되는 것을
확인할 수 있다.
 스케일폼에서 제공하는 모든 PDF문서들을 읽어 볼 것
 UE4의 업데이트 버전보다 항상 스케일폼이 느릴 수 밖에
없기 때문에 진행중인 프로젝트에서 엔진을 업데이트 할
때는 스케일폼에서 통합 코드를 제공하고 있는지 아닌지
의 여부에 따라 엔진 업데이트 시기 조절이 필요하다.
감사합니다

스케일폼(Scaleform) ue4에 통합 및 간단한 사용법

  • 1.
  • 2.
     Autodesk에서 제공하는UI Solution  플래시(Flash)를 만들고자 하는 응용 어플 리케이션에서 재생 및 상호작용 가능하게 해주는 미들웨어  http://www.autodesk.com/products/scalefo rm/overview
  • 3.
     플래시를 이용한UI 구현, 특히 게임 UI를 제작할 때 디자이너 친화적인 환경 제공  벡터 그래픽  애니메이션 표현의 자유도 높음  ActionScript(AS)를 통한 제어 자유도 높음  쉽게 말해 플래시에서 표현 가능한 모든 것 들이 일반 응용 어플리케이션에서 표현 가 능함.
  • 4.
     UE4  UnrealEngine4 스케일폼을 UE4에 통합하여 플래시 재생 및 상호작용
  • 5.
     스케일폼의 구매과정은 설명하지 않음  진행하던 프로젝트의 이미지를 포함하고 있으므로 일부 이미지들은 못생긴 사각형 박스로 표현
  • 6.
  • 7.
     사이트에서 Downloads탭을선택하면 다음과 같은 화면이 나타난다.
  • 8.
     현재 사용하고있는 엔진의 버전에 맞게 Integration 코드를 다운로드 받아야 한다. 현재 우리가 사용하고 있는 엔진 버전은 4.9.2이고 그에 맞는 sf_4.4_ue4_4.9.2.zip 를 다운로드 받는다.  Scaleform SDK 역시 사용하고 있는 비주 얼 스튜디오 버전에 맞게 다운로드 받아주 자.
  • 9.
     Scaleform SDK Scaleform UE4 Integration  2개를 받으면 된다. (하나도 아니고 두 개임)
  • 11.
     설치를 끝내면브라우저를 실행할 수 있다.  여기에서 대부분의 정보를 얻을 수 있다.
  • 12.
     앞서 엔진버전에 맞는 통합 코드를 받아야 한다고 했다. 이것은 설치형 파일이 아니라 zip파일을 풀고 수동으로 통합을 해주어야 한다.
  • 14.
     Engine폴더에 있는모든 소스 코드를 현재 사용하고 있는 엔진 코드에 Merge해야 한 다. 문서에는 overwriting이라는 적혀 있는 데 그냥 덮어 썼다간 엔진을 수정한 프로젝 트일 경우 소스를 날려 먹을 수 있다. 즉, 덮 어쓰지 않고 Merge해야 한다.  Engine 폴더의 내용을 모두 합친 후에 GenerateProjectFiles.bat를 실행해서 솔루 션 파일을 만들면 통합 끝!
  • 15.
     평가판을 사용할경우 오토데스크로부터 라이선스 키를 부여 받는데 이 키를 소스 코드에 등록해 주어야 제대로 사용이 가능 하다. 라이선스 키 확인은 게임웨어 사이트 에서 어카운트 정보를 보면 된다.
  • 17.
     라이선스 키를적용하려면 ScaleformEngine.cpp파일을 찾은 후 Insert Scaleform License Key here라는 항 목을 검색해서 등록해주면 된다.
  • 18.
     AS2(ActionScript2)는 더이상 지원하지 않는 경우도 있으므로 앞으 로 프로젝트를 진행하려면 AS3를 적극 사용할 것을 권한다.  AS2를 사용하지 않는다면 다음과 같은 코드를 찾아서 주석 처리 하 자. 그러면 쓸모 없는 코드 사용을 하지 않게 된다.  Ptr<GFx::ASSupport> pAS2Support = *SF_NEW GFx::AS2Support();  mLoader.SetAS2Support(pAS2Support);  만일 팀의 규모가 클 경우에 모든 개발자에게 스케일폼 SDK를 설치 하라고 하는 것은 좋지 못하다 그러므로 Prebuilt 형태로 제공하려면 다음과 같은 파일들을 모두 엔진에 복사해서 넣어주자.  GFx SDK 4.3.283rdParty to UE4- QAEngineSourceThirdPartyScaleformGFx3rdParty  GFx SDK 4.3.28include to UE4- QAEngineSourceThirdPartyScaleformGFxinclude  GFx SDK 4.3.28libs to UE4- QAEngineSourceThirdPartyScaleformGFxlibs  GFx SDK 4.3.28Src to UE4- QAEngineSourceThirdPartyScaleformGFxSrc
  • 19.
     핵심 에셋타입으로는 SwfMovie, GFxMoviePlayer가 있다. 이때 이 둘의 관 계는 다음과 같다.  SwfMovie는 swf파일 내부에 있는 정보(텍 스쳐, 문자열 등)를 가지고 있고 MoviePlayer가 이것을사용한다. 이때 런타 임 정보들은 모두 GFxMoviePlayer가 가지 고 있는다. (예를 들어 AS의 상태) GFxMoviePlayer SwfMovie
  • 20.
     MoviePlayer마다 사용자로부터입력을 받는 다거나 받지 않는 것들이 존재한다. HUD의 경우 보통 사용자 입력을 받지 않는다. UE4에 서 이 두 에셋을 더블 클릭해서 보면 키보드 입력값을 처리하는지 여부, 마우스 처리를 하 는지 여부와 같은 설정 값들이 존재한다.  보통 플레이어 HP의 경우 HUD로 Movie를 재 생해 사용자 입력을 배제하고 캐릭터 인벤토 리와 같은 위젯은 MoviePlayerBP를 사용하여 사용자 입력을 모두 처리하도록 한다.
  • 21.
     블루 프린트로간단하게 플래시 파일을 화면에 등록해서 재생 가능하다. 레벨 블루 프린트를 연 후 다음과 같이 블루 프린트를 작성한다.
  • 22.
     F7키를 누르면Open Movie를 사용해서 Window라는 플래시를 화면에 표시한다. 이때 Movie Player를 MoviePlayerBP를 사용했는 데 이는 사용자로부터 입력을 받아들일 수 있 는 플래시이기 때문이다. 만일 HUD와 같이 사용자 입력은 받지 않고 화면에 표시만 하는 역할이라면 MoviePlayerHUD를 사용하면 된 다. 추가로 Open Movie 이후에 SetViewport 를 사용해서 플래시 컨탠츠의 사이즈를 조절 하는 것을 볼 수 있다.
  • 23.
     C++에서 플래시애니메이션을 재생하고 이것 을 컨트롤 하기 위해서 함수를 호출하거나 변 수 값을 변경할 수 있다. 가령 화면에 UI를 띄 우고 이 안의 내용을 변경할 때 (C++에서 원 하는 값을 화면에 표시할 때) 사용된다.  이것은 MoviePlayer- >Function( MovieClipName, Parameters );와 같이 호출할 수 있다.   만일 플래시 내부 정보를 변경하려고 하면 함 수를 호출해 변수 값을 전달할 수 있다.
  • 24.
    <Set Variable를 사용해플래시 내부 정보를 변경하는 모습>
  • 25.
     주요하게 살펴볼점은 Set Variable Value에 전달 하는 요소들이다. Movie Clip Name을 보면 현재 screen_message.textField를 사용하고 있는데 이것은 플래시에서 다음과 같다.
  • 26.
     동영상 클립의이름이 screen_message
  • 27.
     screen_message에 textField가있다. 이 textField 의 값을 ASValue로 변환해서 넣어주는데 현재는 문자열로 설정하기 위해서 ASString으로 전달했다. 이제 실행을 해보면 dsdfasdf라는 문자열이 바뀐 것을 확인할 수 있다.
  • 28.
     런타임에 문자열이바뀐 것을 확인할 수 있다.
  • 29.
     C++에서 AS함수를호출하는 것의 반대 역 시 가능하다. AS에서 ExternalInterface를 사용하면 된다. 다음과 같이 버튼이 존재하 고 AS를 작성할 때 다음과 같이 원하는 C++함수를 호출해주면 된다
  • 30.
     MoviePlayer를 생성하고연결된 ExternalInterface 클래스에 다음과 같이 UFunction으로 등록해두면 AS에서 함수를 호 출 할 수 있다.
  • 32.
     MoviePlayer의 Close를호출하면 메모리 가 해제되며 인수로 false를 넘기면 화면에 서만 사라지고 메모리에서 점유 되는 것을 볼 수 있다.
  • 33.
     언리얼 커맨드에서stat Scaleform을 실행 하면 다음과 같이 스탯 정보를 볼 수 있다.  주어진 플래시 영상을 화면에 표시하고 Close를 했을 때 메모리가 소멸되는 것을 확인할 수 있다.
  • 34.
     스케일폼에서 제공하는모든 PDF문서들을 읽어 볼 것  UE4의 업데이트 버전보다 항상 스케일폼이 느릴 수 밖에 없기 때문에 진행중인 프로젝트에서 엔진을 업데이트 할 때는 스케일폼에서 통합 코드를 제공하고 있는지 아닌지 의 여부에 따라 엔진 업데이트 시기 조절이 필요하다.
  • 35.