Lumberyardに触れる(5)-ゲーム開始編
※2018年1月18日時点の情報です
← Lumberyardに触れる(4)-インプット編 Lumberyardに触れる(最終回)-衝突判定編 →
はじめに
今回は前回取得したイベントで文字の非表示をします。
すでに私が作成したスクリプトの解説をしていきます。
スクリプト設定
前回のスクリプトと同様の場所に
AddComponentでスクリプトを追加します。
スクリプト
全体。
local gamestart =
{
}
function gamestart:OnActivate()
self.clickEventId = GameplayNotificationId(self.entityId, "ClickEvent", "float");
self.clickHandler = GameplayNotificationBus.Connect(self, self.clickEventId);
self.tickHandler = TickBus.Connect(self);
end
function gamestart:OnTick(deltaTime, timePoint)
if (self.tickHandler ~= nil) then
self:SetControls("PlayerCharacter", "EnableControlsEvent", 0);
self.tickHandler:Disconnect();
self.tickHandler = nil;
end
end
function gamestart:OnDeactivate()
if (self.clickHandler) then
self.clickHandler:Disconnect();
self.clickHandler = nil;
end
end
function gamestart:OnEventBegin(value)
if (GameplayNotificationBus.GetCurrentBusId() == self.clickEventId) then
self:SetControls("PlayerCharacter", "EnableControlsEvent", 1);
UiCanvasAssetRefBus.Event.UnloadCanvas(self.entityId);
if (self.tickHandler ~= nil) then
self.tickHandler:Disconnect();
self.tickHandler = nil;
end
end
end
function gamestart:SetControls(tag, event, enabled)
local entity = TagGlobalRequestBus.Event.RequestTaggedEntities(Crc32(tag));
local controlsEventId = GameplayNotificationId(entity, event, "float");
GameplayNotificationBus.Event.OnEventBegin(controlsEventId, enabled);
end
return gamestart
文字の削除
まずは、文字消去だけを解説していきます。
function gamestart:OnActivate()
self.clickEventId = GameplayNotificationId(self.entityId, "ClickEvent", "float");
self.clickHandler = GameplayNotificationBus.Connect(self, self.clickEventId);
self.tickHandler = TickBus.Connect(self);
end
OnActivateでClickEventの通知バスに接続します。
ClickEventは前回のイベントバスで実装した部分になります。
function gamestart:OnEventBegin(value)
if (GameplayNotificationBus.GetCurrentBusId() == self.clickEventId) then
self:SetControls("PlayerCharacter", "EnableControlsEvent", 1);
UiCanvasAssetRefBus.Event.UnloadCanvas(self.entityId);
if (self.tickHandler ~= nil) then
self.tickHandler:Disconnect();
self.tickHandler = nil;
end
end
end
OnEventBeginにてClickEventのイベントが動作したかチェックした後、UnluadCanvasで自身に付いているキャンバスを削除します。
これで文字の削除ができるようになります。
function gamestart:OnDeactivate()
if (self.clickHandler) then
self.clickHandler:Disconnect();
self.clickHandler = nil;
end
end
通知バスはエンティティの終了部分で消しておきます。
キャラクターの停止
文字は消せるようになりましたが、
これだけではスタートの文字が表示中に
キャラクターが操作できてしまいます。
ゲームが始まるまでキャラクターの停止をさせる処理を解説します。
function gamestart:OnActivate()
self.clickEventId = GameplayNotificationId(self.entityId, "ClickEvent", "float");
self.clickHandler = GameplayNotificationBus.Connect(self, self.clickEventId);
self.tickHandler = TickBus.Connect(self);
end
OnActivateでTickBusの通知バスに接続します。
TickBusは毎フレーム処理させる動作を実装する時に役立ちます。
今回はジャンプの処理の有効化フラグなどがキャラクターのスクリプトのOnActiveに使用されているため、キャラクターの停止処理のタイミングをずらすために使用します。
function gamestart:OnTick(deltaTime, timePoint)
if (self.tickHandler ~= nil) then
self:SetControls("PlayerCharacter", "EnableControlsEvent", 0);
self.tickHandler:Disconnect();
self.tickHandler = nil;
end
end
OnTickは毎フレーム呼ばれます。
ここではキャラクター(スライス)のアクティブフラグをSetControlsにて停止させています。
OnTickはキャラクターを停止させたら不要なのでtickのバスは切ります。
function gamestart:SetControls(tag, event, enabled)
local entity = TagGlobalRequestBus.Event.RequestTaggedEntities(Crc32(tag));
local controlsEventId = GameplayNotificationId(entity, event, "float");
GameplayNotificationBus.Event.OnEventBegin(controlsEventId, enabled);
end
SetControlsでは引数で渡されたタグ名の付いているエンティティの有効無効を切り替えを行います。
function gamestart:OnEventBegin(value)
if (GameplayNotificationBus.GetCurrentBusId() == self.clickEventId) then
self:SetControls("PlayerCharacter", "EnableControlsEvent", 1);
UiCanvasAssetRefBus.Event.UnloadCanvas(self.entityId);
if (self.tickHandler ~= nil) then
self.tickHandler:Disconnect();
self.tickHandler = nil;
end
end
end
OnEventBeginにてClickEventのイベントが動作したかチェックした後、キャラクターの有効化をします。
念のためココでもtickのバスは切る処理を入れます。
まとめ
これでキャラクターの停止と文字の削除が出来ました。
キャラクターの停止と同じ要領でカメラの停止も出来ると思います。
次回は衝突判定を行っていきます。
Author And Source
この問題について(Lumberyardに触れる(5)-ゲーム開始編), 我々は、より多くの情報をここで見つけました https://qiita.com/OrotiYamatano/items/069923c94c84bb604a88著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .