質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

603閲覧

unity イベントについて

mekabugohann014

総合スコア9

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2018/07/19 13:26

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(); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

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(テラテイル)

投稿2018/07/20 01:10

sakura_hana

総合スコア11425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問