【Unity4】一人称ダンジョン、固定イベントの仮実装

今日の進捗は少しだけだが、フェードイン、フェードアウトの実装方法が試せた。

ネットで調べた限りでは、Unityでのフェードイン、フェードアウトについてスクラッチで実装する場合、かなり特殊なやり方をする。

ゲームオブジェクトが持つGUIに対して、フィルター用のテクスチャで前面を覆い、そのテクスチャの透明度をいじることで、フェードイン・フェードアウトを実現する方法が一般的なようだ。

たとえば、以下のような感じ。

public Texture2D fadeTexture;
public Color fadeColor;

void OnGUI() {
    fadeColor.a = Mathf.Clamp01(fadeColor.a - Time.deltaTime);
    fadeTexture.SetPixel(0, 0, fadeColor);
    fadeTexture.Apply();
    GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), fadeTexture);
}

これは大変重要なポイントなのだが、GUI.DrawTextureを使用する場合、Update内では使用できない。必ずOnGUIの処理系で呼び出す必要がある、という点だ。

今回、はじめて知ったのだが、毎フレームで呼び出される更新系のメソッドは、Update処理系とOnGUI処理系の二つがあるということだ。

ところで、このやり方、俺がなれていないだけかもしれないが、どうも気持ち悪い。

まず、UnityのデフォルトのGUIはどうも使い勝手が良くない気がする。

将来的には別のGUIアセットに置き換える可能性が大きいし、ここであんまりがんばりたくないよな、と。

そこで登場するのがiTweenである。なんかステマみたいな紹介の仕方だな。

iTweenはスクリプトのアセットで、無料で公開されているので、興味があればアセットストアでダウンロードしてみよう。

今回はこれを使って、フェードイン・フェードアウトを実装した。

こんな感じ。

void Start() {
    iTween.CameraFadeAdd();
}

void executeEvent() {
    iTween.CameraFadeTo(iTween.Hash(
        "amount", 1.0f,
        "time", 0.5f,
        "delay", 0.0f,
        "oncomplete", "onCompleteFadeOut",
        "oncompletetarget", this.gameObject 
    ));
}

public void onCompleteFadeOut() {
    //ここにフェードアウト完了後の処理を記載
}

これだと、Update処理系かGUI処理系かなど気にせずに、どこからでも呼び出せる。

なによりコールバックの仕組みを使えるのが大きい。

で、このフェードアウト・フェードインを使って実装したイベント処理が、アイキャッチ画像にある怪しい光を放つフロアだ。

サンプルはこちらから。

このフロアを踏むと、画面が暗転してスタート地点まで戻される、というただそれだけのイベント。

明日以降は、このイベントを汎用化してマップ情報に落とし込もうと思う。

5年前

コメントを残す

メールアドレスが公開されることはありません。