Вопрос по галерее
Posted: 18 Jan 2021 09:54
by CrazyTrickster
Я хочу вызвать скрипт нани из галереи. Пробовал создать как кастомный префаб, так и сам нани скрипт. Помещал их в блок конфигурации Unlockables. Однако при запуске игра получаю сообщение с ошибкой:
Exception: Resource Unlockables/CG/Chapter_1
failed to load.
Не смог понять что делаю не так:(
Re: Вопрос по галерее
Posted: 18 Jan 2021 10:04
by Elringus
Вы имеете ввиду, например при нажатии на кнопку в галерее запустить скрипт сценария (naninovel script)?
Re: Вопрос по галерее
Posted: 18 Jan 2021 10:07
by CrazyTrickster
Ну да, разблокируемый объект на который кликаешь. В примерах были только картинки, а я пытался сделать картинку с возможностью клика по ней и запуска скрипта.
Re: Вопрос по галерее
Posted: 18 Jan 2021 10:14
by Elringus
Понял. Для простых эвентов по нажатию кнопки можно исползовать Play Script
компонент https://naninovel.com/guide/user-interf ... nity-event Но в вашем случае нужно также учитывать какой именно слот был кликнут, так что здесь без скриптинга на шарпе (или визуального) не обойтись. Нужно создать кастомный Gallery UI, там есть ссылка на префаб слотов — его также делаете кастомным (компонент можно унаследовать от CGGalleryGridSlot
) и прописываете кастомный хендлер кликов.
Re: Вопрос по галерее
Posted: 18 Jan 2021 10:36
by CrazyTrickster
Понял, попробую. Спасибо за помощь!
Re: Вопрос по галерее
Posted: 18 Jan 2021 11:10
by Elringus
Я добавил On Slot Clicked
эвент в компонент галлерии (обновленный пекедж в дискорде в #download), с ним возможно получится обойтись без кастомных скриптов на шарпе. Ниже пример использования (принт там только для примера, вы можете вызвать команду, которая вам нужна, например @goto
в нужный скрипт, в зависимости от {arg}
, который возвращает ID слота/unlockable ресурса):
Re: Вопрос по галерее
Posted: 18 Jan 2021 14:56
by CrazyTrickster
Да, это судя по всему то что нужно. Правда, мне показалось что не отработало как должно. Я сделал всё так же как на скрине, создал кастомный CGGalleryUI, добавил событие в On Slot Clicked, добавил компонент Play Script и обработал его в добавленном ивенте и получил при клике ошибку:
Custom variable arg
doesn't exist, but its value is requested in a script expression; this could lead to evaluation errors. Make sure to initialize variables with @set
command or via Custom Variables
configuration menu before using them.
Так же у меня в конфигах при создании кастомного CGGalleryUI в родительском объекте у компонента Canvas, стоял Render mode - screen space camera, из за чего галерея отображалась некорректно. Хотя может быть это только у меня т.к. мог промахнуться где нибудь:)
Re: Вопрос по галерее
Posted: 18 Jan 2021 16:03
by Elringus
Странно, перепроверил — у меня работает. По поводу камеры, screen space camera это правильное значение. Если вы имеете ввиду что принтер под галлереей прячется — так и должно быть. Можно order in layer сделать меньше у галлерии, если нужно её под принтер поставить.
Re: Вопрос по галерее
Posted: 18 Jan 2021 16:06
by Elringus
А какая у вас версия юнити, кстати? Попробуйте 2019.4.11.
Re: Вопрос по галерее
Posted: 19 Jan 2021 07:09
by CrazyTrickster
Версия юнити была 2019.4.17, поставил 2019.4.11, результат тот же.
Залез в исходник класса CGGalleryPanel в метод HandleSlotClicked, в условии было только:
if (onSlotClicked != null && onSlotClicked.GetPersistentEventCount() > 0)
onSlotClicked.Invoke(slotId);
else ShowCG(slotId);
Добавил в иф ещё одну строку
if (onSlotClicked != null && onSlotClicked.GetPersistentEventCount() > 0)
{
VariableManager.SetVariableValue("arg", slotId);
onSlotClicked.Invoke(slotId);
Теперь работает. Хотя не уверен что так должно быть:)
Re: Вопрос по галерее
Posted: 19 Jan 2021 08:10
by Elringus
В переменные arg писать точно не нужно, это аргумент функции.
Re: Вопрос по галерее
Posted: 19 Jan 2021 08:11
by Elringus
Как вариант, можете попробовать удалить папку Naninovel и импортировать последнюю версию ещё раз. Возможно, PlayScript остался из старой версии без поддержки аргументов.
Re: Вопрос по галерее
Posted: 19 Jan 2021 11:34
by CrazyTrickster
Решил проблему, как оказалось я вызывал нет тот метод компонента Play Script. Я вызывал play() когда нужно было просто play
Правда теперь решил сборку сделать впервые на версии нани 1.15, и на мобилках теперь сборка не работает, после главного меню бесконечная загрузка, в юнити запускается без проблем. Когда пытался вернуть версию 1.14 - даже главное меню в юнити не грузилось:( По этому поводу отдельную тему лучше создать? и мб есть какие то логи где можно было бы посмотреть почему на андроиде вечная загрузка?
Re: Вопрос по галерее
Posted: 19 Jan 2021 12:29
by Elringus
Да, нужен лог с устройства. Включите development build при сборке и возьмите лог. Здесь указано, где лежат логи на разных платформах: https://docs.unity3d.com/Manual/LogFiles.html
Re: Вопрос по галерее
Posted: 19 Jan 2021 14:19
by CrazyTrickster
Нашел в чём была проблема. Правда не понял ничего, исправил путём добавления шейдера Unlit/Transparent. А вот почему он пропал не понятно.
В любом случае спасибо за наставления, проблемы решены и можно двигаться дальше!:)