20210606のUnityに関する記事は3件です。

loopPointReachedによる動画再生終了の検出でつまづいた話

loopPointReachedで動画再生を検出しようとしたところ、以下の問題が発生 ■発生条件 動画を再生した後のVideoSourceで別の新しい動画を再生しようとした時、前の動画の再生中frameが、新しい動画の総frameより大きな値になっている。 ※たとえば動画(長さ60秒)を20秒部分まで再生した後、別の動画(長さ10秒)を再生した場合など。 loopPointReachedに1つでもコールバック関数が1つも登録されていなければ発生しない様子。 ■発生する問題 ①新しい動画の再生開始直後に.loopPointReachedに登録されている関数が呼ばれる。 ②PrepareCompletedを検出してすぐに.Play()しても、再生されない 正確には.Play()でisPlaying=trueになるが、直後に①の問題が発生することで強制的にisPlaying=falseにされる様子。 ■問題が発生するコード Start()内で関数を登録 videoPlayer.prepareCompleted += VideoPlayerOnPrepareCompleted; videoPlayer.loopPointReached += FinishPlayingVideo; 動画再生処理 public void MovieStart(string filename) { videoPlayer.url = mp4path + filename; videoPlayer.Prepare(); } Prepare完了時に再生 private void VideoPlayerOnPrepareCompleted(VideoPlayer source) { source.Play(); } 再生終了時の処理 private void FinishPlayingVideo(VideoPlayer vp) { Debug.Log("再生終了時の処理"); } ■回避策 新しい動画を再生する前に前の動画を.frame = 0して再生時間を戻したり、再生時間を戻した状態で.Playして数frame待つ処理を入れても安定しなかった。 試行錯誤したところ、問題を回避せずに、発生させた後に影響を軽減させる方が良さそう。 ①PrepareCompletedの後、少しの間は、loopPointReachedによる「再生終了」のイベントを無視させる ②PrepareCompletedの後、少し待ってから.Play()しなおす処理を入れる ■回避策を反映したコード Start()内処理や、動画の再生処理は変更不要。 フラグ用の変数を追加。 private bool FinishPlayingVideoFlag = false; Prepare完了時にコルーチン実行 private void VideoPlayerOnPrepareCompleted(VideoPlayer source) { source.Play(); StartCoroutine(loopPointReachedBugFix_Coroutine()); } Prepare完了後、最大で1.3秒間の間、勝手に.isPlaying が falseになる(=問題発生)ことを検出させる。 問題が発生した場合は、改めて.Playする。 この間、FinishPlayingVideoFlagフラグを立てておく private IEnumerator loopPointReachedBugFix_Coroutine() { FinishPlayingVideoFlag = true; float Timer = 0; while (Timer < 1.3f) { yield return null; if (!videoPlayer.isPlaying) { Debug.Log("即終了バグ回避処理"); videoPlayer.Play(); break; } Timer += Time.deltaTime; } FinishPlayingVideoFlag = false; } フラグが立っている場合は、再生終了の検出を無視する。 private void FinishPlayingVideo(VideoPlayer vp) { if (!FinishPlayingVideoFlag) Debug.Log("再生終了時の処理"); } loopPointReachedの誤検知が発生するタイミングはバラツキが多いが、色々な条件で試したところ、他処理の負荷やFPSに関わらず、PrepareCompletedの直後frame~最大0.65秒程度の範囲で発生していたので、余裕をもって倍の1.3秒としている。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

チェックワーク③

はじめに 割とUnityに慣れていると思うので、 見たゲームを再現する!というチェックワークにしてみました。 ミッション 20分でこの動画のゲームを完コピしよう! 教科書、web見放題です! 下の得点で自分の達成度を測ってみよう。 制限時間内にどこまで作りきれるかな? 得点 床を作ろう (2点) 木を作ろう (2点) 木を5個以上配置しよう (3点) 土管を作ろう (2点) 空をオレンジにしよう (2点) Cubeでプレイヤーを作って色を付けよう (2点) プレイヤーにRigidbodyを付けてみよう (2点) 土管の当たり判定をなくしてみよう (2点) プレイヤーを常に速さ5で前に進むようにしてみよう (5点) 右キーを押したら右に移動するようにしよう (5点) 左キーを押したら左に移動するようにしよう (3点) カメラがプレイヤーを追いかけるようにしよう (5点) z軸方向に50すすんだら、コンソールに「Goal!」と表示するようにしよう (5点) 満点は40点!20分でどこまでできたかな??
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「プレイエリアの境界線(シャペロン境界)が表示されないように設定を変更する」【初心者】UnityでVRの開発をやってみる.

はじめに なぜかプレイエリアの境界線が表示されるスクリプトがフレームワーク等に紛れ込むことがあって邪魔なのでこの境界線を非表示にします. 環境一覧 SteamVR 1.16.10 Unity 2020.1.17f1 SDK SteamVR Plugin 2.7.3 Vive SRanipalRuntime Plugin 1.3.2.0 追加アクセサリー VIVEトラッカー2018 使用PCスペック インテル® Core™ i7-7700K NVIDIA GeForce GTX 1070 環境作成編 #1 Unityのセットアップをする 2021年 1月更新 #2 プロジェクトを作ってみる 2021年 1月更新 #3 UnityでVR開発のための環境を整える(SteamVR Plugin2.7.Xをインストールする):推奨 2021年 5月更新 #3-おまけ UnityでVR開発のための環境を整える(SteamVR Pluginの最新版をインストールする):非推奨 2021年 2月更新 #4 SteamVRのダウングレードと自動アップデートの停止(上級者向け) 2021年 5月更新 コントローラの入力やトラッカー,HMDの位置座標,回転座標を得る+α #5 VIVEコントローラのボタン入力を取得する 2021年 2月更新 #6 トリガーの押し具合やトラックパッドの位置情報の入力を取得する 2021年 2月更新 #6-おまけ VIVEコントローラを使った開発をする時のおすすめ設定(独断と偏見) 2021年 5月更新 #7 ヘッドマウントディスプレイとコントローラの位置座標と回転を取得する 2021年 2月更新 #8 VIVEトラッカー2018を有効化してUnity上で位置座標と回転を取得 2021年 5月更新 #9 VIVEコントローラの振動機能を開発してみる 2021年 4月更新 VIVE Pro Eyeのアイトラッキングを使ってみる #10 VIVE Pro Eyeの視線トラッキングを有効化(セットアップ)する 2021年 4月更新 #11 VIVE Pro Eyeのアイトラッキングを使ってUnity上で瞬きや視線のデータを取得する 2021年 4月更新 #11-おまけ VIVE Pro Eyeのアイトラッキングで計測できるデータについて(適宜更新) 2021年 4月更新 VIVE Pro Eyeのカメラを使ってみる #12 VIVE Pro Eyeのフロントカメラの解像度(性能)とAR機能を有効化について 2021年 5月更新 実際にアプリを作成してみる プレイエリアの境界線(シャペロン境界)が表示されないように設定を変更する(この記事)2021年 6月更新 仮想空間上に曲面ディスプレイを作成して大画面で広角WEBカメラ映像を見る 2021年 5月更新 今回の記事では, 1.OpenVR Advanced Settingsをインストールする. 2.シャペロン境界の設定を行う. という流れ. 1.OpenVR Advanced Settingsをインストールする. OpenVR-AdvancedSettingsリリース一覧にアクセスして最新版をダウンロードします.この時最新版かつ".exe"のインストーラ形式になっているものをダウンロードします. SteamVRを起動した状態でインストーラを起動して手順にしたがってインストールします. インストールが終わったらSteamVRを再起動します. 2.シャペロン境界の設定を行う. SteamVRを起動してゲーム内メニューのオーバーレイを選択します. "ADVANCED SETTINGS"が追加されているので選択します.オーバーレイが1つだったり最新で使ったものは隣のアイコンから開けます. 色々と設定項目がありますが今回は"Chaperone"を選択します. "Fade Distance"というシャペロン境界の表示距離の設定があるので0に設定します. これでプレイエリアの境界線(シャペロン境界)を非表示にすることができます.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む