Unity

【Unity】メッシュモデルや3Dオブジェクトをフェードイン・フェードアウトさせる方法【スクリプトで徐々に消す】

本記事内には、アフィリエイトリンクを含む場合があります

Unityを使ってゲームや映像を作っていると、

3Dオブジェクトに、徐々に消えるエフェクトをつけたいと思ったことはないですか?

シーンのフェードインフェードアウトによる遷移は、

簡単に実装できるように、githubで公開されていたりしますが、

オブジェクトに関しては、パッと出てこなかったので、

自分への備忘録もかねて、解説したいと思います。

本記事の完成イメージ↓

Sphereのフェードインとフェードアウトを制御することができます。

1.オブジェクトやマテリアルの設定

シーンにSphereオブジェクトを配置します。

Sphereには、何かしらのMaterialをアタッチして、色をつけてください。

これによって、Colorを制御できるようになります。

※画像では、見栄えが良いように、Cubeという名の地面も配置していますが、特に必要ありません^^;

そして、MaterialのRendering Modeを、「Opaque」から「Fade」に変更します。

※transparentだと、ガラス細工のように濁りが残るため

Color(白くなってるとこ)をクリックして、A(alpha:不透明度)を1にしておきます。

※これが0になると、透明となり、描画されなくなります。

これで材料は整いました!

2.フェードイン・フェードアウトさせるスクリプト

配置したSphereオブジェクトのMaterialカラー(A値)を制御するスクリプト作成します。

「Create」から「C#Script」を選び、次のようなScriptを作成して、Sphereにアタッチします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SphereFader : MonoBehaviour
{
    float fadeSpeed = 0.01f;        // 透明度が変わるスピード
    float red, green, blue, alfa;   // Materialの色
 
    public bool isFadeOut = false;  // フェードアウト処理の開始、完了を管理
    public bool isFadeIn = false;   // フェードイン処理の開始、完了を管理
 
    Renderer fadeMaterial;          // Materialにアクセスする容器
    
    // Start is called before the first frame update
    void Start()
    {
        fadeMaterial = GetComponent<Renderer>();
        red = fadeMaterial.material.color.r;
        green = fadeMaterial.material.color.g;
        blue = fadeMaterial.material.color.b;
        alfa = fadeMaterial.material.color.a;
    }
    // Update is called once per frame
    void Update()
    {
        if(isFadeIn){
            StartFadeIn (); // boolにチェックが入っていたら実行
        }
        if (isFadeOut) {
            StartFadeOut (); //boolにチェックが入っていたら実行     
        }
    }
    void StartFadeOut()
    {
        alfa -= fadeSpeed;         // 不透明度を下げる
        SetAlpha ();               // 変更した透明度を反映する
        if(alfa <= 0)              // 完全に透明になったら処理を抜ける
        {             
            isFadeOut = false;     // boolのチェックが外れる
            fadeMaterial.enabled = false;  // Materialの描画をオフにする
        }
    }
    void StartFadeIn(){
        fadeMaterial.enabled = true;  // Materialの描画をオンにする
        alfa += fadeSpeed;          // 不透明度を徐々に上げる
        SetAlpha ();                // 変更した不透明度を反映する
        if(alfa >= 1)               // 完全に不透明になったら処理を抜ける
        {                    
            isFadeIn = false;       // boolのチェックが外れる
        }
    }
    void SetAlpha()
    {
        fadeMaterial.material.color = new Color(red, green, blue, alfa);
         // 変更した不透明度を含むMaterialのカラーを反映する
    }
}

このScriptをアタッチすると、
Inspectorに「Is Fade In」「Is Fade Out」というboolチェックボックスが現れます。

実行中に、これをクリックすることでフェードをさせることができます。
(初期のA値が1なので、フェードアウトから押す)

ちなみに、本スクリプトは、TAMA-LAB様のサイトを参考に作成しました。

Panelのフェードアウトによって、画面を徐々に暗転させる方法を、3Dオブジェクトに適用させました。

Rendererのコンポーネントにアクセスして、Materialのcolorと指定するところが異なります。

ここでは、チェックボックスより、各メソッドが呼ばれるようにしていますが、これを当たり判定やボタンのクリックによって呼ばれるようにすれば、ゲームでうまく機能するのではないでしょうか。

フェードイン・アウトを当たり判定で実行させる方法↓

【Unity】当たり判定で3Dオブジェクトをフェイドアウトさせる方法【当たり判定OnTriggerとboolを学ぶ】本記事は、3Dオブジェクトのフェードイン・フェードアウトをさせるスクリプトの実践編です。 3Dオブジェクトのフェードイン・フェード...

私を含め、Unity初心者の皆さん

ぜひぜひ参考にしてみてください^^

Unityのチュートリアルやエディターを日本語化する方法【英語に抵抗があっても大丈夫】Unityは、世界屈指のゲーム開発エンジンです。 ゲーム業界にとどまらず、XR技術によって、さまざまな事業を牽引する存在となるでし...
【Unity】プレイヤーキャラクターを動かす方法(矢印の方向に移動させるタイプ)【カメラ固定ゲーム向き】Unity初心者は、まず初めに ”プレイヤーキャラクターを動かしたい(操作したい)” と思うのが、世の常ではないでしょうか?...
ABOUT ME
いなも@システマライフハッカー
”仙豆”を開発することを夢見て、健康食品会社で働いていたものの、2016年に出会ったロシアの武術”システマ”こそ、その糸口があると感銘し、勝手にシステマ普及活動を始める。 一方で、クリエイティブなモノ作りが好きで、DX社会で楽しみを見出せる"Unity”を活かして、”スマートかつ快適な暮らし”のヒントを発信している。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA