本日は Unity の技術調査枠です。
キューブなどの基本オブジェクトを自然にスポーンさせたいことがありました。
実はおいかけっこアプリで似たようなことをしており、記事に記録を残していなかったので書き出します。
まず、基本オブジェクトのスポーン方法です。
GameObject の CreatePrimitive 関数と PrimitiveType を指定する事で任意の基本オブジェクトを生成できます。
// キューブオブジェクトをスポーンする
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
基本オブジェクトは以下の6種類です。
・Sphere スフィア
・Capsule カプセル
・Cylinder シリンダー
・Cube キューブ
・Plane プレーン
・Quad クアッド
docs.unity3d.com
以下のスクリプトを作成し、この時点でプロジェクトで実行してみます。
・SpawnTest.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SpawnTest : MonoBehaviour { // Use this for initialization void Start () { // キューブをスポーンする GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); // 位置調整を行う cube.transform.position = new Vector3(0, 0, 3); } }
実行すると、キューブが現れました。成功です。
しかし、このままだとキューブが何もない空間に突然表示されるので不自然です。
サイズ 0 からサイズ 1 まで徐々に拡大し、フワッと表示されるようカスタマイズします。
以前、学習したコルーチン機能を利用します。
bluebirdofoz.hatenablog.com
スクリプトを以下の通り、書き換えます。
・SpawnTest.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SpawnTest : MonoBehaviour { // Use this for initialization void Start () { // キューブをスポーンする GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); // 位置調整を行う cube.transform.position = new Vector3(0, 0, 3); // フワッと表示をコルーチン機能で実行する StartCoroutine(ShowHuwaEffect(cube)); } /// <summary> /// フワッと表示 /// </summary> IEnumerator ShowHuwaEffect(GameObject target) { // 繰り返し回数 int loopcount = 10; // 更新間隔 float waitsecond = 0.05f; // スケール設定 // オフセット値 float offsetScale = 1.0f / loopcount; // 更新値 float updateScale = 0; // オブジェクトの有効化(初期位置) target.transform.localScale = new Vector3(0.0f, 0.0f, 0.0f); for (int loop = 0; loop < loopcount; loop++) { // スケール更新 updateScale = updateScale + offsetScale; target.transform.localScale = new Vector3(updateScale, updateScale, updateScale); yield return new WaitForSeconds(waitsecond); } // 最終スケール target.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f); } }
以下のようにキューブがフワッと表示されるようになりました。