Замораживание врагов и размораживание их в игре Infinity Runner - PullRequest
0 голосов
/ 07 мая 2019

У меня есть игра, которая генерирует бесконечные блоки уровней, и всегда есть 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...");
    }
}

Как я могу заморозить всех врагов и разморозить их должным образом?

Я хочу заморозить врагов (птиц и мышей), и это структура блока уровня:

enter image description here

Видео игры, чтобы вы лучше понимали проблему: https://www.youtube.com/watch?v=lXzOoEbo0Aw&feature=youtu.be

1 Ответ

0 голосов
/ 07 мая 2019

Решено, на случай, если у кого-то возникнет моя проблема, вот как вы можете заморозить врагов:

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