#c# #unity3d #user-interface #canvas #position
Вопрос:
В моем проекте 2d Unity у меня есть холст с изображением, которое я хочу использовать в качестве фона.
У меня есть 2 игровых объекта перед этим фоном. Но независимо от того, сколько я играю с Pos Z, Сортировкой слоев или сортировкой по иерархии, изображение всегда находится перед объектами.
Приведенный выше Gif показывает в 3d-режиме, что, хотя изображение явно находится за этими объектами, оно всегда будет отображаться над ними, если они перекрываются.
Иерархия:
- Главная
- Камера (инспектор: https://i.imgur.com/Q5a52cf.png)
- Фонканвас (инспектор: https://i.imgur.com/m9Pxr6B.png)
- Фоновое изображение (инспектор: https://i.imgur.com/jTx7pEW.png)
- Объект 1 (Инспектор: https://i.imgur.com/YcClEhk.png)
- Объект 2
Я очень ценю любой совет, чтобы спасти меня от этого безумия.
Комментарии:
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.