В настоящее время я работаю над игрой в Unity, в которой я хочу, чтобы объекты генерировались случайным образом за пределами сенсорного экрана и перемещались в соответствии с той стороной экрана, на которой они появляются (либо слева, справа, сверху илипод экраном случайно).Если они появляются слева от экрана -> они перемещаются вправо на экран, если они появляются справа, они перемещаются влево на экран, если они появляются сверху -> они перемещаются вниз на экран... Я попытался сделать это путем случайного выбора строки из массива, состоящего из 4 значений (вверх, вниз, влево, вправо), и затем с помощью оператора switch, который будет выполнять другой код в зависимости от позиции объекта.Проблема заключается в том, что код порождает объекты только из положения вниз, когда он идет вверх, а также по какой-то причине кажется, что порождает объекты в определенной позиции X, близкой к середине, большую часть времени.Кто-нибудь знает, почему это так, и как я могу решить эту проблему.
Я попытался использовать метод случайного выбора и оператор switch, который назначит соответствующие векторные значения в соответствии с конкретной стороной экрана, которой объектпоявляется на
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BallSpawner : MonoBehaviour
{
public GameObject BallPrefab;
public float respawnTime = 1.0f;
private Vector2 screenBounds;
private string[] edges = {"up","down","left","right"};
static System.Random random = new System.Random();
private float gap = 0.4f;
// Start is called before the first frame update
void Start()
{
screenBounds = Camera.main.ScreenToWorldPoint(new
Vector2(Screen.width, Screen.height));
StartCoroutine(BallWave());
}
private void spawnBall()
{
GameObject a = Instantiate(BallPrefab) as GameObject;
int r = random.Next(edges.Length);
string edge = edges[r];
Vector2 moveVector;
switch (edge)
{
case "up":
moveVector = a.transform.GetComponent<CubeConstantMove>
().moveVector;
if (moveVector.y < 0)
{
a.transform.position = new Vector2(Random.Range(-
screenBounds.x, screenBounds.x), screenBounds.y + gap);
}
break;
case "down":
moveVector = a.transform.GetComponent<CubeConstantMove>
().moveVector;
if (moveVector.y > 0)
{
a.transform.position = new
Vector2(Random.Range(- screenBounds.x, screenBounds.x), -
screenBounds.y - gap);
}
break;
case "left":
moveVector = a.transform.GetComponent<CubeConstantMove>
().moveVector;
if (moveVector.y < 0)
{
a.transform.position = new Vector2(-screenBounds.x -
gap, Random.Range(-screenBounds.y, screenBounds.y));
}
break;
case "right":
moveVector = a.transform.GetComponent<CubeConstantMove>
().moveVector;
if (moveVector.y < 0)
{
a.transform.position = new Vector2(screenBounds.x +
gap, Random.Range(-screenBounds.y, screenBounds.y));
}
break;
default:
break;
}
//*Manipulate to respanw from just outside the confines
}
IEnumerator BallWave()
{
while (true) {
yield return new WaitForSeconds(respawnTime);
spawnBall();
}
}
}
Мяч должен непрерывно появляться в произвольном положении по четырем сторонам экрана и перемещаться с предопределенной скоростью вправо на экран, если появляется влево, влево, если появляетсявправо, вниз, если появилось выше экрана, вверх, если появилось ниже экрана.
введите описание изображения здесь