- Home /
Creating an object pool . Facing problem with array
I am creating an endless runner game where i want to reuse the prefab platforms. At first I am copying the drag and dropped prefabs into an array "DEACTIVATED_HOLDER" When the game begins i want to call a function to select a prefab at random from this array and move it to ACTIVATED_HOLDER array after activating the gameobject. I have run into a few problems .Could you please guide me how do i progress ? thnx in advance (:
#pragma strict
@script ExecuteInEditMode();
var array_status : GUIText ;
var prefabPlatform : GameObject[];
static var deactivated_holder : Array ;
static var activated_holder : Array ;
static var postionMultiplier=0 ;
var prefabwidth=300;
static var check=0;
function Start () {
deactivated_holder=new Array ();
var activated_holder = new Array ();
var new_prefab : GameObject ;
for(var i=0;i<prefabPlatform.length;i++) // MOVING ALL THE DRAG AND DROPPED PREFABS FROM prefabPlatform to deactivated_holder
{
new_prefab=Instantiate(prefabPlatform[i], Vector3(0, 0, postionMultiplier*prefabwidth), Quaternion.identity);
new_prefab.name="Platform_"+(i+1);
new_prefab.gameObject.active=false;
deactivated_holder.Push(new_prefab);
}
relocate_prefab();
}
function Update () {}
function relocate_prefab() // Here i want to fetch a gameObject from the array at random and push it
// into the activated_holder after activating the prefab
{
var z_coordinate_generation=postionMultiplier*prefabwidth ;
var to_be_activated_prefab=deactivated_holder[Random.Range(0,deactivated_holder.length)];
print("z:"+z_coordinate_generation+","+to_be_activated_prefab.);
to_be_activated_prefab.gameObject.active=true;
to_be_activated_prefab.transform.position(0,0,z_coordinate_generation);
}
I AM NOT ABLE TO FETCH THE GAMEOBJECT FROM DEACTIVATED_HOLDER AND POSITION IT
Answer by justinl · Jul 10, 2013 at 04:47 PM
Don't use Array.Push(). Use a List instead (Dynamically re-sizable collection). I don't believe Array.Push() works in Unity the same way it works in normal Javascript so this might be the reason you cannot access the GameObject.
Thnx ... using list worked !!
#pragma strict
import System.Collections.Generic;
@script ExecuteInEdit$$anonymous$$ode();
var array_status_deactivate : GUIText ;
var array_status_activate : GUIText ;
var prefabPlatform : GameObject[];
var deactivated_holder = new List.<GameObject>();
var activated_holder = new List.<GameObject>();
static var postion$$anonymous$$ultiplier=0 ;
var prefabwidth=300;
static var check=0;
function Start () {
var new_prefab : GameObject ;
for(var i=0;i<prefabPlatform.length;i++)
{
new_prefab=Instantiate(prefabPlatform[i], Vector3(0, 0, postion$$anonymous$$ultiplier*prefabwidth), Quaternion.identity);
new_prefab.name="Platform_"+(i+1);
new_prefab.gameObject.active=false;
deactivated_holder.Add(new_prefab);
}
relocate_prefab();
}
function Update () {
array_status_display();
}
function array_status_display()
{
var deactivation_status="DE-ACTIVATED \n";
for( var element_prefab in deactivated_holder )
{
deactivation_status=deactivation_status+element_prefab+"\n" ;
}
array_status_deactivate.text=deactivation_status;
var activation_status="ACTIVATED \n";
for( var element_prefab in activated_holder )
{
activation_status=activation_status+element_prefab+"\n" ;
}
array_status_activate.text=activation_status;
}
function relocate_prefab()
{
var z_coordinate_generation=postion$$anonymous$$ultiplier*prefabwidth ;
var position=Random.Range(0,(deactivated_holder.Capacity-1));
var to_be_activated_prefab=deactivated_holder[position];
deactivated_holder.RemoveAt(position);
activated_holder.Add(to_be_activated_prefab);
to_be_activated_prefab.gameObject.active=true;
to_be_activated_prefab.gameObject.transform.position.z=0;
to_be_activated_prefab.gameObject.transform.position.y=0;
to_be_activated_prefab.gameObject.transform.position.x=0;
}
Your answer
Follow this Question
Related Questions
Enabled all gameobjects in array 1 Answer
Lists and Structs instead of Arrays? 4 Answers
How do I check the distance between multiples objects in an array from the player? 4 Answers
JS: Array index not taking array.length as valid int? 2 Answers
How to make an Array equal the Components of an Instantiated GameObject 1 Answer