Пятница, 19 Апреля 2024, 08:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Не работает строчка массива Transform [РЕШЕНО] (Что не так я делаю)
Не работает строчка массива Transform [РЕШЕНО]
serezhaДата: Вторник, 07 Декабря 2021, 19:03 | Сообщение # 1
был не раз
Сейчас нет на сайте
Вот что сделал:
public Transform[] arrayOfSpawnPoints, заполнил тремя GO пустышками в инспекторе.
В public GameObject PlayerKubik перетащил GO куб в инспекторе.
Для строки спавна в целях эксперемента назначил клавишу, когда нажимаю эту клавишу, то GO "PlayerKubik" спавнится только в точке элемента 0 Transform[] и так постоянно, всегда только в одной этой точке, а нужно чтобы и в других тоже спавнился. Перепробовал разные комбинации transform, но всё равно не работает.

Что не так я делаю в этой строчке массива Transform:

Instantiate (PlayerKubik, arrayOfSpawnPoints [Random.Range (0, arrayOfSpawnPoints.Length)]);

P.S. До этого вообще GO "PlayerKubik" проваливался сквозь землю.

Вопрос решен!


Сообщение отредактировал serezha - Среда, 08 Декабря 2021, 18:53
drcrackДата: Вторник, 07 Декабря 2021, 20:01 | Сообщение # 2
старожил
Сейчас нет на сайте
Цитата
Instantiate (PlayerKubik, arrayOfSpawnPoints [Random.Range (0, arrayOfSpawnPoints.Length)]);

в перегрузке которую ты юзаешь второй параметр это родитель для нового обьекта
а надо так:
Код

var spawn = arrayOfSpawnPoints [Random.Range (0, arrayOfSpawnPoints.Length)];
Instantiate (PlayerKubik, spawn.position, spawn.rotation);
serezhaДата: Вторник, 07 Декабря 2021, 20:30 | Сообщение # 3
был не раз
Сейчас нет на сайте
drcrack, Спасибо большое! Как раз то что мне нужно! :) Еще хочу спросить, а можно ли это в одну строчку записать?
drcrackДата: Вторник, 07 Декабря 2021, 22:33 | Сообщение # 4
старожил
Сейчас нет на сайте
Цитата
Еще хочу спросить, а можно ли это в одну строчку записать?

простым способом наверно нельзя, по крайней мере ничего в голову сходу не приходит
а зачем?
DmitriyIMДата: Среда, 08 Декабря 2021, 07:50 | Сообщение # 5
был не раз
Сейчас нет на сайте
Цитата serezha ()
можно ли это в одну строчку записать?


№1: ... (по словам drcrack: нет такой перегрузки у Instantiate; проверю, напишу)

№2:
Код
Instantiate(PlayerKubik, arrayOfSpawnPoints[Random.Range(0, arrayOfSpawnPoints.Length)].position, Quaternion.identity);


Сообщение отредактировал DmitriyIM - Среда, 08 Декабря 2021, 15:42
drcrackДата: Среда, 08 Декабря 2021, 09:07 | Сообщение # 6
старожил
Сейчас нет на сайте
DmitriyIM, вариант 1 не скомпилируется (нет такой перегрузки у Instantiate), вариант 2 игнорирует вращение спауна (тс не писал явно что ему нужно вращение, но в его первом варианте, хоть и кривом, вращение было, в моем тоже было, и если ты хочешь это записать в одну строчку, учитывай вращение тоже)

Сообщение отредактировал drcrack - Среда, 08 Декабря 2021, 09:11
DmitriyIMДата: Среда, 08 Декабря 2021, 13:42 | Сообщение # 7
был не раз
Сейчас нет на сайте
Цитата drcrack ()
вариант 1 не скомпилируется (нет такой перегрузки у Instantiate)


Точно? blink По информации из https://docs.unity3d.com/ScriptReference/Object.Instantiate.html он должен быть, но сейчас нет возможности это проверить, поэтому пока его убрал.

Цитата drcrack ()
если ты хочешь это записать в одну строчку, учитывай вращение тоже)

Ну в качестве альтернативы можно вместо переменной написать свою функцию ;) а в ней уже брать позицию и поворот.
drcrackДата: Среда, 08 Декабря 2021, 18:20 | Сообщение # 8
старожил
Сейчас нет на сайте
Цитата
https://docs.unity3d.com/ScriptReference/Object.Instantiate.html он должен быть

в перегрузке с 2 параметрами второй из них это родитель для нового обьекта. ее конечно тоже можно использовать но обьект будет создаваться внутри спауна что не очень удобно

Цитата
Ну в качестве альтернативы можно вместо переменной написать свою функцию ;) а в ней уже брать позицию и поворот.

можно. но не в одну строчку


Сообщение отредактировал drcrack - Среда, 08 Декабря 2021, 18:23
serezhaДата: Среда, 08 Декабря 2021, 18:45 | Сообщение # 9
был не раз
Сейчас нет на сайте
Цитата
Instantiate(PlayerKubik, arrayOfSpawnPoints[Random.Range(0, arrayOfSpawnPoints.Length)].position, Quaternion.identity);

DmitriyIM, спасибо, строка работает! :) Кстати, я пытался в самом начале до создания темы делать команду и ставить в самый конец "Quaternion.identity", но юнька ругалась страшно))) я не догадался поставить ".position" перед поворотом.
Цитата drcrack ()
простым способом наверно нельзя, по крайней мере ничего в голову сходу не приходит
а зачем?

ИМХО: Для удобства :) Просто заметил, что если изначально писать строчкой, а не в столбик то в скрипте, где например много команд, не придется долго крутить колесиком мыши или листать сбоку, чтобы модифицировать нужный участок кода т.е. 50 строк более лучше..я бы сказал эстетичней что ль смотрится:) чем 150 строк.
В любом случае Всем большая благодарность, вопрос решен! :)


Сообщение отредактировал serezha - Среда, 08 Декабря 2021, 18:49
Robinzon787Дата: Четверг, 09 Декабря 2021, 12:16 | Сообщение # 10
Construct'орщик
Сейчас нет на сайте
Цитата serezha ()
ИМХО: Для удобства :) Просто заметил, что если изначально писать строчкой, а не в столбик то в скрипте, где например много команд, не придется долго крутить колесиком мыши или листать сбоку, чтобы модифицировать нужный участок кода т.е. 50 строк более лучше..я бы сказал эстетичней что ль смотрится:) чем 150 строк.


Для этого ты выносишь соответствующий код в отдельный метод с хорошим, говорящим названием, опускаешь этот метод ниже в коде, чтобы в глаза не бросался сразу. Когда в следующий раз обратишься к своему коду увидишь метод, который по названию тебе скажет что он делает. Если нужно изменить то перейдешь в метод и изменишь. Писать в одну строку плохая практика, сильно нагружает код. Иногда лучше наоборот разделить код как можно больше, повышает читаемость и нагржуенность строки. Может сейчас ты так и не думаешь, но когда таких участков будет больше и ты придешь к коду через пару недель или даже месяцев, то поймешь что ошибался по поводу 50 длинных vs 150 коротких строк.


Переустановил ос - начал жизнь с чистого листа.
serezhaДата: Воскресенье, 19 Декабря 2021, 21:29 | Сообщение # 11
был не раз
Сейчас нет на сайте
Robinzon787, про написание отдельного метода мне известно :D это самое первое что приходит на ум, видимо я не совсем правильно изложил свою мысль :) Размножение методов не подходит, так как опять добавляет лишние строки, плюс то что говорите "метод опускать ниже в коде чтобы в глаза не бросался" как раз и будет лишним действием опять крутить к низу кода чтобы вспомнить что туда засунул в это метод, а учитывая что если этих методов сотни, то это будет просто жесть... %)
Я имел ввиду чтобы участки кода разложить по полочкам в скрипте для легкого восприятия человеком, а когда отдельные куски кода находятся в разных методах как предлагаете, то тогда сложно "ловить" что куда чего отправляется или меняется, прыгая при чтении кода из одного места в другое...может размножение методов кому то и будет удобно, но не мне :)


Сообщение отредактировал serezha - Воскресенье, 19 Декабря 2021, 22:42
drcrackДата: Понедельник, 20 Декабря 2021, 09:20 | Сообщение # 12
старожил
Сейчас нет на сайте
Цитата
как раз и будет лишним действием опять крутить к низу кода чтобы вспомнить что туда засунул в это метод, а учитывая что если этих методов сотни, то это будет просто жесть... %)

в любой нормальной IDE есть возможность как быстро перейти к реализации метода, так и вернуться обратно, так что крутить ничего не надо

Цитата
может размножение методов кому то и будет удобно, но не мне

посмотрим на тебя через годик-другой :D


Сообщение отредактировал drcrack - Понедельник, 20 Декабря 2021, 09:22
serezhaДата: Понедельник, 20 Декабря 2021, 15:00 | Сообщение # 13
был не раз
Сейчас нет на сайте
Цитата drcrack ()
в любой нормальной IDE есть возможность как быстро перейти к реализации метода, так и вернуться обратно, так что крутить ничего не надо


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

Цитата drcrack ()
посмотрим на тебя через годик-другой


Я не один год занимаюсь написанием кода и уже давно проверено что размножение методов не лучший вариант! Спорить какой лучше цвет бессмысленно, так как каждый программист по своему пишит код как ему удобнее.

А если по делу, если хочешь реально помочь уважаемый знаток кода :D то тут тема актуальна

https://gcup.ru/forum/59-103628-1

потому что философия философией, но если сможешь реально помочь в этом вопросе буду очень признателен respect
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Не работает строчка массива Transform [РЕШЕНО] (Что не так я делаю)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг