Как остановить два объекта от появления друг на друге? - PullRequest
0 голосов
/ 23 апреля 2019

coins stuck inside the upper wall

Я занимаюсь разработкой такой игры, как Flappy Bird и Jetpack Joyride, и дошел до добавления монет для покупки новых персонажей.Но когда появляется монета, она появляется справа от того места, где появляется стена, и это было попыткой не дать монетам появиться за стеной.Но теперь стены нерестятся сверху монет.Как я могу это исправить?

Код для появления столбца:

if (!GameController.instance.gamePaused)
{
   timeSinceLastSpawned += Time.deltaTime;
   if (!GameController.instance.gameOver && timeSinceLastSpawned >= spawnRate)
   {
       timeSinceLastSpawned = 0f;
       float spawnYPosition = Random.Range(columnMin, columnMax);
       columns[currentColumn].transform.position = new Vector2(spawnXPosition, spawnYPosition);
       currentColumn++;
       if (currentColumn >= columnPoolSize)
           currentColumn = 0;
   } //if
} //if

Код для появления монет:

if(!GameController.instance.gamePaused)
{
    if (!GameController.instance.gameOver)
    {
        timeSinceLastSpawned += Time.deltaTime;

        if (timeSinceLastSpawned>=spawnRate)
        {
            int randCoin = Random.Range(0, 99);
            int coinRand = coinRarity[randCoin];
            switch(coinRand)
            {
                case 1:
                    timeSinceLastSpawned = 0f;
                    float goldSpawnYPosition = Random.Range(coinMin, coinMax);
                    goldCoins[goldCurrentColumn].transform.position = new Vector2(spawnXPosition, goldSpawnYPosition);
                    goldCurrentColumn++;
                    if (goldCurrentColumn >= goldPoolSize)
                        goldCurrentColumn = 0;
                    break;
                case 2:
                    timeSinceLastSpawned = 0f;
                    float diamondSpawnYPosition = Random.Range(coinMin, coinMax);
                    diamondCoins[diamondCurrentColumn].transform.position = new Vector2(spawnXPosition, diamondSpawnYPosition);
                    diamondCurrentColumn++;
                    if (diamondCurrentColumn >= diamondPoolSize)
                        diamondCurrentColumn = 0;
                    break;
                case 3:
                    timeSinceLastSpawned = 0f;
                    float rubySpawnYPosition = Random.Range(coinMin, coinMax);
                    rubyCoins[rubyCurrentColumn].transform.position = new Vector2(spawnXPosition, rubySpawnYPosition);
                    rubyCurrentColumn++;
                    if (rubyCurrentColumn >= rubyPoolSize)
                        rubyCurrentColumn = 0;
                    break;
                case 4:
                    timeSinceLastSpawned = 0f;
                    float emeraldSpawnYPosition = Random.Range(coinMin, coinMax);
                    emeraldCoins[emeraldCurrentColumn].transform.position = new Vector2(spawnXPosition, emeraldSpawnYPosition);
                    emeraldCurrentColumn++;
                    if (emeraldCurrentColumn >= emeraldPoolSize)
                        emeraldCurrentColumn = 0;
                    break;
            } //switch
        } //if
    } //if
} //if

Что бы я хотел, чтобы произошлокогда стена появляется на вершине монеты, нужно, чтобы монета была «удалена» (в этом случае она просто переместилась из своего положения в стене к исходной точке появления за пределами экрана, так как все в «пуле» монеты)Помощь будет оценена.

1 Ответ

1 голос
/ 23 апреля 2019

Это можно сделать с помощью Collider или, в вашем случае, возможно, Collider2D. Я предполагаю, что вы уже используете коллайдеры, чтобы обнаружить попадание вашего игрока в монету или стену, поэтому просто добавьте логику, чтобы определить, является ли сталкивающийся объект колонной или игроком.

void OnTriggerEnter2D(Collider2D col)
{
    if(col.name == "playerObject"){
        //Increase coins?
    }
    this.respawn();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...