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); }