마우스 인터페이스 만들기 - 스케일폼 버전.
참조 링크 : http://udn.epicgames.com/Three/DevelopmentKitGemsCreatingAMouseInterfaceKR.html
스케일폼이 마우스 위치 변화를 감지하면 새 위치를 언리얼 스크립트로 넘겨준다.
어도비 플래시로 쓴 액션 스크립트.
마우스가 움직이면 커서를 호출한 레이어의 위치를 스케일폼의 마우스 위치로 설정한 다음,
언리얼 스크립트에도 스케일폼의 마우스 위치를 전성혼다.
import flash.external.ExternalInterface; // 보통의 "윈도우" 포인터 숨김 Mouse.hide(); var mouseListener:Object = new Object(); mouseListener.onMouseMove = function() { // 커서 인스턴스 위치를 마우스 위치로 설정 cursor._x = _root._xmouse; cursor._y = _root._ymouse; // 언리얼스크립트에 새 마우스 좌표 전달 ExternalInterface.call("UpdateMousePosition", _root._xmouse, _root._ymouse); updateAfterEvent(); }; Mouse.addListener(mouseListener);
스케일폼 무비의 언리얼 스크립트 부분.
function Init(optional LocalPlayer LocalPlayer)
{
// 스케일폼 무비 초기화
Super.Init(LocalPlayer);
Start();
Advance(0);
}
event UpdateMousePosition(float X, float Y)
{
local MouseInterfacePlayerInput MouseInterfacePlayerInput;
if (MouseInterfaceHUD != None && MouseInterfaceHUD.PlayerOwner != None)
{
MouseInterfacePlayerInput = MouseInterfacePlayerInput(MouseInterfaceHUD.PlayerOwner.PlayerInput);
if (MouseInterfacePlayerInput != None)
{
MouseInterfacePlayerInput.SetMousePosition(X, Y);
}
}
}
요정도가 중요한 부분인듯. 나머지는 hud에서 렌더링 하고 계산하고 하는 부분.
그리고 이벤트 처리하는 부분이 주를 이룬다.
ㅇㅇ 그리고 2d좌표에 따라 마우스 3D 좌표 구하는 부분도 나름 쓸만한듯.
function Vector GetMouseWorldLocation()
{
local MouseInterfacePlayerInput MouseInterfacePlayerInput;
local Vector2D MousePosition;
local Vector MouseWorldOrigin, MouseWorldDirection, HitLocation, HitNormal;
// 적합한 캔버스와 플레이어 오너가 있는지 확인
if (Canvas == None || PlayerOwner == None)
{
return Vect(0, 0, 0);
}
// 새 플레이어 인풋을 구하기 위해 형 변환
MouseInterfacePlayerInput = MouseInterfacePlayerInput(PlayerOwner.PlayerInput);
// 플레이어 인풋이 적합한지 확인
if (MouseInterfacePlayerInput == None)
{
return Vect(0, 0, 0);
}
// 마우스 위치를 IntPoint 로 저장하나, Vector2D 로 저장 필요
MousePosition.X = MouseInterfacePlayerInput.MousePosition.X;
MousePosition.Y = MouseInterfacePlayerInput.MousePosition.Y;
// 마우스 위치를 Deproject 하여 캐시 벡터에 저장
Canvas.DeProject(MousePosition, MouseWorldOrigin, MouseWorldDirection);
// 실제 마우스 월드 위치를 구하기 위해 trace 수행
Trace(HitLocation, HitNormal, MouseWorldOrigin + MouseWorldDirection * 65536.f, MouseWorldOrigin , true,,, TRACEFLAG_Bullet);
return HitLocation;
}
신기하게도 키즈멧 이벤트도 만들어 줄 수 있다.
class SeqEvent_MouseInput extends SequenceEvent;
event Activated()
{
local MouseInterfaceInteractionInterface MouseInteractionInterface;
// originator 를 형 변환하여 마우스 인터액션 인터페이스임을 확인
MouseInteractionInterface = MouseInterfaceInteractionInterface(Originator);
if (MouseInteractionInterface != None)
{
// 이벤트가 활성화되었을 때 적절한 값을 밀어줄 수 있도록 값 구해오기
MouseWorldOrigin = MouseInteractionInterface.GetMouseWorldOrigin();
MouseWorldDirection = MouseInteractionInterface.GetMouseWorldDirection();
HitLocation = MouseInteractionInterface.GetHitLocation();
HitNormal = MouseInteractionInterface.GetHitNormal();
}
}
그리고 시퀀스에 대한 값을 셋팅해 준다.
defaultproperties
{
ObjName="Mouse Input"
ObjCategory="Input"
bPlayerOnly=false
MaxTriggerCount=0
OutputLinks(0)=(LinkDesc="Left Pressed")
OutputLinks(1)=(LinkDesc="Left Released")
OutputLinks(2)=(LinkDesc="Right Pressed")
OutputLinks(3)=(LinkDesc="Right Released")
OutputLinks(4)=(LinkDesc="Middle Pressed")
OutputLinks(5)=(LinkDesc="Middle Released")
OutputLinks(6)=(LinkDesc="Scroll Up")
OutputLinks(7)=(LinkDesc="Scroll Down")
OutputLinks(8)=(LinkDesc="Mouse Over")
OutputLinks(9)=(LinkDesc="Mouse Out")
VariableLinks(1)=(ExpectedType=class'SeqVar_Vector',LinkDesc="HitLocation",bWriteable=true,PropertyName=HitLocation)
VariableLinks(2)=(ExpectedType=class'SeqVar_Vector',LinkDesc="HitNormal",bWriteable=true,PropertyName=HitNormal)
VariableLinks(3)=(ExpectedType=class'SeqVar_Vector',LinkDesc="MouseWorldOrigin",bWriteable=true,PropertyName=MouseWorldOrigin)
VariableLinks(4)=(ExpectedType=class'SeqVar_Vector',LinkDesc="MouseWorldDirection",bWriteable=true,PropertyName=MouseWorldDirection)
}
위와같이 셋팅해 두면 키즈멧에서 셋팅한 대로의 키즈멧 이벤트가 만들어 진다.
두번째 사진에서 보면 생성한 MouseInterfaceKActor가 위의 코딩대로 만들어 졌음을 알 수 있다.
에디터에서는 잘 되는 비쥴스툐도로 실행하면 안되는군.. 이유가 머지..흐음...
'Unreal > Unreal Script' 카테고리의 다른 글
Concatenate Strings (문자열 연결) 키즈멧 노드 만들기 (0) | 2011.09.21 |
---|---|
캔버스(Canavas) 키즈멧 노드 만들기 (0) | 2011.09.21 |
마우스 인터페이스 만들기 - 언리얼 스크립트 버전. (0) | 2011.09.20 |
화면위 표지 추가하기 (0) | 2011.09.20 |
맵 전용 디버깅 옵션 추가하기 (0) | 2011.09.15 |