смена оружия
|
|
Sagik | Дата: Суббота, 30 Июня 2018, 20:27 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Сразу говорю, я делаю 2D проект, поэтому задача упрощается. Допустим у нас есть 3 "ячейки" для разных типов вооружения (например: пистолет, автомат, ракетница). Я сделал все эти оружия и сделал их префабами. В общем по карте "разбросаны" спрайты оружий с коллайдерами-триггерами, и когда игрок подходит, появляется кнопочка, мол возьмите (ну или замените если данный тип оружия уже есть). Вот все что я объяснил я знаю как сделать(это для того чтобы было понятно о чем речь). Мне нужно чтобы при нажатии оружие появлялось у игрока как его дочерний объект, а также возможность переключаться между ними (если допустим нету автомата то игрок может переключаться только между ракетницей и пистолетом, пока он не найдет автомат). То есть что бы при нажатии определенной клавиши префаб появлялся как дочерний объект и сохранялся когда игрок находит или переключается на другой вид вооружения.
|
|
| |
roma3fon | Дата: Суббота, 30 Июня 2018, 22:04 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Sagik, если я правильно вас понял, то повесьте все возможные виды оружия на игрока, и просто выставляйте флаги их доступности.
|
|
| |
FrozenSkeleton | Дата: Суббота, 30 Июня 2018, 22:35 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Тебе не обязательно их "подбирать", можно сразу вложить в перса, создать массив с префабами внутри скрипта персонажа, а потом просто прятать одно оружие и показывать другое. (как вариант) Если нужно подбирать и прикручивать к объекту, то есть функция transform.SetParent()
Сообщение отредактировал FrozenSkeleton - Суббота, 30 Июня 2018, 22:46 |
|
| |
Sagik | Дата: Воскресенье, 01 Июля 2018, 10:23 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Цитата roma3fon ( ) Sagik, если я правильно вас понял, то повесьте все возможные виды оружия на игрока, и просто выставляйте флаги их доступности. А что за флаги доступности?
|
|
| |
roma3fon | Дата: Воскресенье, 01 Июля 2018, 10:37 | Сообщение # 5 |
участник
Сейчас нет на сайте
| Sagik, Код Флаг характеризует состояние некоторого объекта. Создаешь структуру с описаниями всех состояний связанных с оружием, и переключаешь по необходимости
|
|
| |
vampir0305 | Дата: Воскресенье, 01 Июля 2018, 10:51 | Сообщение # 6 |
Unity C# Programmer
Сейчас нет на сайте
| Закидываешь все префабы оружия на игрока и деактивирешь их. Когда переключаешься на какоё-то оружие активируешь его. А то которое было в рука деактивируешь.
Красочная сюжетно-ориентированная игра-головоломка
|
|
| |
VLGames | Дата: Понедельник, 02 Июля 2018, 03:13 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Фиг его знает зачем в персе таскать кучу оружия как предлагают выше, я бы тупо хранил инфу по оружию в каком нибудь списке. А при переключении банально дестроил старое и инстатиэйт новое с параметрами типа количество патронов из того списка. Как минимум это меньшее количество занятой оперы, чем таскать каждую пуху с собой.
|
|
| |
drcrack | Дата: Понедельник, 02 Июля 2018, 09:13 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| 1. instantiate/destroy в сотни раз медленнее чем просто включение/выключение обьектов 2. экономия 10 кб памяти не имеет смысла на современном железе 3. не говоря уже о том что при разрушении обьекта память не освободится пока до нее не доберется сборщик мусора 3.1. кроме того, в твоих интересах сразу отправить все постоянно используемые обьекты в последнее поколение чтобы он не дергал их каждый проход 3.2. если быстро переключать оружие, в среднем памяти будет занято даже больше чем при варианте с включением/выключением
и это только основные недостатки
PS минус даже не за само нубское решение, а за подачу его как единственно правильное, как будто ты гуру с 30-летним опытом
Цитата Закидываешь все префабы оружия на игрока и деактивирешь их. Когда переключаешься на какоё-то оружие активируешь его. А то которое было в рука деактивируешь. самое нормальное решение. если игрок это всегда один и тот же префаб, можно прямо в редакторе закинуть в него, если нет (т.е. игрок может быть разным), проще при спауне игрока в нем создавать все оружия из префабов
Сообщение отредактировал drcrack - Понедельник, 02 Июля 2018, 09:14 |
|
| |
VLGames | Дата: Понедельник, 02 Июля 2018, 09:39 | Сообщение # 9 |
был не раз
Сейчас нет на сайте
| Цитата drcrack ( ) PS минус даже не за само нубское решение, а за подачу его как единственно правильное, как будто ты гуру с 30-летним опытом На минус пофиг, а за то что вам показалось что оно так подано сорян, не спецом)
На счет переключения согласен оно быстрее, однако и "10кб" памяти на мобилке с 1гб где 30 процентов сжирает система, они будут куда полезнее в сэкономленном варианте.
|
|
| |
drcrack | Дата: Понедельник, 02 Июля 2018, 10:22 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| Цитата VLGames ( ) однако и "10кб" памяти на мобилке с 1гб где 30 процентов сжирает система, они будут куда полезнее в сэкономленном варианте. 10 кб это 0.0000095 от 1 гб, ты щаз серьезно?
кроме того, на мобилке с 1 гб наверняка и проц ущербный и остальное железо тоже заблаговременное создание всех оружий (а также пулинг снарядов) на такой мобилке нужнее чем где-либо еще
Сообщение отредактировал drcrack - Понедельник, 02 Июля 2018, 10:24 |
|
| |
Storm54 | Дата: Понедельник, 02 Июля 2018, 15:56 | Сообщение # 11 |
постоянный участник
Сейчас нет на сайте
| Могу добавить, что если рассматривать вариант с Instantiate, то перед его вызовом необходимо получить исходный объект (префаб). Если загружать через Resources, то префаб все-равно останется в памяти, даже после удаления созданного объекта со сцены. Он будет выгружен автоматически при необходимости (при желании можно выгружать и по требованию). Что касается данного вопроса: удобнее в объекте персонажа создать пустышку, к которой будет крепиться оружие. Такой подход позволит избежать необходимости каждый раз менять префаб игрока при добавлении нового оружия. В данном контексте рассматривать использования памяти особого смысла нет, т.к. по сравнению с текстурой оружия, все остальные объекты занимаю крайне мало пямяти, а текстуру желательно загрузить заранее, чтобы не было фризов во время игры.
|
|
| |