MawaLog

一日一日、楽しく生きる。技術と音楽が好き。

開発日誌::HoloLensアプリ開発にチャレンジvol4. タイマーセット~弾を撃つ、当たるとパーティクル出力して消えるまで

f:id:k_mawa:20180323192620j:plain

前回

k-mawa.hateblo.jp

コメント

経緯ととりあえず書いておきます。日記です。

タイマーをつける

これは以前のノウハウがHoloLensアプリでもそのまま利用できました。

k-mawa.hateblo.jp

UIにTextオブジェクトを配置して、そこにC#Scriptコンポーネントを付加してTimeDeltaで時間更新する感じです。宣言した変数にTextオブジェクトをドラッグアンドドロップするのを忘れないでください(自戒)

敵をランダムに出す

Coroutineで10秒待つ→カウントする→乱数発生→敵オブジェクトリストから乱数番目のキャラを生成@HoloLensCameraの至近に。 ここは、6畳間で発生させることを想定して座標設定調整しています。

利用した敵キャラ
フリーです(Zombieが怖いという話が社内であったため変更^^)
assetstore.unity.com

void Start () {

        StartCoroutine(WaitCoroutine());

    }

IEnumerator WaitCoroutine()
    {
        //最初10秒待つ(SpatialMappingが張られる前にキャラが落っこちてしまうのを防ぐため)
        yield return new WaitForSeconds(10.0f); 

        while (true)
        {
             //生成するまで毎回10秒待つ       
            yield return new WaitForSeconds(5.0f);


            if (tagObjects.Length < 10)
            {
                //HoloLensCameraの座標を取得(今後HoloLensをつけて動くことを考慮)
                holocamera = GameObject.Find("HoloLensCamera");
                holocamera_transform = holocamera.transform;

                //乱数番目のキャラを出現させる
                int index = (int)(Random.value * 99999) % gamelist.Length;
                GameObject obj = gamelist[index];

                //キャラ出現の場所を指定。※実機テスト結果からすると、
                //6帖間だと、横幅(X座標)は -3~3 奥行き(Z座標)は 0~5 が安全かな
               //(HoloLensCamera 座標(0,0,0)として)
                Vector3 pos = new Vector3(0, 0, 0);
                pos.x = holocamera_transform.position.x + ((int)(Random.value - 0.5 ) * 6);
                Debug.Log("pos.x");
                Debug.Log(pos.x);
                pos.y = 0; //HoloLensカメラの目線に固定
                pos.z = holocamera_transform.position.z + (int)(Random.value * 5);
                Debug.Log("pos.z");
                Debug.Log(pos.z);

               //キャラ出力
                Instantiate(obj, pos, Quaternion.identity);
            }

        }
        
    }

弾に当たったら燃えて消える

弾にセットするC#Scriptコンポーネントは以下

弾に当たったオブジェクトをTagで属性判断→Ghostだったら反応→Ghostキャラ消す→エフェクトオブジェクト出す→当たった弾を消す

public GameObject Explosion;

・
・
・

 void OnCollisionEnter(Collision other)
    {
         //GostTagの何かに当たったら、
        if (other.gameObject.tag == "Ghost")
        {
            Debug.Log("Ghost! damage!");
            //GostTagのオブジェクトを消去
            Destroy(other.gameObject);
            //Explosion変数に入れたエフェクトオブジェクト(エフェクトにもコルーチンで3秒後に消える
            //スクリプトを仕込んでプレファブ化しておく)を出力
            Instantiate(Explosion, new Vector3(this.transform.position.x, this.transform.position.y, this.transform.position.z), Quaternion.identity);           
            //当たった弾も消す
            Destroy(this.gameObject);
        }
    }

利用したエフェクト
フリーです

assetstore.unity.com

完成

こんな感じで動きます!

これでゲームの骨の部分はできてきたかな~^^