概要
シーケンスイベントの作例です。
今回は指定範囲にプレイヤーが入るとシーケンスイベントが実行されるのを想定して作ってみます。
ステップ1
まずSeqEvent_OpenDoor.ucを作成します。
class SeqEvent_OpenDoor extends SequenceEvent;
defaultproperties
{
ObjName="OpenDoor"
ObjCategory="Physics"
bPlayerOnly=false
OutputLinks(0)=(LinkDesc="Open")
}
OutputLinksは必要に応じでいくつでも増やせます。
ステップ2
次にCalcZone.ucを作成します。
class CalcZone extends UTGameObjective
placeable;
var() Volume CalcZone;
var() int InZonePawnNum;
var() float CheckInterval;
auto state Active
{
event BeginState(Name PreviousStateName)
{
SetTimer(CheckInterval, true, 'CheckZone');
super.BeginState(PreviousStateName);
}
function CheckZone()
{
local int i;
i = NumPawnInZone();
if( InZonePawnNum <= i )
{
gotostate('Complete');
}
}
function int NumPawnInZone()
{
local Pawn P;
local int i;
foreach CalcZone.TouchingActors(class'Pawn', P)
{
i++;
}
return i;
}
}
state Complete
{
event BeginState(Name PreviousStateName)
{
TriggerEventClass( class'SeqEvent_OpenDoor', None, 0 ); //SeqEvent_OpenDoorのOutputLinks(0)を起動
super.BeginState(PreviousStateName);
}
}
defaultproperties
{
bStatic=false
bHidden=false
bAlwaysRelevant=true
Physics=PHYS_None
bOrientOnSlope=true
bReplicateMovement=true
bIgnoreRigidBodyPawns=true
InZonePawnNum=1
CheckInterval=0.1
SupportedEvents.Add(class'SeqEvent_OpenDoor') //Kismetの右クリリストに加える
}
TriggerEventClassとSupportedEvents.Addが重要です。
ステップ3
マップに設置してKismetエディタでイベントを構築します。
まずマップにCalcZoneを設置して、
CalcZoneを選択した状態でKismetエディタで右クリックしてOpenDoorを選択します。
以上で完了です。
ダウンロード
作例のマップではドアの前の台に乗るとドアが開きます。
~
最終更新:2011年06月23日 03:31