我有一个生成无限等级积木的游戏,并且总是有3个积木被实例化,问题是这些等级积木有移动的敌人,有时玩家太慢或太快,敌人处于不应该的位置(比如掉进玩家并立即杀死他)。
我想的解决方案是冻结每个添加的块(当前实例化块列表中的最后一个),当玩家进入下一个块时,解冻它,这样当玩家进入块时,敌人就开始移动,而不是当它生成时。
以下是冻结和解冻的函数:
public void UnfreezeCurrentLevelBlockEnemies()
{
if(currentBlocks.Count == 3)
{
foreach (Rigidbody2D enemy in currentBlocks[1].transform)
{
enemy.constraints = RigidbodyConstraints2D.None;
Debug.Log("I'm in index 1 levelblock freezing" );
}
} else
{
Debug.LogWarning("Generating initial blocks, blocks will not be
frozen yet...");
}
}
public void FreezeLastLevelBlockEnemies()
{
if (currentBlocks.Count == 3)
{
foreach (Rigidbody2D enemy in currentBlocks[2].transform)
{
enemy.constraints = RigidbodyConstraints2D.FreezeAll;
Debug.Log("I'm in index 2 levelblock freezing" );
}
} else
{
Debug.LogWarning("Generating initial blocks, blocks will not be
frozen yet...");
}
}我怎样才能冻结所有的敌人和解冻他们?
我想冻结敌人(鸟和老鼠),这是关卡结构:

游戏视频,让你更好地理解问题:https://www.youtube.com/watch?v=lXzOoEbo0Aw&feature=youtu.be
发布于 2019-05-07 19:26:39
解决了它,以防有人遇到我的问题,这里是如何冻结敌人的:
public void FreezeLevelBlockEnemies(int index)
{
if (currentBlocks.Count == 3 && freezeEnemiesOutOfCurrentBlock)
{
foreach (MouseMovement enemy in currentBlocks[index].GetComponentsInChildren<MouseMovement>())
{
enemy.GetComponent<Rigidbody2D>().constraints = RigidbodyConstraints2D.FreezeAll;
Debug.Log("I'm in " + index + " index levelblock freezing");
}
foreach (BirdMovement enemy in currentBlocks[index].GetComponentsInChildren<BirdMovement>())
{
enemy.GetComponent<Rigidbody2D>().constraints = RigidbodyConstraints2D.FreezeAll;
Debug.Log("I'm in " + index + " index levelblock freezing");
}
} else
{
Debug.LogWarning("Freeze is disabled");
}
}https://stackoverflow.com/questions/56020153
复制相似问题