本記事は、3Dオブジェクトのフェードイン・フェードアウトをさせるスクリプトの実践編です。
3Dオブジェクトのフェードイン・フェードアウト(方法)↓
前回は、フェードイン・フェードアウトを、2つのbool(trueまたはfalse)を設け、それをInspector上でクリックすることで、制御しました。
しかし、実際のゲームでは、Inspectorをいじることはできません。
なので、ゲーム内のアクションで、これらのboolを変えられるようにすれば、
フェードイン・フェードアウトを起こすことができるようになります。
やり方は無限にあると思いますが、
アイテムを取るとそれがフェードアウトすることを想定して、
オブジェクトに”Player”が衝突して消える(フェードアウトする)ようにしたいと思います。
完成イメージ↓
1.Sphereとプレイヤーを配置
Sphereは前回と同じ状態です。
そこにプレイヤーを配置します。
本ブログマスコットキャラクターの”システマン”を置いてますが、中身はunity-chanです。
unity-chanのプレハブは配置するだけで、動くようになるのでとても便利ですね!
オリジナルキャラクターをunity-chanのように動かす方法は、こちら↓
なお、プレイヤーオブジェクトのTagはPlayerにしておきます(後に活躍する)。
この段階では、Sphereはただの球体で、乗れます。
Inspectorのbool(IsFadeOutやIsFadeIn)にチェックで、描画のみを制御できます。
2.Sphereのスクリプトに追記する
Sphereにアタッチされている、SphereFader.csに追記を行います。
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 OnTriggerEnter(Collider other) { if(other.gameObject.tag == "Player") // 衝突したのがPlayerの場合 { if(fadeMaterial.enabled) // Materialの描画がオンなら { isFadeOut = true; // FadeOutのboolにチェック } else // Materialsの描画がオフなら { isFadeIn = true; // FadeInのboolにチェック } } } void SetAlpha() { fadeMaterial.material.color = new Color(red, green, blue, alfa); // 変更した不透明度を含むMaterialのカラーを反映する } }
追記したのは、 void OnTriggerEnter(Collider other) のメソッド部分だけです^^;
このオブジェクトが当たり判定を受けたとき、
プレイヤータグの当たったオブジェクトがPlayerタグのものだった場合に、
それぞれのboolのチェックが入るようにしました。
せっかくbool IsFadeInもあるので、
描画されていないときに当たれば、フェードインするようにしています。
また、衝突判定をもつようにするために、
SphereオブジェクトのSphere ColliderのIs Triggerにチェックを入れます。
その代わり、このオブジェクトはすり抜けられるようになります。
すり抜けさせたくない場合、別途Sphere Colliderをつければよいでしょう。
という具合で、フェードアウトであろうと、使い方は簡単ですね。
boolで状態をコントロールすると、連続的な当たり判定を避けることができます。
以上、ご参考まで^^
unity使いたいけれど、日本語で学習したい方へ↓