using System. Collections;
using System. Collections. Generic;
using UnityEngine;
public class Game : MonoBehaviour
{
public Transform prefab;
public List< Transform> prefabs;
int prefabsId;
public Transform game1;
public Transform t;
List< Transform> activeObject;
List< Transform> notActiveObject;
int indexOne;
int indexTwo;
int indexThree;
void Start ( )
{
activeObject = new List < Transform > ( ) ;
notActiveObject = new List < Transform > ( ) ;
activeObject. Capacity = 5 ;
}
void Update ( )
{
if ( Input. GetKeyDown ( "c" ) )
{
CreatObject ( ) ;
}
else if ( Input. GetKeyDown ( "n" ) )
{
BeginNewGame ( ) ;
}
else if ( Input. GetKeyDown ( "x" ) )
{
DestroyOne ( ) ;
}
}
void CreatObject ( )
{
if ( notActiveObject. Count < 1 )
RandomPrefab ( ) ;
else
RecycleOut ( ) ;
t. parent = game1;
t. localPosition = Random. insideUnitCircle * 5 ;
t. localRotation = Random. rotation;
t. localScale = Vector2. one * Random. Range ( 0.1f , 1f ) ;
}
void RecycleOut ( )
{
indexTwo = Random. Range ( 0 , notActiveObject. Count - 1 ) ;
t = notActiveObject[ indexTwo] ;
notActiveObject. RemoveAt ( indexTwo) ;
activeObject. Add ( t) ;
t. gameObject. SetActive ( true ) ;
}
void RecyclIn ( )
{
indexOne = Random. Range ( 0 , activeObject. Count - 1 ) ;
t = activeObject[ indexOne] ;
activeObject. RemoveAt ( indexOne) ;
notActiveObject. Add ( t) ;
t. gameObject. SetActive ( false ) ;
}
void RandomPrefab ( )
{
prefabsId = Random. Range ( 0 , prefabs. Count - 1 ) ;
t = Instantiate ( prefabs[ prefabsId] ) ;
activeObject. Add ( t) ;
}
void BeginNewGame ( )
{
if ( activeObject. Count > 0 )
{
for ( int i = activeObject. Count- 1 ; i > - 1 ; i-- )
{
t = activeObject[ i] ;
activeObject. RemoveAt ( i) ;
notActiveObject. Add ( t) ;
t. gameObject. SetActive ( false ) ;
}
}
}
void DestroyOne ( )
{
if ( activeObject. Count > 0 )
{
RecyclIn ( ) ;
}
}
}
主要是分成三部分,第一部分新生成prefab,第二部分是一个激活池子List< Transform > activeObject,第三部分是未激活池子List< Transform > notActiveObject。 逻辑是,刚开始,两个池子都没有东西,这时按下C键,就要创建一个prefab,这个靠第一部分来完成,新生成一个prefab,这个prefab会马上放入激活池子。当你继续按C时,继续会用第一部分新生成prefab,并继续放入激活池子。 当你按x键删除时,会让一个激活的变成未激活,并将其从激活池子除去,并加入未激活池子里。 当你在未激活池子里面有元素时,你再按C键,这时,会从未激活池子找出一个prefab,并加入激活池子,并激活,并从未激活池子除去这个元素。 然后,基本上就是prefab在激活池子和未激活池子直接转运而已。