我有2个对象:
在GameManager脚本中,我每2秒实例化一个条纹,在Stripe脚本中,我使用带有随机数的for循环实例化Tiles,并将它们作为刚创建的条纹的父元素。
我的问题是我想找出每个实例化的Stripe的瓦片数量?
我的意思是使用newStripe.transform.childCount
无效,因为它将始终返回零,并且仅出于测试原因,我通过添加一个空游戏对象来编辑Stripe预制件,然后应用更改newStripe.transform.childCount
将返回1
我知道我应该在这种情况下使用对象池技术,但是我是一个初学者,我正在尝试学习。
// GameManager Script
void Update()
{
timeBetweenSpawns -= Time.deltaTime;
if (timeBetweenSpawns < -2)
{
Stripe newStripe = Instantiate(stripePrefab, spawnPosition,
Quaternion.identity);
// This variable (tilesCountIntStripe) always returns zero
tilesCountInStripe = newStripe.transform.childCount;
timeBetweenSpawns = 0;
}
}
// Stripe Script
void Update()
{
if (createTile)
{
int randomStripesCount = Random.Range(1, 10);
for (int i = 0; i < randomStripesCount; i++)
{
Tile newTile = Instantiate(tile);
newTile.transform.SetParent(transform, true);
newTile.transform.localPosition = new Vector2(transform.position.x, (-i * (1.1f)));
tilesCount += 1;
}
createTile = false;
}
}
答案 0 :(得分:0)
0
尚未运行,它会返回您正在询问的Tile::Update()
如果您希望该代码立即运行,我建议您执行以下操作:
// GameManager Script
void Update()
{
timeBetweenSpawns -= Time.deltaTime;
if (timeBetweenSpawns < -2)
{
Stripe newStripe = Instantiate(stripePrefab, spawnPosition,
Quaternion.identity);
tilesCountInStripe = newStripe.GetComponent<Stripe>().Init();
//Or whatever the exact name of your class is ^ here
timeBetweenSpawns = 0;
}
}
// Stripe Script
public int Init()
{
int randomStripesCount = Random.Range(1, 10);
for (int i = 0; i < randomStripesCount; i++)
{
Tile newTile = Instantiate(tile);
newTile.transform.SetParent(transform, true);
newTile.transform.localPosition = new Vector2(transform.position.x, (-i * (1.1f)));
tilesCount += 1;
}
return randomStripesCount;
}
更改:
Init
函数中实例化它们,该函数从您控制的代码中调用。
createTile
字段来防止更新代码(每帧运行一次)在每个帧中运行的必要性。