Понедельник, 25 Ноября 2024, 20:50

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
смена оружия
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 гб, ты щаз серьезно? :D

кроме того, на мобилке с 1 гб наверняка и проц ущербный и остальное железо тоже
заблаговременное создание всех оружий (а также пулинг снарядов) на такой мобилке нужнее чем где-либо еще


Сообщение отредактировал drcrack - Понедельник, 02 Июля 2018, 10:24
Storm54Дата: Понедельник, 02 Июля 2018, 15:56 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Могу добавить, что если рассматривать вариант с Instantiate, то перед его вызовом необходимо получить исходный объект (префаб). Если загружать через Resources, то префаб все-равно останется в памяти, даже после удаления созданного объекта со сцены. Он будет выгружен автоматически при необходимости (при желании можно выгружать и по требованию). Что касается данного вопроса: удобнее в объекте персонажа создать пустышку, к которой будет крепиться оружие. Такой подход позволит избежать необходимости каждый раз менять префаб игрока при добавлении нового оружия. В данном контексте рассматривать использования памяти особого смысла нет, т.к. по сравнению с текстурой оружия, все остальные объекты занимаю крайне мало пямяти, а текстуру желательно загрузить заранее, чтобы не было фризов во время игры.
  • Страница 1 из 1
  • 1
Поиск:

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