完成動画
はじめに
本記事では、プレイヤーが指定のパーツに触れたときに一度だけ動画を再生する仕組みを実装します。
使用する主な機能
Touchedイベント:パーツに触れた際のトリガーとして使用Players:GetPlayerFromCharacter():触れた対象がプレイヤーかどうかを判定PlayerGuiの操作:個々のプレイヤーにGUIを表示VideoFrame:ゲーム内で動画を再生Endedイベント:動画再生終了後の処理を設定- テーブル(
playedPlayers):動画を再生済みのプレイヤーを記録
手順動画
エクスプローラー構成
Workspace
└Part
└Script
StarterGui
└ScreenGui(VideoGui)
└VideoFrameスクリプトの内容
Script
local part = script.Parent
local Players = game:GetService("Players")
-- 動画を再生済みのプレイヤーを記録するテーブル
local playedPlayers = {}
part.Touched:Connect(function(hit)
local character = hit.Parent
local player = Players:GetPlayerFromCharacter(character)
if player and not playedPlayers[player] then
local playerGui = player:WaitForChild("PlayerGui")
local screenGui = playerGui:FindFirstChild("VideoGui")
if screenGui then
local videoFrame = screenGui:FindFirstChildOfClass("VideoFrame")
if videoFrame then
screenGui.Enabled = true
videoFrame:Play()
-- 動画再生が終わったら削除し、再生済みに記録
videoFrame.Ended:Connect(function()
screenGui:Destroy()
playedPlayers[player] = true
end)
end
end
end
end)partとPlayersの取得
local part = script.Parent
local Players = game:GetService("Players")part:このスクリプトが挿入されているパーツそのもの。Players:Roblox内のプレイヤー情報を管理するサービス。
再生済みプレイヤーの記録
local playedPlayers = {}- 動画を再生したプレイヤーをこのテーブルに記録して、2回目以降は再生しないようにする。
パーツに触れたときの処理
part.Touched:Connect(function(hit)Touchedイベントで、パーツに何かが触れたときに発火します。hitは触れたオブジェクト(例:足や腕の部品)です。
プレイヤーかどうかの判定と再生済みチェック
local character = hit.Parent
local player = Players:GetPlayerFromCharacter(character)
if player and not playedPlayers[player] then- 触れた部品から親(キャラクター)をたどり、プレイヤーを取得。
- そのプレイヤーがすでに再生済みかどうかをチェック。
GUIとビデオの取得・再生
local playerGui = player:WaitForChild("PlayerGui")
local screenGui = playerGui:FindFirstChild("VideoGui")- プレイヤーの画面に表示される
PlayerGuiから、VideoGuiという名前のGUIを探す。 - その中から
VideoFrameを探して、再生する。
screenGui.Enabled = true
videoFrame:Play()- GUIを表示し、ビデオを再生します。
再生終了時の処理
videoFrame.Ended:Connect(function()
screenGui:Destroy()
playedPlayers[player] = true
end)- ビデオの再生が終了したら、
screenGuiを削除(画面から非表示+リソース削除)し、playedPlayersに登録して、次回以降の再生を防ぐ。
補足
動画では、VideoFrameが画面全体ではなく上部分にすきまができていますが、これは、ScreenGuiのignoreguiinsetをオンにすることで改善できます。




コメント