Как сделать невидимую стену в unity

Обновлено: 14.05.2024

В процессе использования unity3d для разработки игр мы часто сталкиваемся с операциями, которые необходимо скрыть или отобразить. Для этого ниже приводится сводка.

Во-первых, установите статус рендерера

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

Вот код для достижения этой функции:

Здесь я сделал обход, потому что некоторые объекты могут иметь несколько патчей.В этом случае вам нужно отключить все MeshRenderers на всех участках объекта. Но могут быть и более сложные визуализации. Это может быть Trail Renderer, Line Renderer, Skinned Mesh Renderer, Mesh Renderer и т. Д., Затем найдите, отключите / активируйте его, чтобы скрыть или отобразить.


2. Установите "Активный"

Unity4.x будет поддерживать все состояния подобъектов текущего объекта, а unity3.x - если вы установите active в значение true, все подобъекты станут истинными. Это тоже улучшение после обновления Unity.

В-третьих, настройте слой

Предположим, что существующий слой:

Default = 0,TransparentFX = 1,Ignore Raycase = 2,Water = 4,MyLayer = 8.

Установите Culling Mask камеры на: Default + TransparentFX + Ignore Raycase + Water.

Затем, когда Layer объекта установлен на MyLayer, Layer объекта игнорируется в текущей камере, что эквивалентно скрытию. Конкретный код:

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

Интеллектуальная рекомендация

Android Gausso нечеткий реализация

1, используйте скольжение Применимый сценарий: динамическая конфигурация фона изображения 2, на картину Гаусс, вам нужно передавать картинки на битовые объекты Не рекомендую: Используйте растровое изо.


Установите Spark 2.2.1 под облачным сервером Alibaba centos7.2

Выбор версии при установке Spark связан с версией hadoop. Нажмите, чтобы открыть ссылкуПосле ввода выберите подходящее изображение. При нормальных обстоятельствах можно использовать оба .

Заставьте FireFox fieldset имитировать IE в закругленных углах

Метка набора полей написана в Firefox, углы не закруглены, как в IE, что влияет на внешний вид. Мы можем установить стиль в fieldset: .

Установка MongoDB и базовый синтаксис

Метод вызова Notepad ++ и GVIM в Vivado

Метод вызова Notepad ++ и GVIM в Vivado Позвоните Notepad ++ Позвоните в метод GVIM, это не на этом, потому что в середине программных файлов есть пространство Правильный способ установки его на диск .

Эффект, который вы найдете в каждой 2D игре за последние 15 лет называется параллакс-эффектом. Короче говоря, идея заключается в том, чтобы перемещать фоновые слои с разной скоростью (т.е. чем дальше слой, тем медленнее он движется). Если все сделано правильно, то создается иллюзия глубины. Это здорово, красиво и просто в использовании.

Давайте реализуем все это в Unity. Добавление оси скроллинга – задача непростая, и нам придется поразмыслить, как написать остальной код игры с учетом этого аспекта. Над этим стоит задуматься, прежде чем начать кодировать :) Мы можем воспользоваться несколькими решениями:

  1. Игрок и камера двигаются, все остальное неподвижно
  2. Игрок и камера неподвижны. Все остальное движется

Первый вариант представляет собой достаточно сложную задачу, если у вас режим камеры Perspective (камера будет отображать объекты в режиме перспективного просмотра). Параллакс очевиден: фоновые элементы отличаются большей глубиной. Поэтому кажется, что они движутся медленнее.

Но в стандартной 2D игре в Unity мы используем ортографическую камеру (которая будет отображать объекты в ортогональном режиме, т.е. без эффекта глубины). У нас не будет такой величины, как глубина, в принципе.

Немного о камере: помните такое свойство нашей камеры, как "Projection"? В нашей игре оно установлено на Orthographic . Режим
Perspective означает, что мы имеем дело с классической 3D камерой с управлением глубиной. Когда мы переключаетмся на ортографическую камеру, все объекты отображаются с одинаковой глубиной. Это особенно полезно для графического интерфейса или 2D игры.

Чтобы добавить в нашу игру эффект параллакс-скроллинга, нам придется использовать оба эти способа. Итого у нас будет два скроллинга:

  • Игрок движется вперед вместе с камерой.
  • Фоновые элементы движутся с разной скоростью (в дополнение к движению камеры).

Вы можете спросить: "Почему бы нам просто не установить камеру как дочерний объект объекта игрока?". Действительно, в Unity, если вы установите объект (напр. камера ) в качестве дочернего по отношению к объекту игры, то этот объект будет сохранять свою относительную позицию по отношению к своему родителю. Так что, если камера дочерний объект по отношению к игроку и направлена на него, она будет следовать за ним. Да, можно сказать, что это решение задачи, но оно не будет соответствовать нашему геймплею.

В играх жанра shmup, камера ограничивает передвижения игрока. Если камера перемещается вслед за игроком и по горизонтальной, и по вертикальной оси, игрок свободен в своих передвижениях и может идти, куда захочет. Но в нашем случае игрок ДОЛЖЕН находиться внутри четко обозначенной области.

Мы бы также порекомендовали использовать камеру в качестве самостоятельного объекта в 2D играх. Даже в платформере камера не строго привязана к игроку: она следует за его передвижениями с некоторыми ограничениями. В качестве одного из лучших примеров реализации камеры в платформере можно привести всем известную игру Super Mario World.

Спавн (место появления) врагов

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

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

Вот что мы сделаем : Мы расположим осьминогов на карте просто перетянув префабы на нужное место. По умолчанию они статичны и неуязвимы пока не попадут в камеру, которая активирует их.

Использование камеры

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

Мы действительно думаем, что вам стоит использовать редактор Unity в качестве редактора уровней, если, конечно, у вас нет недостатка во времени, средствах и собственных редакторах уровней, для которых нужны специальные инструменты.

Для начала нам нужно определиться с нашими слоями и указать, какие из них будут закольцованы. Закольцованный фон будет повторяться снова и снова на протяжении уровня. Это особенно полезно для таких вещей, как небо. Добавьте новый слой на сцену для фоновых элементов. Вот, что у нас должно получиться:

Слой Повторяющееся Позиция
Задний фон с небом Да (0, 0, 10)
Задний фон (1-й ряд летающих платформ) Нет (0, 0, 9)
Средний фон (2-й ряд летающих платформ) Нет (0, 0, 5)
Передний план с игроками и врагами Нет (0, 0, 0)
Слой

Мы также можем добавить слои впереди игрока. Просто следите за тем, чтобы координаты оси Z находились между [0, 10] , иначе вам придется долго настраивать камеру.

Добавляя слои перед игроком, находящимся на переднем плане, следите за тем, чтобы все объекты были четко видны и отличимы на фоне друг друга. Во многих играх эта техника не используется, так как она влияет на четкость графики.

В стандартных пакетах Unity есть кое-какие скрипты для параллакс-скроллинга (взгляните на демо 2D платформера в Asset Store). Вы, конечно, можете воспользоваться ими, но я подумал, что было бы интересно написать его с нуля. Вообще, старайтесь не использовать стандартные пакеты, поскольку они не дают вашему разуму развиваться. Вы ведь не ходите создать бесполезный клон, который никто и не вспомнит?

Простой скроллинг

Мы начнем с легкого: прокрутка фона без цикла. Помните, "MoveScript", который мы использовали ранее? Принцип тот же: скорость и направление, применяемые на протяжении определенного промежутка времени.

Создайте новый скрипт и назовите его "ScrollingScript":

Прикрепите скрипт к объектам игры со следующими значениями:

Слой Скорость Направление Связан с камерой
0 - Задний фон (1, 1) (-1, 0, 0) Нет
1 - Фоновые элементы (1.5, 1.5) (-1, 0, 0) Нет
2 - Средний слой (2.5, 2.5) (-1, 0, 0) Нет
3 - Передний план (1, 1) (1, 0, 0) Да

А теперь, давайте добавим элементы на сцену:

  • Добавьте третий слой после двух предыдущих.
  • Добавьте несколько небольших платформ в слое 1 - Фоновые элементы .
  • Добавьте платформы в слое 2 - Средний слой .
  • Добавьте врагов с правой стороны на слое 3 - Передний план , подальше от камеры.

Неплохо! Но мы видим, что враги двигаются и стреляют когда они находятся вне камеры, даже до начала спавна!

Более того, проходя мимо игрока, они не исчезают (уменьшите изображение в режиме "Scene" и посмотрите налево: Poulpies все еще двигаются). Поэкспериментируйте со значениями.

Мы исправим эти проблемы в дальнейшем. Во-первых, мы должны управлять бесконечным фоном (небо).

Бесконечный фон

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

Когда этот объект выходить за левый край кадра, мы передвигаем его в правую часть слоя. И так до бесконечности .

Теория бесконечного скроллинга

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

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

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

Небольшая заметка о том, как правильно использовать рендерер: Этот метод не работает для видимых объектов (то есть, тех к которым привязаны скрипты). Но вряд ли вам когда-нибудь понадобиться применять его для невидимых объектов.

Скрипт "RendererExtensions"

Поясним комментарии с цифрами:

  1. Нам нужна публичная переменная для включения режима «замыкание» в Инспекторе.
  2. Там также нужна частная переменная для хранения детских объектов слоя.
  3. Используя метод Start() , мы добавляем в список backgroundPart детей, у которых есть рендерер. Благодаря небольшому количеству, мы ранжируем их по положению на оси X и ставим самый левый объект на первое место в массиве.
  4. При использовании метода Update() , если для свойства isLooping установлено значение true , мы извлекаем первый детский объект из списка backgroundPart . Затем проверяем, находится ли он полностью за пределами кадра. Если да – изменяем его положение, помещая его после последнего (самого правого) ребенка. Наконец, мы ставим его в конец списка backgroundPart .

Действительно, backgroundPart точно отражает то, что происходит в нашей сцене.

Не забудьте включить свойство "Is Looping" в "ScrollingScript" для 0 - Background на панели "Inspector". В противном случае (и это очевидно) мы ничего не добьемся.

бесконечный скроллинг

Нажмите на картинку выше, чтобы увидеть анимацию.

Почему мы не используем методы OnBecameVisible() и OnBecameInvisible() ? Потому что здесь они не работают.

Смысл этих методов заключается в исполнении фрагмента кода при появлении объекта на экране (или наоборот). Они работают как методы Start() или Stop() (если вы решили использовать один из них, просто добавьте нужный метод в MonoBehaviour , Unity применит его).

Проблема в том, что эти методы также применяются при использовании режима "Scene" в редакторе Unity. А значит, поведение объектов в редакторе Unity и самой игре (независимо от платформы) будет отличаться. Это опасно и абсурдно. Мы всячески рекомендуем избегать этих методов.

Бонус: Улучшение написанных скриптов

Давайте обновим наши предыдущие скрипты.

Враг, версия 2 со спавном

Мы ранее говорили, что враги должны быть отключены, пока они не видны камерой.

Они также должны использоваться повторно, полностью пропав из поля зрения.

Мы должны обновить "EnemyScript", сделав вот что:

  1. Отключить движения, коллайдер и авто-огонь (при инициализации).
  2. Проверить, попал ли рендерер в камеру.
  3. Запустить самоактивацию.
  4. Уничтожить объект игры, когда он находится вне камеры.

(Цифры указывают на комментарии в коде)

Давайте теперь запустим нашу игру. Хммм. ошибочка.

Отключение "MoveScript" привело к нежелательному результату: игрок никогда не дойдет до врагов, так как все они двигаются вместе со скроллингом слоя 3 - Foreground :

Помните: мы добавили "ScrollingScript" к этому слою, чтобы перемещатьть камеру вместе с игроком.

Но есть простое решение: переместить "ScrollingScript" со слоя 3 - Foreground на игрока!

В конце концов, почему бы и нет? Единственный объект, который двигается в этом слое – это сам игрок, и скрипт не прописан специально для определенного типа объекта.

  1. Враги отключены до начала спавна (то есть, пока камера не достигнет точки, в которой они находятся).
  2. Затем они исчезают, когда они находятся за пределами камеры.

Вы наверняка заметили, что игрок еще не ограничен рамками камеры. Нажмите "Play", затем кнопку со стрелочкой влево – и он покинет кадр.

Как видите, ничего сложного.

Мы определяем границы камеры и делаем так, чтобы положение игрока (центр спрайта ) не выходил за границы кадра.

Что дальше?

Мы только что узнали, как добавить механизм прокрутки для нашей игры, а также эффект параллакса для фоновых слоев. Тем не менее, текущий код работает только для прокрутки справа налево. Тем не менее, вы уже в состоянии сами увеличить ее и заставить работать на всех направлениях (если у вас все же не получается, держите готовый код).

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

  • Снижение размеров спрайта.
  • Настройка скоростей.
  • Добавление новых врагов.

В следующей главе мы еще немного поработаем над нашей игрой, поэкспериментируя с частицами!

Начнем с самого простого: загрузки и настройки Unity.

Загрузите последнюю версию с официального сайта или торрента и запустите установочный файл.

Выбор редактора в Unity

Полезно знать: невозможно использовать отладчик Visual Studio 2013 Express с Unity. Вы должны иметь Pro версию Visual Studio и купить UnityVS плагин. С версией Express, вы будете иметь лучший редактор кода, но отсутствие отладчика сведет на нет все его достоинства.

Mac OS X

MonoDevelop 4 - существенно лучше, чем старый MonoDevelop 2 в предыдущих версиях Unity. Он, конечно, далек от совершенства, но ничего лучшего под на Mac не придумано.

На каком языке программировать в Unity?

Научиться пользоваться в главным интерфейсом Unity достаточно просто. Вам, может быть, будет страшно в первый раз, когда открываете программу, но уже через несколько часов вы будете чувствовать себя в нем как рыба в воде.

Вот несколько ссылок, которые могут быть вам полезными:

  • Изучение интерфейса Unitys : основа всех основ. Не зная интерфейса, вы не сможете создавать игры в Unity 3D
  • Создание сцены в Unity : изучение этого раздела поможет вам создать свою собственную сцену
Первая сцена. Создаем новый проект.

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

Создание нового проекта в Unity

Выберите 2D настройки. Как и прежде, вы можете изменить этот флаг в настройках проекта позже.

Не беспокойтесь о названии. Оно определяется в настройках, и чтобы изменить имя проекта достаточно просто переименовать папку.

Разметка и панели Unity

Перед вами пустая страница. С ней вы и будете работать, но вам потребуется время, чтобы настроить интерфейс в соответствии со своими конкретными нуждами. Лично мне удобнее, когда консоль находится рядом с игровым экраном, но если у вас маленький монитор, вы можете заменить панели вкладками.

Пустой проект

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

Чтобы держать все под рукой, советуем создать папки во вкладке Project (Проект). Эти папки будут созданы в папке Assets вашего проекта.

Папки в Unity

Внимание: папка Assets – это место, где хранится все, что вы добавляете во вкладке Project. Она может быть невидимой в Unity, в зависимости от выбранной разметки вкладки (одна или две колонки), но вы сможете увидеть ее, открыв приложение для экспорта файлов.

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

Ассеты проекта

В вашей панели Project, вы можете найти различные типы ассетов:

Префабы

Многоразовые игровые объекты (например: пули, враги, бонусы).

Префабы можно рассматривать как класс в языке программирования, который может быть обработан в игровых объектах. Это некая форма, которую можно дублировать и изменить по своему желанию в сцене или во время выполнения игры.

Сцены

Сцена содержит игровой уровень или меню.

В отличие от других объектов, создаваемых в панели "Проект", сцены создаются в меню "Файл". Если вы хотите создать сцену, нажмите на кнопку "Новая сцена" в подменю и не забудьте потом сохранить ее в папку Scenes.

Сцены должны быть сохранены вручную. Это классическая ошибка в Unity - сделать некоторые изменения в сцене и ее элементы и забыть сохранить их после. Ваш инструмент контроля версий не увидите никаких изменений до тех пор, сцена не сохранится.

Звуки

Тут все предельно просто. Увидите, если захотите раскидать музыку по разным папкам.

Scripts

Textures

Спрайты и изображения вашей игры. В 2D проекте вы можете переименовать эту папку в "Sprites".

Это неважно для 2D проекта, но, оставив название Textures (Текстуры), вы дадите возможность Unity автоматизировать некоторые задачи. Если вы хотите узнать подробную информацию по этой теме, вы можете прочитать об этом здесь , или здесь .

Заметка о папке Resources : если вы уже работали с Unity, вы знает, что Resources – полезная и уникальная папка. Она позволяет загрузить в скрипт объект или файл (с помощью статичного класса Resources ). Она понадобится нам в самом конце (в главе, посвященной меню). Проще говоря, пока мы не будем ее добавлять.

Наша первая игровая сцена

Панель Hierarchy (Иерархия) содержит все объекты, которые доступны в сцене. Это то, чем вы манипулируете, когда начинаете игру с помощью кнопки "Play".

Каждый объект сцены является игровым объектом для Unity. Вы можете создать объект в главной сцене, или в другом объекте игры. Также вы можете в любое время переместить объект чтобы изменить его родителя.

Логические объекты

Как вы можете видеть здесь, у нас здесь 3 потомка для объекта Level .

Пустые объекты

В Unity можно создать пустой объект и использовать его в качестве "папки" для других игровых объектов. Это упростит структуру вашей сцены.

Пустые объекты

Убедитесь, что все они имеют координаты (0, 0, 0) и тогда вы сможете легко их найти! Пустые объекты никак не используют свои координаты, но они влияют на относительные координаты их потомков. Мы не будем говорить об этой теме в этом уроке, давайте просто обнулим координаты ныших пустых объектов.

Заполнение сцены

По умолчанию, новая сцена создается с объектом Main Camera (Главная камера). Перетащите ее на сцену.

Для начала создайте эти пустые объекты:

Scripts Мы добавим наши скрипты сюда. Мы используем этот объект, чтобы прикрепить сценарии, которые не связаны с объектом – например, скрипт гейм-менеджера. Render Здесь будет наша камера и источники света. Level

В Level создайте 3 пустых объекта:

  • 0 - Background
  • 1 - Middleground
  • 2 - Foreground

Сохраните сцену в папке Scenes . Назовите ее как угодно, например Stage1 . Вот, что у нас получилось:

Первая сцена на Unity

Совет: по умолчанию игровой объект привязан к положению родителя. Это приводит к интересному побочному эффекту при использовании объекта камеры: если камера является дочерним объектом, она автоматически будет отслеживать положение родителя. Если же она является корневым объектом сцены или находится внутри пустого игрового объекта, она всегда показывает один и тот же вид. Однако если вы поместите камеру в движущийся игровой объект, она будет следовать за его передвижениями в пределах сцены. В данном случае нам нужна фиксированная камера, поэтому мы помещаем ее в пустой объект Render . Но запомните это свойство объекта камеры, оно может вам пригодиться. Мы подробно остановимся на этой теме в главе "Паралаксный скроллинг".

Мы только что создали базовую структуру нашей игры. На следующем этапе мы начнем делать забавные вещи: добавим на сцену фон и кое-что еще!

Добавляем фон в сцену

Наш первый фон будет статическим. Воспользуемся следующим изображением:

TGPA фон

Импортируйте изображение в папку Textures (Текстуры). Просто скопируйте файл в нее, или перетащите его из проводника. Не беспокойтесь сейчас о настройках импорта.

Создайте в Unity новый игровой объект Sprite на сцене.

Новый спрайт для игры в Unity

Что такое спрайт?

По сути, спрайт – это 2D-изображение, используемое в видео-игре. В данном случае это объект Unity для создания 2D-игр.

Добавляем текстуру спрайта

Unity может автоматически установить фон для вашего спрайта. Если ничего такого не произошло, или если вы хотите изменить текстуру, перейдите на вкладку инспектора и выберите background : (фон)

Выбор спрайта в Unity

Вы должны нажать на маленький круглый значок справа от поля ввода, чтобы появилось Select Sprite (Выбрать спрайт) в Инспекторе

Вид спрайта

Итак, мы создали простой спрайт отображающий облака на небе. Давайте внесем изменения в сцену. В панели Hierarchy (Иерархия) выберите New Sprite . Переименуйте его в Background1 или что-то такое, что легко запомнить. Переименуйте его в Background1 или что-то такое, что легко запомнить. Затем переместите объект в нужное место: Level -> 0 - Background . Измените координаты на (0, 0, 0) .

Фон установлен

Создайте копию фона и поместите его в (20, 0, 0) . Это должно отлично подойти к первой части.

Фон 2

Слои со спрайтами

Следующее утверждение очевидно, но обладает некими неудобствами: мы отображения 2D мир. Это означает, что все изображения на одной и той же глубине, то есть 0 . И вы графический движок не знает, что отображать в первую очередь. Слои спрайтов позволяют нам обозначить, что находится спереди, а что сзади.

В Unity мы можем изменить "Z" наших элементов, что позволит нам работать со слоями. Это то, что мы делали в этом руководстве перед обновлением до Unity 5, но нам понравилась идея идея использовать слои со спрайтами. У вашего компонента Sprite Renderer есть поле с именем Sorting Layer с дефолтным значением. Если щелкнуть на нем, то вы увидите:

Сортировка списка слоев

Давайте добавим несколько слоев под наши нужды (используйте кнопку + ):

Добавить сортировку слоя в Unity

Добавьте фоновый слой к вашему спрайту фона:

Установить сортировку слоя

Настройка Order in Layer - это способ ограничить подслои. Спрайты с меньшим номером оказываются перед спрайтами с большими числами.

Слой Default нельзя удалить, так как это слой, используемый 3D-элементами. Вы можете иметь 3D-объекты в 2D игре, в частности, частицы рассматриваются как 3D-объекты Unity, так что они будут рендериться на этом слое.

Добавление элементов фона

Также известных как props. Эти элементы никак не влияют на геймплей, но позволяют усовершенствовать графику игры. Вот некоторые простые спрайты для летающих платформ:

Спрайты для платформ

Как видите, мы поместили две платформы в один файл. Это хороший способ научиться обрезать спрайты с помощью новых инструментов Unity.

Получение двух спрайтов из одного изображения

Выполняйте следующие действия:

  1. Импортируйте изображения в папку "Текстуры"
  2. Выберите спрайт Platform и перейдите к панели Инспектор
  3. Измените "Sprite Mode" на "Multiple"
  4. Нажмите на кнопку Sprite Editor (Редактор спрайта)

В новом окне ( Sprite Editor ) вы можете рисовать прямоугольники вокруг каждой платформы, чтобы разрезать текстуру на более мелкие части:

Редактор спрайтов

Кнопка Slice в левом верхнем углу позволит вам быстро и автоматически проделать эту утомительную работу:

Автоматическая нарезка

Unity найдет объекты внутри изображения и будет нарежет их автоматически. Вы можете установить дефолтное значение для точки вращения или минимальный размер каждого фрагмента. Для простого изображения без артефактов, это необычайно эффективно. Тем не менее, если вы используете этот инструмент, будьте осторожны и проверьте результат, чтобы убедиться, что вы получили то, что хотели.

В этом уроке проделаем эту операцию вручную. Назовите платформы platform1 и platform2 . Теперь, под файлом изображения, вы должны увидеть два спрайта отдельно:

Результат редактора спрайтов

Добавим их в сцену. Для этого мы будем выполнять те же действия что и для фона: создадим новый спрайт и выберим platform1 . Потом повторим эти действия для platform2 . Поместите их в объект 1 - Middleground . Убедитесь, что их позиция по оси Z равна нулю.

Две новые платформы

Prefabs (Префабы)

Сохранить эти платформы как префабы. Просто перетащите их в папку Prefabs :

Префабы

Таким образом вы создадите Prefab , точно отвечающий оригинальному игровому объекту. Вы увидите, что игровой объект, который вы конвертировали в Prefab , представляет собой новый ряд кнопок прямо под его именем:

соединение префабов

Заметка о кнопках "Prefab": При последующей модификации игрового объекта, вы можете использовать кнопку "Apply", чтобы применить эти изменения к Prefab , или кнопку "Revert", чтобы отменить все изменения игрового объекта в свойстваъ Prefab . Кнопка "Select" переместит выбранные свойства в ассет Prefab в окне проекта (они будут выделены).

Создание префабов с объектами-платформами упростит их повторное использование. Просто перетащите Prefab на сцену, чтобы добавить копию. Попробуйте добавить другую платформу таким же образом.

Теперь вы можете добавить больше платформ, меняющих свои координаты, размеры и плоскости (вы можете поместить их на заднем или переднем плане, просто установите координату Z для платформы на 0 ).

На данном этапе все это выглядит еще сыроватым, но в следующих двух главах мы добавим параллаксный скроллинг, и сцена оживет у нас на глазах.

Прежде чем двигаться дальше, мы модифицируем наши слои, чтобы избежать каких-либо проблем с порядком их отображения. Для этого просто измените позицию игровых объектов по оси Z во вкладке Hierarchy (Иерархия) следующим образом:

Слой Позиционирование по оси Z
0 - Задний фон 10
1 - Средний фон 5
2 - передний фон 0

При переключении из 2D режима в 3D, в окне "Scene" (Сцена) вы будете четко видеть слои:

Кликнув на игровом объекте Main Camera , вы увидите, что флажок Projection установлен на Orthographic . Эта настройка позволяет камере визуализировать 2D игру без учета трехмерных свойств объектов. Имейте в виду, что даже если вы работаете с 2D объектами, Unity по-прежнему использует свой 3D движок для визуализации сцены. Рисунок выше это наглядно демонстрирует.

В следующем уроке:

Вы только что узнали, как создать простой статический фон и как отобразить его должным образом. Затем мы научили вас, как сделать простые спрайты. В следующей главе мы узнаем, как добавить игрока и его врагов.

Unity3D & CG / Unity 3D

Евгений Коновалов

Евгений Коновалов запись закреплена

Илья Баженков


Илья Баженков


Сергей Бугров

Евгений Коновалов

Илья, у меня две картинки, фон и персонаж. В итоге у меня на заднем плане персонаж а на переднем фон который его перекрывает.
2D игра.

Евгений Коновалов


Сергей Бугров ответил Евгению

Константин Бакшеев

Евгений, в 2д у всех элементов есть СЛОЙ (layer). Ставь фону 0, объектам 1.
В 2д координата зет похоже не работает.

Константин Бакшеев

Владислав Орешкин

Константин Бакшеев

Рэйстлин, мы с тобой ниже переписывались, я фейерверк делал. У меня перемещение по зет не помогло. Я сначала фон минус первым слоем сделал, т.к. слой фейерверка не знал как поменять, потом меня научили и его слой менять. В общем помогло только перемещение слоёв.

Константин Бакшеев

Рэйстлин, ну я тоже не настаивают. Может конкретно в том проекте, по каким либо причинам. Буду способ иметь ввиду.

Моя задача такова: я хочу через скрипт сделать так, чтобы камера не отрисовывала определённый объект, но НЕ используя теги и слои.

Шейдеры помогут решить такую задачу, ценой быстродействия и времени разработки. Но.

Вы точно понимаете, для чего нужны тэги и слои?
Тэги - инструмент для прототипирования, без них вполне можно обойтись в любом проекте, они не обеспечивают уникальных возможностей.
Слои - ключевой инструмент для решения проблемы "объект А должен игнорировать объект Б", будь то физика или рендеринг.

Как решается ваша проблема:
1) заводится СЛОЙ единственной задачей которого будет скрывать рендереры для главной камеры - этот слой исключается из Culling Mask камеры.
2) к объектам, которые могут быть сокрыты, добавляется компонент, который хранит путь в иерархии до всех скрываемых рендереров на объекте.
3) сами дочерние объекты с рендерерами не должны быть нагружены лишними логическими компонентами, чтобы изменение их слоя никак не повлияло, например, на физику (вы, полагаю, как раз этой проблемы пытаетесь избежать, отказываясь от слоёв).
4) когда выполняется условие для скрытия / раскрытия объекта, управляющий компонент выносит свои дочерние рендереры на скрытый слой, или (при раскрытии) возвращает их на изначальный слой (не обязательно Default - можно сделать чтобы компонент запоминал слои рендереров перед сокрытием).

Если решение вам не подходит, пожалуйста, объясните почему избегаете слоёв - инструмента предназначенного именно для решения таких проблем.

Спасибо за ответ, способа не подходит, потому что моя задача сделать скрипт, который нужно повесить на камеру, и она без лишних действий будет игнорировать объект, созданный командой Instiantiate()

FF Мыслитель (5403) Движок Unity позволяет добавить на камеру скрипты, которые бы производили действия с изображением *после* рендеринга, а вам надо *до* рендеринга сделать объект невидимым для камеры - скриптом на камере такое не делается, но у самой камеры есть параметр Culling Mask, и это именно тот параметр который позволяет игнорировать объекты. Так что, настройте маску на камере и слои на объектах - и задача решена. Насчёт избегания лишних действий, есть два пути быстро и чётко создать игнорируемый камерой объект: а) Можно вызывать Instantiate() для префаба, у которого уже заранее настроен нужный слой. б) Можно сохранить результат функции Instantiate() в виде ссылки на объект, которому затем из кода задать нужный слой - лишних действий ровно на одну строку кода.

Можно по имени:
GameObject.Find("object_name").SetActive(false);

если не подходит деактивация объекта, можно сделать невидимым через
GetComponent < Renderer >().enabled = false;

Спасибо за ответ, но мне требуется чуть другое, мне нужно, чтобы в главной камере он был, а во второстепенной - нет. Это решение подходит только для того, чтобы скрыть во ВСЕХ камерах.
Но при этом всё это не должно использовать слои и теги

Можно написать постпроцессинговвый шейдер, который будет игнорировать объект по определённому параметру (по порогу цвета, например). Но шейдеры с условиями медленные, и я бы всё-таки копал в сторону тегов и слоёв. Почему именно нельзя использовать? Может обойти эту проблему будет проще.

Читайте также: