Доброго времени суток.
Я совсем новичок в программировании, поэтому нужна помощь...
C#
Unity 3D
Мне нужно сделать спавн одного объекта в заранее подготовленных точках. Это должно происходить при триггере OnTriggerEnter().
Нужно, чтобы объект не спавнился на новом месте, пока не будет уничтожена его копия.
То-есть на сцене не более одной копии этого объекта одновременно.
Я пыталась написать скрипт, который успехом не увенчался и спавнил объект в рандомной точке, чаще за игровым полем или вообще в коллайдерах других объектов на сцене.
Объясните, пожалуйста, как это можно сделать: Только прошу, не "Ну, ты можешь сделать через вот это, используя вот это"
А максимально подробно, как и что должно быть...
Можете не писать весь скрипт, главное объясните, напишите даже, возможно, ту часть кода, которая отвечает за проверку (если ли объект на сцене) и если объекта нет, то рандомно выбирает точку спавна из списка и отправляет объект туда. И так до тех пор, пора игра не закончится.
Я могу объяснить на словах, то что мне нужно от кода, но вот написать это в скрипте та ещё проблема...
Не ругайтесь, пожалуйста, что "учись сама, вот объяснение"
Я обязательно научусь этому, но сейчас у меня нет времени на многомиллионные пробы и ошибки...
Спасибо всем, кто откликнется в комментариях или в личных сообщениях :З
https://docs.unity3d.com/Manual/InstantiatingPrefabs.html
смотри пример там Vecto3(0,0,0) это координата его респавна
ну а насчет того что бы 1 копия была
ну есть у тя главный скрипт вот там и держи указатель на обьект
если указательь null создаешь (при старте он должен null )
Привет, самое просто что с ходу приходит в голову, это сделать метод, который будет спавнить первый объект по триггеру и хранить его ссылку, а в последствие этот метод будет выполняться подписываться на ивент, который вызывается при смерти. Что касается точек спавна, то создай массив, который будет хранить эти точки, а из него будешь брать случайную.
Вот как это может выглядеть:
[SerializeField] private GameObject _objectPrefab; // Префаб объекта, который нужно заспавнить. [SerializeField] private Vector3[] _spawnPointObject; // Значения укажешь в инспекторе, столько сколько нужно. private GameObject _objectClon = null; public void SpawnObject() //Спавн объекта { _objectClon = Instantiate(_objectPrefab, _spawnPointObject[Random.Range(0, _spawnPointObject.Length)], Quaternion.identity) } private void OnTriggerEnter(Collider collision) // Этот метод сработает на триггер и заспавнит объект если его нет. { if (_objectClon != null) return; SpawnObject(); }
Класс даже сейчас выглядит перегруженным, я бы разделил его, и спавнил объекты в другом классе.
В теории это должно работать, и написал максимально просто, может только что не очень подробно... Будут вопросы пиши, тут я не часто бываю, так что можешь писать в телеграмме. @Astar0th9
Astar0th
Огромное спасибо, о, мой великий спаситель!