Создание спрайтов в интервале и предотвращение их перекрытия - PullRequest
0 голосов
/ 06 мая 2020

В моей игре есть мяч, которым мы управляем, и этот шар меняет свой цвет после того, как проходит сквозь стену. Стена состоит из трех частей: красного, синего и желтого. Игра работает как летучая птица. Это бесконечная игра, в которой вы должны пройти через цвет мяча. Я поместил стены в разные слои и сделал их сборными.

Вот мой код для создания частей стены:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
     
public class deployWalls : MonoBehaviour
{
    public GameObject blue;
    public GameObject yellow;
    public GameObject red;
    public float rewpawnTime=1.0f;
    private Vector2 screenBounds;
    // Start is called before the first frame update
    void Start()
    {
        screenBounds = Camera.main.ScreenToWorldPoint(new Vector3 (Screen.width,Screen.height,Camera.main.transform.position.z));
        StartCoroutine(wallWave());
    }

    private void spawnWall()
    {
        GameObject b = Instantiate(blue) as GameObject;
        GameObject y = Instantiate(yellow) as GameObject;
        GameObject r = Instantiate(red) as GameObject;
        b.transform.position = new Vector2(screenBounds.x *-2, Random.Range(-screenBounds.y, screenBounds.y));
        y.transform.position = new Vector2(screenBounds.x *-2, Random.Range(-screenBounds.y, screenBounds.y));
        r.transform.position = new Vector2(screenBounds.x *-2, Random.Range(-screenBounds.y, screenBounds.y));
    }
    
    IEnumerator wallWave()
    {
        while(true){
            yield return new WaitForSeconds(2);
            spawnWall();
        }
    }
}

Когда я запускаю игру, появляются части стены:

вот так

Однако они должны быть в интервале, который составляет общую длину этих 3 частей, и они не должны перекрываться. Также следует изменить порядок цветов .

Вот так

1 Ответ

0 голосов
/ 06 мая 2020

Проблема в том, что вы полностью случайным образом меняете положение стен на экране.

b.transform.position = new Vector2(screenBounds.x *-2, Random.Range(-screenBounds.y, screenBounds.y));
y.transform.position = new Vector2(screenBounds.x *-2, Random.Range(-screenBounds.y, screenBounds.y));
r.transform.position = new Vector2(screenBounds.x *-2, Random.Range(-screenBounds.y, screenBounds.y));

Что вам нужно сделать, так это сначала рандомизировать порядок цветов. Также нам нужна высота стены

float wallHeight = 5; //arbitrary number for example purpose

int orderBlue = 0;
int orderRed = 0;
int orderYellow = 0;

do {
colorBlue = Random.Range(0, 2);
colorRed = Random.Range(0, 2);
colorYellow = Random.Range(0, 2);
} while ((orderBlue == orderRed) || (orderBlue == orderYellow) || (orderRed = orderYellow))

Определите, какой цвет будет первым, затем добавьте другие стены под ним

if (colorBlue == 2) {
b.transform.position = new Vector2(screenBounds.x *-2, Random.Range(-screenBounds.y, screenBounds.y));
if (colorYellow == 1) {
y.transform.position = new Vector2(b.transform.position.x, b.transform.position.y - wallHeight);
r.transform.position = new Vector2(b.transform.position.x, b.transform.position.y - 2 * wallHeight);
}
if (colorRed == 1) {
r.transform.position = new Vector2(b.transform.position.x, b.transform.position.y - wallHeight);
y.transform.position = new Vector2(b.transform.position.x, b.transform.position.y - 2 * wallHeight);
}
}

if (colorRed == 2) {
// add same code as above but switch colors
}

if (colorYellow == 2) {
// add same code as above but switch colors    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...