Вопрос по галерее

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 ресурса):

Image


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, из за чего галерея отображалась некорректно. Хотя может быть это только у меня т.к. мог промахнуться где нибудь:)

Image


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);

Code: Select all

        } else ShowCG(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

Image

Правда теперь решил сборку сделать впервые на версии нани 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. А вот почему он пропал не понятно.

Image

В любом случае спасибо за наставления, проблемы решены и можно двигаться дальше!:)