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

Общие вопросы о Unity3D

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

Сообщение mops94 08 июл 2017, 15:32

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

Еще так попробовал. Делать через setactive. Создал копию персонажа прямо в иерархии и отключил его начальную версию. На кнопки перестал реагировать! И анимацию эта копия тоже потеряла. Что не так?
mops94
UNец
 
Сообщения: 20
Зарегистрирован: 29 фев 2016, 17:12

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

Сообщение Valentinus 08 июл 2017, 16:15

а вы к префабу скрипт-то прикрепили? его поля проинициализировали?
другое мое творчество: samlib.ru/u/us_w/
Аватара пользователя
Valentinus
Старожил
 
Сообщения: 889
Зарегистрирован: 24 мар 2017, 18:33

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

Сообщение samana 08 июл 2017, 16:27

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

Конечно, так работать и не должно. Префаб игрока - это просто описание того, как создать этого игрока в игре. То-есть на сцене у вас бегает не префаб, а совершенно новый объект, созданный по "чертежу" префаба игрока, грубо говоря - клон. Да, ваши кнопки привязаны к префабу, но этот префаб всегда остаётся лежать в папке проекта и на сцене ему не дано быть. В сцене могут быть только клоны.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

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

Сообщение mops94 09 июл 2017, 01:06

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

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


а как же тогда поступить? как сделать смену игрока чтоб он нормально работал?
mops94
UNец
 
Сообщения: 20
Зарегистрирован: 29 фев 2016, 17:12

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

Сообщение mops94 09 июл 2017, 01:07

Valentinus писал(а):а вы к префабу скрипт-то прикрепили? его поля проинициализировали?


Да там он автоматически прикрепленный остался как и был когда я создавал префаб
mops94
UNец
 
Сообщения: 20
Зарегистрирован: 29 фев 2016, 17:12

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

Сообщение samana 09 июл 2017, 09:26

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

Возможно вам будет достаточно в новой сцене просто найти игрока на сцене (GameObject.Find()) и передать ссылку на него кнопкам управления. Либо, если игрок меняется на одном уровне, то при смене опять же передавать кнопкам ссылку на нового игрока. Но это всё теория.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

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

Сообщение mops94 09 июл 2017, 15:23

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

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


У меня кнопки не через код подвязаны. А просто OnClick я выбрал префаб персонажа и выбрал метод который надо делать той кнопкой
mops94
UNец
 
Сообщения: 20
Зарегистрирован: 29 фев 2016, 17:12

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

Сообщение seaman 09 июл 2017, 16:15

И кнопки и перс создаются на новой сцене по новому? Тогда привязывайте onclick в коде.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение mops94 09 июл 2017, 16:45

seaman писал(а):И кнопки и перс создаются на новой сцене по новому? Тогда привязывайте onclick в коде.


Подскажите пожалуйста как это сделать? У меня получается создается персонаж из префаба и как он через код его скрипта может находить эти кнопки? это стало бы реально решением проблемы
mops94
UNец
 
Сообщения: 20
Зарегистрирован: 29 фев 2016, 17:12

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

Сообщение mops94 09 июл 2017, 16:53

seaman писал(а):И кнопки и перс создаются на новой сцене по новому? Тогда привязывайте onclick в коде.


Я знаю что можно кнопкам сделать тег. Но не знаю как в коде именно прописать чтоб находились эти кнопки и выполнялись функции.
Мне просто надо еще еще чтоб скрипт персонажа кроме кнопок находил слайдер ХП и Текстовое поле количества пуль
mops94
UNец
 
Сообщения: 20
Зарегистрирован: 29 фев 2016, 17:12

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

Сообщение samana 09 июл 2017, 17:01

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);//аналогично для правой кнопки
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

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

Сообщение mops94 09 июл 2017, 17:07

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);//аналогично для правой кнопки


Спасибо большое за помощь! сейчас буду пробовать. Я решил так. В каждой сцене новые кнопки создавать не буду. А просто будет создаваться новый префаб игрока который будет искать нужные ему кнопки на сцене. А на сцене уже будет готовый канвас и кнопки которые менятся не будут и создаваться заново тоже. Правильное решение?
mops94
UNец
 
Сообщения: 20
Зарегистрирован: 29 фев 2016, 17:12

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

Сообщение samana 09 июл 2017, 17:11

mops94 писал(а):Правильное решение?

Почему бы и нет. Если всё будет работать, то конечно правильное.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

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

Сообщение seaman 09 июл 2017, 17:13

Игрок от сцены к сцене меняется? Если нет - можно и его не разрушать и кнопки (DontDestroyOnLoad). Тогда можно привязать один раз кнопки с игроком на первой сцене.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

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

Сообщение mops94 09 июл 2017, 17:17

seaman писал(а):Игрок от сцены к сцене меняется? Если нет - можно и его не разрушать и кнопки (DontDestroyOnLoad). Тогда можно привязать один раз кнопки с игроком на первой сцене.


У меня будет возможность выбора персонажа. Если персонаж выбран например кроль то будет создаваться префаб кроля. если другой то другой.
mops94
UNец
 
Сообщения: 20
Зарегистрирован: 29 фев 2016, 17:12

След.

Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6