====== Webビデオ連動エフェクト ====== [[vci/tips/messagevideo|Webビデオプレイヤー・リモコンによるメッセージ送信]]を利用した、特定の再生時間になるとエフェクトを再生するサンプルVCIです。\\ ルームにおいて、[[virtualcast/room/ringmenu/myitem/videoplayer|Webビデオプレイヤー]]と操作用のリモコンを設置している場合動作します。 === サンプルデータ === https://virtualcast.jp/products/d85fabe72132226ef5560c3d348e0c78d300ff01200ebd6ea8bd749fc49a7779 === Unitypackage === {{ :vci:sample:message:webvideoeffectsample.zip |}} ===== コンポーネント設定 ===== VCI Object {{:vci:sample:message:video1.png?direct|}} VCI Sub Item {{:vci:sample:message:video2.png?direct|}} ===== VCIスクリプト ===== Webビデオプレイヤーで下記の動画を再生時、紹介シーンが切り替わる「5秒・48秒・84秒」のタイミングでエフェクトが再生されます。\\ こちらの動画を予め再生できるように[[seed/account/settings|設定しておく]]必要があります。\\ https://www.youtube.com/watch?v=MPmCqKp8V1s -------------------------------- ---動画用メッセージ -------------------------------- ---Webビデオプレイヤーの情報 local MESSAGE_KEY_WEB_VIDEO_INFO_FROM_REMOCON = "WebVideoInfoFromRemocon" -------------------------------- ---定義データ -------------------------------- ---演出に使用する動画タイトル local TARGET_VIDEO_TITLE = "【リアルとメタバースを連携できる!】バーチャルキャスト OSCプロトコル対応" -------------------------------- ---動画データ -------------------------------- ---動画タイトル local videoTitle = "" ---動画時間 local videoDuration = 0 ---動画の再生開始時間 local videoPlayStartTime = 0 ---動画再生中 local isPlayingVideo = false ---動画の再生開始時のクロック local videoPlayStartClock = os.clock() -------------------------------- ---演出データ -------------------------------- ---再生エフェクト local effect = vci.assets.GetEffekseerEmitter("Effect") ---演出開始時間(動画の秒数) local playEffectTimeTable = {5, 48, 84} ---直前フレームでの動画再生時間 local beforePlayTime = 0 -------------------------------- ---関数 -------------------------------- ---Web動画プレイヤーの情報をリモコンアイテムから取得 local function HandleGetWebVideoInfo(sender, name, message) --動画タイトル videoTitle = message.title --動画時間 videoDuration = message.duration --現在の再生時間 videoPlayStartTime = message.currentTime beforePlayTime = message.currentTime --再生中 isPlayingVideo = message.isPlaying print("動画情報更新\nタイトル:" .. videoTitle .. "\n再生時間時間:" .. string.format("%0.2f / %0.2f", videoPlayStartTime, videoDuration) .. "\n再生状態:" .. tostring(isPlayingVideo)) --動画の再生開始時のクロック videoPlayStartClock = os.clock() end vci.message.On(MESSAGE_KEY_WEB_VIDEO_INFO_FROM_REMOCON, HandleGetWebVideoInfo) ---全ユーザーで毎フレーム呼ばれる function updateAll() --動画再生中の場合 if isPlayingVideo then --対象動画である場合 if videoTitle == TARGET_VIDEO_TITLE then local currentTime = videoPlayStartTime + (os.clock() - videoPlayStartClock) for index, playEffectTime in ipairs(playEffectTimeTable) do --エフェクトの再生時間を通過した場合 if (beforePlayTime <= playEffectTime) and (playEffectTime <= currentTime) then effect.Play() end end beforePlayTime = currentTime end end end