ucスプリクトでKismetにイベントを送る

概要

シーケンスイベントの作例です。

今回は指定範囲にプレイヤーが入るとシーケンスイベントが実行されるのを想定して作ってみます。

ステップ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の右クリリストに加える
}
TriggerEventClassSupportedEvents.Addが重要です。

ステップ3

マップに設置してKismetエディタでイベントを構築します。

まずマップにCalcZoneを設置して、

CalcZoneを選択した状態でKismetエディタで右クリックしてOpenDoorを選択します。


以上で完了です。

ダウンロード



作例のマップではドアの前の台に乗るとドアが開きます。


~

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年06月23日 03:31
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。