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

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

ただいまの
回答率

89.13%

Unityのフェイドイン・フェイドアウト時のエラー?

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,441

nisioki

score 11

前提・実現したいこと

Unityでゲームのシーン遷移のフェイドイン・フェイドアウトを作っていた時に出ました。
フェイドは実装できたのですがこのエラーだけ消えません。
Unityのプロジェクト起動時に発生し、それ以降はエラーメッセージは出ません。
自分のプログラムでない部分をエラーが出ているので、
何についてのエラーなのかが全く分かりません。
※該当のソースコードには、自分の遷移のプログラムをのせました。

発生している問題・エラーメッセージ

UnityNullReferenceException: Object reference not set to an instance of an object
UnityEditor.DockArea.OnGUI () (at C:/buildslave/unity/build/Editor/Mono/GUI/DockArea.cs:272)
と出ます。

該当のソースコード

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System.Collections;

/// <summary>
/// シーン遷移時のフェイドイン・フェイドアウトを制御するクラス
/// </summary>
public class Fade : MonoBehaviour {
    /// <summary>フェイド中かどうか</summary>
    private bool      _isFadeing;
    /// <summary>フェイドインかどうか</summary>
    private bool     _fadeIn;
    /// <summary>シーン名保管用</summary>
    private string  _Scene;
    /// <summary>フェイドカウント用</summary>
    private float     _time;
    /// <summary>Image格納用</summary>
    private Image     image;
    //private Canvas canvas;
    //private int savedOrder = 10;
    /// <summary>暗転にかかる時間</summary>
    public float    _interval = 5.0f;

    // Use this for initialization
    void Start () {
        //Imageを格納
        image = GetComponent<Image>();
        //canvas = GetComponentInParent<Canvas>();
        //if (canvas != null) {
        //    savedOrder = canvas.sortingOrder;
        //}
        startFadeIn();    //フェイドインスタート
    }
    // Update is called once per frame
    void Update () {

        if (!_isFadeing)    //フェイド中以外除外
            return;

        _time += Time.deltaTime;    //フェイド時間を足す。
        if (_fadeIn) {        //フェイドイン
            image.color = new Color (0.0f, 0.0f, 0.0f, Mathf.Lerp (1, 0, _time / _interval));        
            if ((_time / _interval) >= 1.0f) {
                ResetFade ();
                image.enabled = false;    //フェイド用のテクスチャImageを非表示
            }
        } else {            //フェイドアウト
            image.color = new Color (0.0f, 0.0f, 0.0f, Mathf.Lerp (0, 1, _time / _interval));        
            if ((_time / _interval) >= 1.0f) {
                SceneManager.LoadScene (_Scene);    //シーンの切り替え
                ResetFade ();
            }
        }

    }


    private void startFadeIn(){
        //canvas.sortingOrder = savedOrder;
        _isFadeing = true;
        _fadeIn = true;
        _time = 0;
    }

    private void startFadeOut(){
        //canvas.sortingOrder = savedOrder;
        image.enabled = true;
        _isFadeing = true;
        _fadeIn = false;
        _time = 0;
    }

    private void ResetFade(){
        //canvas.sortingOrder = savedOrder;
        _isFadeing = false;
        _fadeIn = true;
        _time = 0;
    }

    /// <summary>
    /// シーン遷移用関数
    /// 第1引数:シーン名(string)
    /// </summary>
    public void LoadScene(string SetSceneName){
        _Scene = SetSceneName;
        startFadeOut ();
    }
}

試したこと

他プロジェクトでの再実行

補足情報(言語/FW/ツール等のバージョンなど)

Unity 5.4.3f1 personal (64bit)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

NullReferenceExceptionは、値の参照先を実際に見に行った結果、Nullが参照されていた場合にスローされる例外処理です。

Nullであってはならない値がNullになっています。つまりなんにも参照していない状態になっているか、参照しているオブジェクトが必要な時にインスタンス化されていません。

いずれにせよ例外が発生している箇所を確認し、値をどう参照しているか検証していかなければ、このエラーメッセージ以上のことは何も断定できません。

ログを見ると、DockAreaクラスのOnGUI()メソッドの実行時に例外が発生しています。

エラーを解消するには、DockArea.csの272行目を見に行って、値をどうやって参照しているか、参照しているオブジェクトのインスタンスはつくられているか、インスタンスはいつどうやってつくられているか、などを確認する必要があります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる