Скрипт на рандомное появление объектов

Программирование на Юнити.

Скрипт на рандомное появление объектов

Сообщение Игорь1232 13 авг 2020, 18:22

У меня есть скрипт, что когда при загрузке уровня 1 объект создаётся рандомно на одном из трёх SpawnPoints. Мне нужно чтобы, например 3 объекта (cube, sphere, cylinder) генерировались случайным образом на трёх SpawnPoint одновременно, но чтобы двух объектов не было в одном месте. Помогите плиз реализовать.
Вот скрипт:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
public int RandoMs;
public GameObject sphere;
public GameObject[] SpawnPoints;
void Start()
{
RandoMs = Random.Range(1,4);
if (RandoMs == 1)
{
sphere.transform.position = SpawnPoints[0].transform.position;
}
if (RandoMs == 2)
{
sphere.transform.position = SpawnPoints[1].transform.position;
}
if (RandoMs == 3)
{
sphere.transform.position = SpawnPoints[2].transform.position;
}
}
void Update(){

}
}
Игорь1232
UNец
 
Сообщения: 2
Зарегистрирован: 13 авг 2020, 17:58

Re: Скрипт на рандомное появление объектов

Сообщение samana 15 авг 2020, 18:19

Так как у вас разные задачи, бывает нужно разместить один объект или несколько, то - создайте метод, который в качестве параметров будет принимать массив спавн-точек, и любое кол-во объектов. А внутри себя этот метод уже будет случайно расставлять переданные ему объекты по спавн-точкам. Так будет удобнее, ведь вам не придётся каждый раз переписывать логику, а всего лишь вызывать один метод под разные потребности.


Например чтобы установить одну сферу на случайную позицию нужно вызвать
Синтаксис:
Используется csharp
setObjectsRandomly(SpawnPoints, sphere);


А чтобы сразу три объекта случайно разместить
Синтаксис:
Используется csharp
setObjectsRandomly(SpawnPoints, sphere, cylinder, cube);


Сам код выглядит так:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public Transform sphere;
    public Transform cube;
    public Transform cylinder;

    public Transform[] SpawnPoints;

    void Start()
    {
        // случайно разместить один объект
        //setObjectsRandomly(SpawnPoints, sphere);

        // случайно разместить три объекта
        setObjectsRandomly(SpawnPoints, sphere, cylinder, cube);
    }

    // метод принимает массив спавн-точек и любое кол-во объектов со сцены и размещает их случайно по спавн-точнкам.
    private void setObjectsRandomly(Transform[] spawnPoint, params Transform[] objects)
    {
        if (objects.Length > spawnPoint.Length)
        {
            Debug.LogWarning("[setObjectsRandomly] Объектов не может быть больше, чем спавн-точек.");
            return;
        }

        // перемешали объекты
        objects = objects.OrderBy(i => Random.Range(0, 10)).ToArray();

        // помещаем каждый объект в точку спавна по порядку
        for (int i = 0; i < objects.Length; i++)
        {
            objects[i].position = SpawnPoints[i].position;
        }

    }

}
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 7