Почему изображение на холсте Unity всегда отображается поверх моих игровых объектов, хотя оно определенно находится за ними?

#c# #unity3d #user-interface #canvas #position

Вопрос:

Изображение на холсте всегда поверх игровых объектов

В моем проекте 2d Unity у меня есть холст с изображением, которое я хочу использовать в качестве фона.

У меня есть 2 игровых объекта перед этим фоном. Но независимо от того, сколько я играю с Pos Z, Сортировкой слоев или сортировкой по иерархии, изображение всегда находится перед объектами.

Приведенный выше Gif показывает в 3d-режиме, что, хотя изображение явно находится за этими объектами, оно всегда будет отображаться над ними, если они перекрываются.

Иерархия:

Я очень ценю любой совет, чтобы спасти меня от этого безумия.

Комментарии:

1. Ваш холст находится в пространстве экранов и, следовательно, всегда находится поверх 3D-объектов. Вы пробовали скорее использовать холст мирового пространства?

2. Я пробовал World Space canvas, к сожалению, это вызывает ту же проблему. (Как с прикрепленной камерой для событий, так и без нее)

3. Правильно ли это: у вас есть 3D-объект, перед которым вы хотите разместить холст, но холст скрыт 3D-объектом? Я не слишком хорошо знаком с тем, как работают объекты спрайтов, но попробуйте установить слой сортировки спрайтов по умолчанию

4. Не совсем: у меня есть два 2d-объекта (красные квадраты в моем gif, спрайты ) перед холстом (зеленый прямоугольник в моем gif, изображение на холсте ). Холст находится в слое сортировки «По умолчанию», а Спрайты находятся в другом слое сортировки, который находится перед слоем сортировки по умолчанию. Но, когда происходит перекрытие, Холст (который определенно находится за спрайтами) появляется перед ними. Игра 2d, но я сделал gif, показывающий ее в 3d-режиме, просто чтобы легче было показать, что холст наверняка находится за спрайтами.

Ответ №1:

Установите значение преобразования z для средства визуализации спрайтов равным 0 вместо 100

Если это не решит проблему, пожалуйста, укажите также свойства камеры, чтобы я мог попытаться воссоздать точную настройку.

Комментарии:

1. Извините за задержку. Установка SpriteRenderers posZ в 0, похоже, не сработала. Вот настройки инспектора камер: i.imgur.com/Q5a52cf.png

2. теперь с той же настройкой, которой вы поделились, верните преобразование z для рендеринга спрайтов на 100 и установите порядок в слое на 1

3. К сожалению, это, похоже, не работает 🙁

4. я попытался настроить на основе того, что вы упомянули в своем вопросе, и свойств камеры, для меня это текущий вывод: drive.google.com/file/d/1DFWZ5MIh54GFm-YNNgfJCj28EvocCqX6/… Также вы можете напрямую использовать средство визуализации спрайтов в качестве фона вместо холста, если вы не ограничены никакими другими ограничениями. Но это кажется незначительным упущением со стороны настройки, иначе это должно сработать, недавно я работал над проектами с похожими ситуациями.

5. Большое спасибо, что нашли время привести свой собственный пример @hiren-katira. Поступая таким образом, я думаю, что вы правы, что, вероятно, это была одна крошечная незначительная проблема где-то в моей массе кода, которую я просто не могу найти. Я провел тест с помощью простого средства визуализации спрайтов, и это, похоже, работает отлично (появляется за спрайтами, как я и хотел), поэтому я думаю, что пока буду использовать этот метод. Я действительно ценю вашу помощь 🙂

Ответ №2:

Попробуйте нажать Layers -> edit layers , внутри слоев сортировки вы можете изменить порядок захвата слоя, все верхнее отображается сзади в камере.

Ответ №3:

У меня была та же проблема, и я исправил ее, прикрепив камеру к холсту, который является пространством экрана, и, наконец, изменив слой сортировки моего объекта на -1.