Ejemplo n.º 1
0
    public GameObject GetGameObjectForBullet(GameObject prefab, Vector2 position, Quaternion rotation, GameObject target)
    {
//		// ("prefab" + prefab.name + "position" + position.ToString ());
        //まず取得したいGameObjectのプレハブのインスタンスIDを取得
        int key = prefab.GetInstanceID();

        //Dictionaryに取得したkeyが存在しなければ新たにList<GameObject>を作成してDictionaryに追加
        if (pooledGameObjects.ContainsKey(key) == false)
        {
            pooledGameObjects.Add(key, new List <GameObject> ());
        }

        //取得したGameObjectのprefabを取得
        List <GameObject> gameObjects = pooledGameObjects [key];

        //返すゲームオブジェクト
        GameObject go = null;

        //ある場合
        //使えるオブジェクトがないかListの中身を走査
        for (int i = 0; i < gameObjects.Count; i++)
        {
            //とりあえず上からgameobjectを調べていく
            go = gameObjects [i];

            //現在非アクティブ(未使用)であれば
            if (go.activeInHierarchy == false)
            {
                //位置を設定
                go.transform.position = position;

                //角度を設定
                go.transform.rotation = rotation;

                //※targetに方向をあわせる
                TransformExtensions.LookAt2D(go.transform, target.transform, Vector2.up);

                //これから使うのでactiveにする
                go.SetActive(true);

                //				// ("recycle object");
                //ゲームオブジェクトを返す
                return(go);
            }
        }
        //ない場合
        //使用できるものがないので新たに生成
        go = (GameObject)Instantiate(prefab, position, rotation);
        print("make" + prefab.name + "!!!!!");
        //ObjectPoolゲームオブジェクトの子要素にする
        go.transform.parent = transform;
        //※targetに方向をあわせる
        TransformExtensions.LookAt2D(go.transform, target.transform, Vector2.up);
        //作ったオブジェクトをListに追加
        gameObjects.Add(go);

        //		// ("instantiate object");
        //作ったゲームオブジェクトを返す
        return(go);
    }