Страница 1 из 2

Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 08 июл 2017, 15:32
mops94
Всем привет! Столкнулся с такой проблемой. Создал игрока который управляется кнопками UI. Хочу сделать чтоб можно было менять его спрайты. После того как я сделал его префаб и запустил в другой сцене он не реагирует на нажатия тех кнопок. Сделал префабы каждой кнопки и в них отрегулировал привязку к игроку (именно к его префабу) и перетащил их на новую сцену. Все так же он не реагирует. Помогите пожалуйста решить эту проблему. Мне необходимо создавать префаб игрока и чтоб он работал. А лучше подскажите еще идеи как сменить по - другому персонажа и все работало.

Еще так попробовал. Делать через setactive. Создал копию персонажа прямо в иерархии и отключил его начальную версию. На кнопки перестал реагировать! И анимацию эта копия тоже потеряла. Что не так?

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 08 июл 2017, 16:15
Valentinus
а вы к префабу скрипт-то прикрепили? его поля проинициализировали?

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 08 июл 2017, 16:27
samana
mops94 писал(а): Сделал префабы каждой кнопки и в них отрегулировал привязку к игроку (именно к его префабу) и перетащил их на новую сцену. Все так же он не реагирует.

Конечно, так работать и не должно. Префаб игрока - это просто описание того, как создать этого игрока в игре. То-есть на сцене у вас бегает не префаб, а совершенно новый объект, созданный по "чертежу" префаба игрока, грубо говоря - клон. Да, ваши кнопки привязаны к префабу, но этот префаб всегда остаётся лежать в папке проекта и на сцене ему не дано быть. В сцене могут быть только клоны.

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 01:06
mops94
samana писал(а):
mops94 писал(а): Сделал префабы каждой кнопки и в них отрегулировал привязку к игроку (именно к его префабу) и перетащил их на новую сцену. Все так же он не реагирует.

Конечно, так работать и не должно. Префаб игрока - это просто описание того, как создать этого игрока в игре. То-есть на сцене у вас бегает не префаб, а совершенно новый объект, созданный по "чертежу" префаба игрока, грубо говоря - клон. Да, ваши кнопки привязаны к префабу, но этот префаб всегда остаётся лежать в папке проекта и на сцене ему не дано быть. В сцене могут быть только клоны.


а как же тогда поступить? как сделать смену игрока чтоб он нормально работал?

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 01:07
mops94
Valentinus писал(а):а вы к префабу скрипт-то прикрепили? его поля проинициализировали?


Да там он автоматически прикрепленный остался как и был когда я создавал префаб

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 09:26
samana
Здесь без вашего кода сложно посоветовать. Конечно можно написать какую-то свою реализацию, но вы потом спросите - "А как мне теперь подстроить это под своего персонажа?". Поэтому покажите свой код, как кнопки управляют персонажем и всё остальное, что касается данного вопроса.

Возможно вам будет достаточно в новой сцене просто найти игрока на сцене (GameObject.Find()) и передать ссылку на него кнопкам управления. Либо, если игрок меняется на одном уровне, то при смене опять же передавать кнопкам ссылку на нового игрока. Но это всё теория.

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 15:23
mops94
samana писал(а):Здесь без вашего кода сложно посоветовать. Конечно можно написать какую-то свою реализацию, но вы потом спросите - "А как мне теперь подстроить это под своего персонажа?". Поэтому покажите свой код, как кнопки управляют персонажем и всё остальное, что касается данного вопроса.

Возможно вам будет достаточно в новой сцене просто найти игрока на сцене (GameObject.Find()) и передать ссылку на него кнопкам управления. Либо, если игрок меняется на одном уровне, то при смене опять же передавать кнопкам ссылку на нового игрока. Но это всё теория.


У меня кнопки не через код подвязаны. А просто OnClick я выбрал префаб персонажа и выбрал метод который надо делать той кнопкой

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 16:15
seaman
И кнопки и перс создаются на новой сцене по новому? Тогда привязывайте onclick в коде.

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 16:45
mops94
seaman писал(а):И кнопки и перс создаются на новой сцене по новому? Тогда привязывайте onclick в коде.


Подскажите пожалуйста как это сделать? У меня получается создается персонаж из префаба и как он через код его скрипта может находить эти кнопки? это стало бы реально решением проблемы

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 16:53
mops94
seaman писал(а):И кнопки и перс создаются на новой сцене по новому? Тогда привязывайте onclick в коде.


Я знаю что можно кнопкам сделать тег. Но не знаю как в коде именно прописать чтоб находились эти кнопки и выполнялись функции.
Мне просто надо еще еще чтоб скрипт персонажа кроме кнопок находил слайдер ХП и Текстовое поле количества пуль

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 17:01
samana
mops94 писал(а):
seaman писал(а):И кнопки и перс создаются на новой сцене по новому? Тогда привязывайте onclick в коде.


Подскажите пожалуйста как это сделать? У меня получается создается персонаж из префаба и как он через код его скрипта может находить эти кнопки? это стало бы реально решением проблемы

Если у вас действительно в каждой сцене новые кнопки и новый персонаж, то связать их можно так.
Допустим есть персонаж имя которого в иерархии Player и на нём есть скрипт PlayerController с публичными методами moveLeft и moveRight.
Так же в иерархии есть две кнопки с именами ButtonLeft и ButtonRight.
Будем делать поиск по именам объектов. Для этого в старте любого скрипта делаете следующее

Синтаксис:
Используется csharp
Button leftButton = GameObject.Find("ButtonLeft").GetComponent<Button>();  //находим кнопку "влево" и получаем её компонент Button
Button rightButton = GameObject.Find("ButtonRight").GetComponent<Button>();// то же самое для кнопки "вправо"

PlayerController playerController = GameObject.Find("Player").GetComponent<PlayerController>(); // находим игрока с имерем "Player" и получаем ссылку на его скрипт PlayerController

leftButton.onClick.AddListener(playerController.moveLeft); //привязываем метод игрока moveLeft к клику кнопки leftButton
rightButton.onClick.AddListener(playerController.moveRight);//аналогично для правой кнопки

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 17:07
mops94
samana писал(а):
mops94 писал(а):
seaman писал(а):И кнопки и перс создаются на новой сцене по новому? Тогда привязывайте onclick в коде.


Подскажите пожалуйста как это сделать? У меня получается создается персонаж из префаба и как он через код его скрипта может находить эти кнопки? это стало бы реально решением проблемы

Если у вас действительно в каждой сцене новые кнопки и новый персонаж, то связать их можно так.
Допустим есть персонаж имя которого в иерархии Player и на нём есть скрипт PlayerController с публичными методами moveLeft и moveRight.
Так же в иерархии есть две кнопки с именами ButtonLeft и ButtonRight.
Будем делать поиск по именам объектов. Для этого в старте любого скрипта делаете следующее

Синтаксис:
Используется csharp
Button leftButton = GameObject.Find("ButtonLeft").GetComponent<Button>();  //находим кнопку "влево" и получаем её компонент Button
Button rightButton = GameObject.Find("ButtonRight").GetComponent<Button>();// то же самое для кнопки "вправо"

PlayerController playerController = GameObject.Find("Player").GetComponent<PlayerController>(); // находим игрока с имерем "Player" и получаем ссылку на его скрипт PlayerController

leftButton.onClick.AddListener(playerController.moveLeft); //привязываем метод игрока moveLeft к клику кнопки leftButton
rightButton.onClick.AddListener(playerController.moveRight);//аналогично для правой кнопки


Спасибо большое за помощь! сейчас буду пробовать. Я решил так. В каждой сцене новые кнопки создавать не буду. А просто будет создаваться новый префаб игрока который будет искать нужные ему кнопки на сцене. А на сцене уже будет готовый канвас и кнопки которые менятся не будут и создаваться заново тоже. Правильное решение?

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 17:11
samana
mops94 писал(а):Правильное решение?

Почему бы и нет. Если всё будет работать, то конечно правильное.

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 17:13
seaman
Игрок от сцены к сцене меняется? Если нет - можно и его не разрушать и кнопки (DontDestroyOnLoad). Тогда можно привязать один раз кнопки с игроком на первой сцене.

Re: Смена персонажа. Проблема с озданием его префаба

СообщениеДобавлено: 09 июл 2017, 17:17
mops94
seaman писал(а):Игрок от сцены к сцене меняется? Если нет - можно и его не разрушать и кнопки (DontDestroyOnLoad). Тогда можно привязать один раз кнопки с игроком на первой сцене.


У меня будет возможность выбора персонажа. Если персонаж выбран например кроль то будет создаваться префаб кроля. если другой то другой.