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

Раздел для общения на русском языке.
Post Reply
CrazyTrickster
Posts: 7
Joined: 18 Jan 2021 09:39

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

Post by CrazyTrickster »

Я хочу вызвать скрипт нани из галереи. Пробовал создать как кастомный префаб, так и сам нани скрипт. Помещал их в блок конфигурации Unlockables. Однако при запуске игра получаю сообщение с ошибкой:

Exception: Resource Unlockables/CG/Chapter_1 failed to load.

Не смог понять что делаю не так:(

Elringus
admin
Posts: 538
Joined: 11 May 2020 18:03

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

Post by Elringus »

Вы имеете ввиду, например при нажатии на кнопку в галерее запустить скрипт сценария (naninovel script)?

CrazyTrickster
Posts: 7
Joined: 18 Jan 2021 09:39

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

Post by CrazyTrickster »

Ну да, разблокируемый объект на который кликаешь. В примерах были только картинки, а я пытался сделать картинку с возможностью клика по ней и запуска скрипта.

Elringus
admin
Posts: 538
Joined: 11 May 2020 18:03

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

Post by Elringus »

Понял. Для простых эвентов по нажатию кнопки можно исползовать Play Script компонент https://naninovel.com/guide/user-interf ... nity-event Но в вашем случае нужно также учитывать какой именно слот был кликнут, так что здесь без скриптинга на шарпе (или визуального) не обойтись. Нужно создать кастомный Gallery UI, там есть ссылка на префаб слотов — его также делаете кастомным (компонент можно унаследовать от CGGalleryGridSlot) и прописываете кастомный хендлер кликов.

CrazyTrickster
Posts: 7
Joined: 18 Jan 2021 09:39

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

Post by CrazyTrickster »

Понял, попробую. Спасибо за помощь!

Elringus
admin
Posts: 538
Joined: 11 May 2020 18:03

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

Post by Elringus »

Я добавил On Slot Clicked эвент в компонент галлерии (обновленный пекедж в дискорде в #download), с ним возможно получится обойтись без кастомных скриптов на шарпе. Ниже пример использования (принт там только для примера, вы можете вызвать команду, которая вам нужна, например @goto в нужный скрипт, в зависимости от {arg}, который возвращает ID слота/unlockable ресурса):

Image

CrazyTrickster
Posts: 7
Joined: 18 Jan 2021 09:39

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

Post 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

Elringus
admin
Posts: 538
Joined: 11 May 2020 18:03

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

Post by Elringus »

Странно, перепроверил — у меня работает. По поводу камеры, screen space camera это правильное значение. Если вы имеете ввиду что принтер под галлереей прячется — так и должно быть. Можно order in layer сделать меньше у галлерии, если нужно её под принтер поставить.

Elringus
admin
Posts: 538
Joined: 11 May 2020 18:03

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

Post by Elringus »

А какая у вас версия юнити, кстати? Попробуйте 2019.4.11.

CrazyTrickster
Posts: 7
Joined: 18 Jan 2021 09:39

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

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

Теперь работает. Хотя не уверен что так должно быть:)

Elringus
admin
Posts: 538
Joined: 11 May 2020 18:03

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

Post by Elringus »

В переменные arg писать точно не нужно, это аргумент функции.

Elringus
admin
Posts: 538
Joined: 11 May 2020 18:03

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

Post by Elringus »

Как вариант, можете попробовать удалить папку Naninovel и импортировать последнюю версию ещё раз. Возможно, PlayScript остался из старой версии без поддержки аргументов.

CrazyTrickster
Posts: 7
Joined: 18 Jan 2021 09:39

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

Post by CrazyTrickster »

Решил проблему, как оказалось я вызывал нет тот метод компонента Play Script. Я вызывал play() когда нужно было просто play

Image

Правда теперь решил сборку сделать впервые на версии нани 1.15, и на мобилках теперь сборка не работает, после главного меню бесконечная загрузка, в юнити запускается без проблем. Когда пытался вернуть версию 1.14 - даже главное меню в юнити не грузилось:( По этому поводу отдельную тему лучше создать? и мб есть какие то логи где можно было бы посмотреть почему на андроиде вечная загрузка?

Elringus
admin
Posts: 538
Joined: 11 May 2020 18:03

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

Post by Elringus »

Да, нужен лог с устройства. Включите development build при сборке и возьмите лог. Здесь указано, где лежат логи на разных платформах: https://docs.unity3d.com/Manual/LogFiles.html

CrazyTrickster
Posts: 7
Joined: 18 Jan 2021 09:39

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

Post by CrazyTrickster »

Нашел в чём была проблема. Правда не понял ничего, исправил путём добавления шейдера Unlit/Transparent. А вот почему он пропал не понятно.

Image

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

Post Reply