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初心者の皆さん
ぜひぜひ参考にしてみてください^^