質問: true; mplayer.Play(); if (Input.GetKeyDown("a")) { // 再生中でなければ再生 if (!mplayer.isPlaying) { mplayer.Play(); // 再生中であれば停止 } else { mplayer.Pause(); } }
回答: 単純な回答ではなく原因追求方法を記載します。 ### ■現在のスクリプトを確認 現在のソースだと、 1.Playerオブジェクトに衝突した際に問答無用で動画再生開始(Movieメソッド2行目`mplayer.Play();`による) 2.Playerオブジェクトに衝突した瞬間に"a"を押していて、その時再生中でなければ再生、再生中であれば停止 3.Playerオブジェクトに衝突した際にscene2へ移動 という挙動になります。 この時点で2がおかしいことが分かりますがとりあえず先に進みます。 ### ■「動画は再生されている」 このことから、1は正常に挙動しているかもしれません。 ですがVideoPlayerコンポーネントのPlayOnAwakeがオンだとシーン開始時に自動で再生されます。 まずはそこの確認をしてください。 ### ■「シーン移動は起こっていない」 このことから、`OnTriggerEnterに入っていない`、または`if (other.gameObject.tag == "Player")を満たしていない`という可能性が考えられます。 「OnTriggerEnterをOnCollisionEnterに変更すればいいのでしょうか。」ということは、両者の違いが分かっていないようなので、まずそこを調べます。 「OnTriggerEnter OnCollisionEnter」で検索します。(以下一例) Unity : 衝突検出のOnCollisionEnter, OnTriggerEnter が呼ばれない、反応しない(Collision Detection) - いんでぃーづ それでも呼ばれない場合は両者の位置、Colliderの大きさなどを確認してください。 とりあえず衝突判定が取れたとして、次はif文のチェックです。 `Debug.Log(other.gameObject.tag);`を**if文の前**に追加してください。コンソールにログが表示されます。 [Unity] デバッグログを出す方法 これで正しく「Player」というオブジェクトと衝突しているか分かります。 (条件判定時はスペル注意。大文字小文字区別します) ### ■動画を止める 「衝突した瞬間に"a"を押す」、この条件はまず満たせません。 まだ、そもそも動画の再生を待つコードにもなっていません。「待つ」というコードが全く存在しない為です。 「unity 動画 再生完了 待つ」で検索すると参考サイトが出ます。(以下一例) 【Unity】【C#】VideoPlayer で動画の終了判定をする - ヽ|∵|ゝ(Fantom) の 開発blog? ### 最後に 以上のように、1つずつ分析していけば自分でも問題の絞り込みが出来るかと思います。 他の問題が発生した時も同様に「分かる部分(出来ている部分)/分からない部分(出来ない部分)を絞り込む」→「分からない部分をそのまま検索する」を繰り返すと自己解決出来たりします。 以下も合わせてご確認ください。 質問するときのヒント|teratail(テラテイル)