Как сделать рекорд в юнити

Добавил пользователь Владимир З.
Обновлено: 05.10.2024

Как я могу сделать чрезвычайно огромные территории в Unity? Кажется, я могу установить ширину и длину для больших значений. Но разрешение карты высот достигает только 4097, а разрешение деталей - только до 4048.

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

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

Спасибо! отличный ответ. Только один вопрос, когда я устанавливаю соседей по рельефу, что произойдет, если рельеф не будет одинаковой высоты по краям?

Вы также можете знать, что начиная с Unity3D ~ 3.0, вы не можете перемещать предметы (читать местности и предметы) слишком далеко (например, +/- 100000 шагов IIRC), так что это повлияет на максимальный размер вашего мира.

В любом случае, я использую это в своей онлайн-игре RPG (за исключением того, что я использую Unity3D только для дизайна уровней, а не для реальной игры).

Просто потому, что мне любопытно, хотели бы вы поделиться какой-нибудь информацией о вашей игре (например, о продвижении, типе, графике, стиле и т. Д.)?

Мы реализовали огромные ландшафты в Unity5, обработав данные SRTM для всей Земли в карты высот для TerrainData объектов с различными уровнями детализации [1]. Есть несколько вещей для рассмотрения:

Сами края карт высот должны перекрываться как минимум на одну выборку, и вам необходимо соответствующим образом расположить свою местность. Terrain.SetNeighbors не будет соединять сетку, только учитывать различные уровни детализации, выполняемые Unity.

Вам обязательно нужно 2 ^ n + 1 выборка высоты на TerrainData объект, в противном случае Unity просто назначит высоту 0 неустановленным частям.

Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

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

Закрыт 10 месяцев назад .

Как сделать рывок в юнити3д.


1 ответ 1



Всё ещё ищете ответ? Посмотрите другие вопросы с метками unity3d или задайте свой вопрос.

Похожие

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.26.41266

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

  • Купить мелодию.
  • Попросить знакомого музыканта.
  • Использовать бесплатные звуки из звуковых банков (например, FindSounds or Freesound).
  • Записать звук самому.

С музыкой немного сложнее, но тоже все решаемо:

  • На сайте Jamendo много музыки разных музыкальных направлений. Будьте осторожны с лицензиями для коммерческих целей.
  • Иногда любители выкладывают свою музыку на рутрекере.
  • Воспользуйтесь продуктом Bosca Ceoil от Терри Кавана для создания своей, неповторимой мелодии.

Итак, создайте или найдите звуки взрыва и выстрела. Если вам лень, вы можете использовать эти:

Мы будем использовать один из треков игры "Больное бумажное приключение", Спинтроник для этого урока:

Импорт звука в Unity

Переместите 4 звуковые дорожки в папку "Sounds". Убедитесь, что для каждой из во вкладке "Инспектор" отключен "3D звук" (так как мы делаем 2D игру) и нажата кнопка "Применить". Вот и все.

Отключение 3D звука

Объект музыка

Обратите внимание на флажок "Mute". Это может вам пригодиться в ваших тестах. Со звуками придется повозиться, поскольку они должны проигрываться в определенное время. Для решения этой задачи напишем новый скрипт под названием "SoundEffectsHelper":

Добавьте этот скрипт в игровой объект и заполните его поля со звуковыми клипами:

скрипт для звуков

  1. SoundEffectsHelper.Instance.MakeExplosionSound(); в "HealthScript", только после воздействия частиц.
  2. SoundEffectsHelper.Instance.MakePlayerShotSound(); в "PlayerScript", сразу после weapon.Attack(false); .
  3. SoundEffectsHelper.Instance.MakeEnemyShotSound(); в "EnemyScript", сразу после weapon.Attack(true); .

Запустите игру и прислушайтесь. Да, у нас теперь есть звуки и музыка!

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

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

Меню - загрузка и перезапуск игры

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

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

фон меню

Это наши фон и логотип. Импортируйте их в проект. Вы можете поместить их в "Меню" - подпапку "Текстуры". В противном случае "фон" сотрет предыдущий файл игры. Для кнопок мы будем использовать стандартные (уродливые) кнопки Unity.

Главное меню

Настало время создать сцену с главным меню. Это то, что показывается юзеру при запуске игры. Для начала, создайте новую сцену:

  1. "File" -> "New scene".
  2. Сохраните ее в папке "Scenes" как "Menu".

Наше главное меню будет состоять из:

  • Фона.
  • Логотипа.
  • Скрипта, который будет отображать кнопки.
  1. Создайте новый спрайт.
  2. Установите его в (0, 0, 1) .
  3. Задайте размер (2, 2, 1) .
  1. Создайте новый спрайт.
  2. Установите его в (0, 2, 0)
  3. Задайте размер (0.75, 0.75, 1)

Вот, что у вас должно получиться:

результат

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

Теперь мы добавим кнопку "начать игру" с помощью скрипта. Создать скрипт по имени "MenuScript" в папке "Scripts", и приложите его к новому пустому игровому объекту под названием "Scripts":

Мы просто рисуем кнопку, которая будет загружать сценe "Stage1", когда игрок нажимает на нее.

Метод OnGUI применяется в каждом кадре и вставляет весь код, в котором отображен элемент GUI: полоса жизни, меню, интерфейс и т.д. Объект GUI позволяет нам быстро создать компоненты GUI из кода, как кнопка с методом GUI.Button .

Теперь запустите игру и полюбуйтесь нашим замечательным меню:

Законченная кнопка

Жмем и. Катастрофа!

Добавление сцен в сборку

Нажмите в меню Unity на "File", затем на "Build Settings":

Build settings

Теперь перетащите все сцены, которые должны быть в вашей игре. Здесь все просто: это "Меню" и "Stage1".

Добавление сцен

Вернитесь в меню. Нажмите на кнопку и . играть!

Смысл метода Application.LoadLevel() - очистить текущую сцену и инстанцировать все игровые объекты в следующей. Иногда нам нужно, чтобы игровой объект из первой сцены был перенесен во вторую (например, чтобы при переходе между двумя меню непрерывно играла одна и та же музыка).

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

Наконец, мы позволим игроку начать игру сначала после того, как его персонаж умер. И, как вы, возможно, заметили, заметили происходит достаточно часто. Давайте "упростим" игру. Вот, что у нас сейчас происходит:

  1. Игрок попадает под пули.
  2. HealthScript.OnCollisionEnter запускается.
  3. Игрок теряет 1 единицу здоровья.
  4. "HealthScript" уничтожае игрока, так как у него меньше, чем 1 единица здоровья.

Мы добавим два новых действия:

  1. Вызывается PlayerScript.OnDestroy .
  2. Создается "GameOverScript" и добавляется к сцене.

Это абсолютно идентично первому скрипту, который мы написали, с двумя кнопками.

Теперь, в "PlayerScript", нам нужно привязать этот новый скрипт к смерти:

Запустите игру и попытайтесь умереть (это не должно занять много времени):

Игра окончена

Вы можете найти скрипт где-то на сцене:

Скрипт окончания игры

Конечно, вы можете улучшить скрипт, например, добавив в него счет или анимациИ.

Если вы хотите провернуть что-нибудь эдакое, можете создать "GUI Skin".

Папка "Resources" занимает в Unity особое место. Чтобы загрузить ее содержимое, используйте метод Resources.Load() . Так вы получите возможность добавлять объекты прямо во время игры, и эти объекты могут быть созданы самими пользователями (как насчет модов?).

Тем не менее, скин не применяется до тех пор, пока вы не вызовите его в вашем скрипте. Во всех наших предыдущих сценариях GUI, мы должны загрузить скин только один раз, а не в каждом кадре, используя GUI.skin = Resources.Load ("GUISkin"); .

Вот пример в "MenuScript" (проследите, как действует метод Start() ):

Как видите, нам пришлось изрядно попотеть чтобы сделать банальное неанимированное меню. Мы только что узнали как сделать меню для нашей игры. Поздравляем, вы только что сделали полноценный игровой продукт! Но, к сожалению, эта игра только на вашем компьютере. Чтобы продать ее, мы должны заявить о ней миру. Это как раз то, о чем мы будем говорить с вами в следующем уроке по Unity.


Это блог про аниме?

Intermedius — находящийся посередине. Думаю, что все, кто смотрел хотя бы одну серию аниме, замечали небольшую вставку в середине, которая обычно служит для перехода между сценами и рекламного блока (англ. - bumper, яп. - アイキャッチ aikyatchi). Картинка из заголовка статьи является таким переходом в одной из серий тайтла “New Game!!", про небольшую игровую студию. Ах да, раз это блог про Unity, то в данном посте мы рассмотрим оформление перехода между сценами именно в нём. =)

Сцены в Unity являются основной единицей деления игры на части и сам по себе переход между ними не является чем-то сложным. Переход реализуется через класс SceneManager, при помощи методов LoadScene() или LoadSceneAsync(), но без дополнительного оформления эти переходы будут резкими и это будет выглядеть странно. Попробуем сгладить этот переход, добавив проекту немного визуальной привлекательности.

Схема довольно проста: обе сцены, между которыми осуществляется переход, должны быть визуально идентичны на момент выгрузки предыдущей и загрузки следующей. Манипуляции для такого перехода обычно организуются через анимацию элементов сцены. Для примера в этом посте мы используем чёрный экран(элементом, отвечающим за данный эффект, будет картинка чёрного цвета). Выгружаемая сцена должна постепенно уйти в чёрный цвет, а следующая за ней плавно из него появиться.

Слово анимация как бы намекает нам на использование механизма в Unity под названием "Mecanim". Если вы не очень с ним знакомы, то можно прочитать(а ещё лучше использовать его в качестве упражнения) предыдущий пост "Шаблон Состояние", в котором, в целях тренировки, этот механизм использовался для создания машины состояний без анимации.

Задача

Оформить переход между тремя сценами через затемнение. Первая сцена появляется моментально и через 2 секунды переходит во вторую. Переходы между второй и третьей зациклены и осуществляется плавно по клику.

Подготовка

  1. Создадим три сцены:
    • BootScene - самая первая сцена, на которую попадает игра, покажем её сразу без затемнения
    • FirstScene и SecondScene - две сцены, переходы между которыми буду зациклены между друг другом
  2. Добавим сцены в Build Settings
  3. Создадим ещё один объект Canvas с именем SceneTransition . Выставим ему Render Mode - Screen Space - Camera и добавим Main Camera . Выставим Order in Layer равным 999 , чтобы он всегда был поверх всего остального
  4. Добавим к SceneTransition объект типа Image и назовём его Fade . Полностью чёрный, перекрывающий всю площадь экрана. Можно его отключить, чтобы он не загораживал экран

Анимация

  1. Создадим папку Animations
  2. Откроем панель Animation . Выделив элемент Fade нажмём кнопку Create и создадим анимацию FadeIn , также создадим анимацию FadeOut
  3. Настроим анимацию FadeIn . Выделяем ассет FadeIn . Убираем галочку Loop Time . Выделяем элемент Fade . В закладке Animation нажатием кнопки Enable/Disable keyframe recording mode включаем запись действий. Включаем компонент Image . Переходим в закладке Animation на отметку в 1 секунду. Выставляем в настройке цвета alpha = 0 . Выключаем компонент Image . В закладке Animation выключаем запись действий. Проверяем анимацию плавного появления UI из затемнения
  4. Настраиваем анимацию FadeOut , но в обратном порядке: включаем Image , альфа-канал от 0 до 100 . Этот пункт остаётся в качестве тренировки
  5. Настраиваем переход между анимациями. Во вкладке Animator добавляем триггер FadeOut . Добавляем переход между FadeIn и FadeOut . На переходе выключаем Has Exit Time , Transition duration выставляем в 0. В Conditions добавляем созданный триггер FadeOut
  6. Создадим скрипт TransitionHandler для переключения сцены после завершения анимации FadeOut

  1. Добавим созданный скрипт к объекту Fade . В конец анимации FadeOut добавим Event . Выберем функцию FadeOutFinished() из скрипта TransitionHandler

Настройка переходов

  1. Для BootScene создадим скрипт, который будет запускать переход на FirstScene через 2 секунды
  1. Настроим BootScene . Добавим префаб SceneTransition . Настроим камеру. Укажем следующую сцену - FirstScene . Отключим анимацию появления сцены
  2. Добавим на сцену пустой объект назовём его BootHandler и добавим соответствующий скрипт. Настроим для нового объекта animator
  3. После запуска BootScene должна иметь затемнение перед переключением
  4. Создадим скрипт ClickHandler для остальных сцен, который будет запускать переход по клику
  1. Настроим FirstScene . Добавим префаб SceneTransition . Настроим камеру. Укажем следующую сцену - SecondScene
  2. Добавим на сцену пустой объект назовём его ClickHandler и добавим соответствующий скрипт. Настроим для нового объекта animator
  3. Настроим SecondScene . Проделываем те же самые шаги, что и для FirstScene , только указываем следующей сцену - FirstScene
  4. Наслаждаемся результатом

Заключение

После всех наших манипуляций мы получили префаб, который можно использовать для настройки переходов между сценами. Навряд ли вы будете его использовать для продакшена, так как используемая синхронная загрузка сцен не очень красивое решение, а также необходима тонкая настройка условий перехода, необходимо продумать остановку игры, в момент начала анимации. Да и сами анимации желательно сделать более интересными, например, в Homescapes(Playrix) переход между загрузкой ресурсов и запуском меню скрыт за опускающейся вдоль стены дома камерой. Однако, после повторения данных шагов собственными руками, у вас должно сложиться представление, как сделать переходы красиво. Пока! =)

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