unity イベントについて
受付中
回答 1
投稿
- 評価
- クリップ 1
- VIEW 592
unity初心者です。
先日もう一つ分からない所がでてきたので質問します。
・スイッチを押すと動画が再生され、動画が終了するとシーン2に移動する
スクリプトを作りたいのですが、動画は再生されてもPauseにもならず、シーン移動もしません。
どうすればいいでしょうか。
これもOnTriggerEnterをOnCollisionEnter(Collision other)に変更すればいいのでしょうか。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Video;
using UnityEngine.UI;
public class iftouched : MonoBehaviour
{
public VideoPlayer mplayer;
private void Start()
{
mplayer.GetComponent<VideoPlayer>();
mplayer.enabled = false;
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
Movie();
SceneManager.LoadScene("scene2");
}
}
void Movie()
{
mplayer.enabled = true;
mplayer.Play();
if (Input.GetKeyDown("a"))
{
// 再生中でなければ再生
if (!mplayer.isPlaying)
{
mplayer.Play();
// 再生中であれば停止
}
else
{
mplayer.Pause();
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
単純な回答ではなく原因追求方法を記載します。
■現在のスクリプトを確認
現在のソースだと、
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(テラテイル)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる