Question>
scaleform으로 main menu를 만들고, kismet으로 불러와서 띄웠음.^^
main menu에 'start'라는 button을 만들었고,
이 button을 아래와 같이 연결했음.
class SFMenuTutorial extends GFxMoviePlayer;
var GFxClikWidget StartButton;
var GFxObject MainMenuTitle;
(중략)
event bool WidgetInitialized(name WidgetName, name WidgetPath, GFxObject Widget)
{
switch(WidgetName)
{
case ('startBtn'):
StartButton = GFxClikWidget(Widget);
StartButton.AddEventListener('CLIK_press', OnStartButtonPressed);
break;
default:
break;
}
return true;
}
function OnStartButtonPressed(GFxClikWidget.EventData ev)
{
ConsoleCommand("open remap-test6");
}
//final function ConsoleCommand(string Cmd, optional bool bWriteToLog)
//{
// if(PlayerOwner != none)
// PlayerOwner.ConsoleCommand(Cmd, bWriteToLog);
//}
(중략)
'start' button을 눌렀을 때, source의 내용대로 'remap-test6'라는 map을 열 수 있었으면 함.
하지만, 위 source는 error가 발생함.-_-;;;;
주석 처리된 부분을 풀어도 error가 발생함.-_-;;;;;;;
main menu도 잘 뜨고, matinee로 camera 이동도 잘 됨.
하지만, 'start' button은 안됨.T_T
'start' button을 눌렀을 때, 'remap-test6'라는
map을 열려면 어떻게 접근해야 하는가?
-------------------------------------------------------------
Answer>
우선 class GFxMoviePlayer는
class Actor를 계승한 class가 아니라 class Object을 계승한 class라는 점을 기억해야 합니다.
그런 특성이 있다 보니,
class GFxMoviePlayer를 계승한 class에서 정의된 모든 함수는
ConsoleCommand()를 직접적으로 호출할 수 없습니다.^^;;;;;;;;;;
따라서,
위 문제를 해결하기 위해 2가지 사실을 이용합니다.
1>유효한 actor를 님의 함수(class GFxMoviePlayer를 계승한 class의 함수)에서
끄집어 내서, 그 Actor의 ConsoleCommand()로 'open'을 호출하면, 원하는 level을 열 수 있습니다.
2>모든 unreal engine의 game은 game이 실행되는 동안
class GameInfo로 정의된 actor를 최소 1개 이상 가지고 있습니다.
그리고, 그 actor는 worldInfo.game에 저장되어 있습니다.
따라서, OnStartButtonPressed() 아래와 같이 수정해 보세요.^^
function OnStartButtonPressed(GFxClikWidget.EventData ev)
{
local GameInfo gi;
foreach class'WorldInfo'.static.GetWorldInfo().AllActors( class'GameInfo', gi )
{
gi.ConsoleCommand( "open remap-test6" );
break;
}
}
위와 같이 해도 안된다면, log 올려 주세요.
하지만, 그럴 일은 없을 거라고 99.99% 확신합니다.^^
Tag:
안기훈, Kee Hoon Ahn, Unreal, UDK, iPhone, iPad, app, 앱, iOS