Hollywis LLC

湘南にある小さなシステム会社

← 技術ブログ一覧に戻る

【Unity道場3】ゲームオブジェクトを動的に生成せよ

Unity

こんにちは

Unityの書籍を何も考えずに言われるままにゲームを作っても

全く!!!覚えておらず

一向に手放しでゲームを作れるようになれる気がしないため始まった

Unity道場の3回目です。

- 問題1:ゲームオブジェクト動的に生成せよ

        回答例

        - 解説

        - 実行結果

    


- 問題2:動的生成したゲームオブジェクト削除せよ

        回答例

        - 解説

        - 実行結果

    



問題1:ゲームオブジェクト動的に生成せよ

ゲームオブジェクト動的に生成するプログラムを書け。

動的生成するプレハブはInspectorビューから指定できるようにすること。

また出現位置をランダム化すること。

回答例

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

public class PrefabCreater : MonoBehaviour { public GameObject prefab;

void Start() { this.CreatePrefab(); }

void Update() {

}

void CreatePrefab() { float x = Random.Range(-5.0f, 5.0f); float y = Random.Range(0.0f, 5.0f); float z = Random.Range(-5.0f, 5.0f);

GameObject new_prefab = Instantiate(
    prefab,
    new Vector3(x, y, z),
    Quaternion.identity
);

} }

解説

最初のこの部分で、まずUnityのUIから動的に生成したいPrefabを指定してあげます。

public GameObject prefab;こう記述することで、Inspectorビューから事前に生成するプレハブを指定できます。

そして、適当な名前の動的生成用の関数(CreatePrefab)を作ります.

void CreatePrefab() { float x = Random.Range(-5.0f, 5.0f); float y = Random.Range(0.0f, 5.0f); float z = Random.Range(-5.0f, 5.0f);

GameObject new_prefab = Instantiate(
    prefab,
    new Vector3(x, y, z),
    Quaternion.identity
);

}オブジェクトの動的な生成には、Instantiate関数を用います。

この関数は、プレハブからオブジェクトを生成する関数です。

Instantiate関数

  • 第1引数:動的生成するプレハブを指定

  • 第2引数:出現座標を指定(Vector3構造体)

  • 第3引数:回転方向を指定(Quatenion構造体)

問題では、ランダムな座標を指定する必要があるため、float型の数値,x,y,xをRandom.Range関数を用いて生成しています。

Random.Range関数の引数は範囲を示しており、xは-55, yは05, zは-5~5の間で乱数が取得できるようにしてみました。

Instantiate関数の第3引数で指定しているQuaternion.identityは回転しないという意味になります。

実行結果

こんな感じで、再生するたびにランダムに指定した[プラハ](http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%CF)ブがゲームオブジェクトとして出現します。

f:id:hollywis:20210215144338p:plain

f:id:hollywis:20210215144331p:plain

f:id:hollywis:20210215144326p:plain

問題2:動的生成したゲームオブジェクト削除せよ

問題1を拡張すること。

動的に生成したゲームオブジェクトが出現してから3秒後に削除するプログラムを書け。

回答例

using System.Collections;

using System.Collections.Generic; using UnityEngine;

public class PrefabCreater : MonoBehaviour { public GameObject prefab; private GameObject new_prefab;

// Start is called before the first frame update void Start() { this.CreatePrefab(); }

// Update is called once per frame void Update() {

}

void CreatePrefab() { float x = Random.Range(-5.0f, 5.0f); float y = Random.Range(0.0f, 5.0f); float z = Random.Range(-5.0f, 5.0f);

new_prefab = Instantiate(
    prefab,
    new Vector3(x, y, z),
    Quaternion.identity
);

Invoke("DestroyPrefab", 3.0f);

}

void DestroyPrefab() { Destroy(new_prefab); } }

解説

消すためには[グローバル変数](http://d.hatena.ne.jp/keyword/%A5%B0%A5%ED%A1%BC%A5%D0%A5%EB%CA%D1%BF%F4)に動的生成したオブジェクトを置いておく必要があるので、以下を追加

private GameObject new_prefab;消すための関数を適当な名前(DestroyPrefab)で作ります

void DestroyPrefab() { Destroy(new_prefab); } }ゲームオブジェクト削除には、Destory関数を用います。

また、3秒後に消すために、メソッドを遅延実行させる**Invoke関数**を動的生成後に呼び出します。

Invoke("DestroyPrefab", 3.0f);

実行結果

3秒後に消えましたよと。

f:id:hollywis:20210215151306p:plain

Unityの教科書 Unity 2020完全対応版 2D&3Dスマートフォンゲーム入門講座Unityの教科書 Unity 2020完全対応版 2D&3Dスマートフォンゲーム入門講座

Unity 3D/2Dゲーム開発実践入門 Unity2019対応版Unity 3D/2Dゲーム開発実践入門 Unity2019対応版

Unity2020入門Unity2020入門

UnityではじめるC# 基礎編 改訂版UnityではじめるC# 基礎編 改訂版

Unity ゲームエフェクト マスターガイドUnity ゲームエフェクト マスターガイド