Как сделать прицел в unity

Обновлено: 07.07.2024

Достаточно выбрать один из предустановленных прицелов или загрузить свою картинку и это все! Запускай игру и программа сама сделает все остальное - прицел будет автоматически установлен на центр игрового экрана.

Нет мышиных лагов

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

Совместимость

Программа работает с играми на основе графики DirectX 9, 10, 11, 12, OpenGL и Vulkan. Поддерживаются 32 и 64-битные игры. Поддерживаются операционные системы Windows 7, 8 и 10.

Получить лицензию

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

Стоимость пожизненной лицензии: 199 рублей

Xsolla - официальный международный реселлер HudSight. Операции идут по защищённому каналу и полностью безопасны.

Хотите иметь ее в Стиме? Вам сюда.

Поддержка

Стоимость обновлений?

Все обновления бесплатны!

Минимальные требования?

Windows 7 и видеокарта с поддержкой DirectX 11, немного свободного места на диске и в памяти ;)

Как активировать HudSight?

А не получу бан за эту программу?

HudSight - это не чит, программа не меняет игровые файлы или геймплей, она всего лишь рисует оверлей (как Steam или Origin или другие утилиты). Но рекомендуем вам убедиться, что в Условиях Обслуживания игры, в которую вы играете, нет информации о запрете таких "улучшений". Например, давно-давно, когда только закончились динозавры на планете, можно было схватить ручной бан в античите PunkBuster за скриншот с прицелом в играх Battlefield 2 и 2142.

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

Для начала рассмотрим все в теории, а потом уже возьмемся за реализацию и тестирование.

Теория

Физическое тело в виде снаряда

Итак, у нас есть задача бросить камень, надеюсь не в меня) Для этого делается следующее:

  • В момент нажатия на ЛКМ создается объект
  • Мы получает этот объект и толкаем его в нужном направлении
  • Далее движок считает все за нас, мы только смотрим
  • Возможно создаем эффекты приземления

Все просто. Часто именно такой подход и необходим. Так можно симулировать, достаточно медленные снаряды, которые не часто вылетают из оружия. К примеру, снежки, камни, ядра пушек, картофель из пататогана). Проблемы начинаются когда необходимо создать что-то дальнобойные или скорострельное.

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

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

Как же быть? Для таких целей обычно используют рейкаст

Рейкаст для реализации выстрела

В простейшем случае работает это таким образом:

  • Мы выпускаем луч в нужном направлении
  • Определяем куда он попадет
  • рисуем эффект попадания или делаем что то еще

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

Пример как пуля пролетает препятствие

Пример как пуля пролетает препятствие

Как решить данную проблему?

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

Можно запустить симуляцию всего полета "на паузе". Расчет требует времени и соответственно ресурсов, однако точно просчитает полет пули. Это почти так же как и в варианте с физическим объектом, но расчет ведется отдельно от текущего времени и выдается только результат.

Так же выполняется создание обьекта и его пинок в нужном направлении но с игнорированием реального времени.

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

Практика

Физический снаряд

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

Тестовый стенд

Тестовый стенд

Стрелять будем в точку, без поворота камеры.

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

Первый выстрел Последствия

Путь луча

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

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

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

Итоги

В данной статье я привел лишь примеры того как можно сделать выстрелы в unity. Надеюсь она вам поможет определиться как действовать дальше и у вас получиться хорошая стрелялка =)

Создание шутера Часть 3 Прицел в Unity3D

Создание шутера Часть 3 Прицел в Unity3D

Создание шутера Часть 3 Прицел в Unity3D

Создание шутера Часть 3 Прицел в Unity3D


Сайт производителя: 4GameFree
Язык: Русский
Качество: отличное (HD)
Размер: 35 мб
Продолжительность: 8 минут

Новая система ввода с устройств в Unity

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

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

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

В этом уроке вы узнаете:

  • Особенности новой системы ввода.
  • Как работает новая система.
  • Как перенести приложения в новую систему ввода из старого диспетчера ввода.

Материалы для урока были созданы в Unity версии 2020.1. Вы можете скачать эту версию Unity на сайте Unity или установить ее с помощью Unity Hub.

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

Приступая к работе

После загрузки проекта вы увидите папку RW в окне проекта:

Список файлов проекта в окне Project редактора Unity

Взгляните на организацию папок:

  • Fonts: шрифты, используемые в сцене.
  • Materials: Материалы для сцены.
  • Models: 3D-сетки для персонажей игрока и игрового окружения.
  • Prefabs: Готовые компоненты, состоящие из скриптов и моделей.
  • Scenes: Игровая сцена.
  • Scripts: Скрипты с игровой логикой.
  • Settings: Файл настроек, в который вы помещаете настройки ввода.
  • Shaders: Шейдеры для специальных эффектов, таких как тень игрока.
  • Textures: Графика, используемая материалами и пользовательским интерфейсом.

Стартовый проект — это простой платформер. Вы управляете персонажем игрока, перемещаясь и прыгая, чтобы собирать монеты.

Игра готова к запуску. Откройте GameScene из папки Scenes и нажмите Play, чтобы попробовать поиграть.

В настоящее время элементы управления Move и Jump используют старый Unity Input Manager. Позже в этом руководстве вы узнаете, как использовать новую систему ввода для замены старой.

Что нового в системе ввода Unity

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

Упрощенная архитектура действий и привязки

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

Следующий код, который поддерживает как геймпады, так и клавиатуру, является примером старого способа работы:

Код использует ветвление if-else для поддержки различных устройств и связанных с ними действий.

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

Событие ввода в новой системе называется action (действием), а отображение между действием и устройством ввода — binding (привязкой).

Сбор информации с помощью инструментов отладки ввода

Система ввода предоставляет новый инструмент под названием Input Debugger. Откройте его, выбрав в меню Window > Analysis > Input Debugger.

Отладчик ввода помогает разработчикам собирать следующую информацию в одном месте:

Состояние системы ввода, включая:

  • Device: информация о подключенных устройствах.
  • Layout: какие элементы управления предоставляют эти устройства.
  • Setting: конфигурация системы ввода.

Он также предоставляет информацию о конкретном устройстве в режиме реального времени. Откройте его, дважды щелкнув на устройство в списке устройств в окне Input Debugger.

Вот демонстрация работы отладчика ввода в действии:

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

Поддержка нескольких устройств и платформ

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

  • Клавиатура
  • Мышь
  • Ручка
  • Сенсорный экран
  • Сенсор
  • Джойстик
  • Гэймпад

Примечание. Система ввода также поддерживает устройства, реализующие спецификацию USB HID. Для получения дополнительных сведений ознакомьтесь с документацией по поддерживаемым устройствам Unity.

Понимание новой системы ввода

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

  • Input Action Assets: файл настроек, содержащий свойства действий и связанных с ними привязок.
  • Actions: действия определяют логическое значение ввода. Вы можете найти эту информацию в активах входных действий.
  • Bindings: привязки описывают связь между действием и элементами управления устройства ввода. Вы также найдете эту информацию в объектах Input Action Assets.
  • PlayerInput: PlayerInput — это скрипт, который управляет событиями действий и связывает их с соответствующей логикой кода.

Иногда легче понять новый рабочий процесс, если вы можете его визуализировать, поэтому взгляните на изображение ниже:

Архитектура новой системы ввода в Unity

Разбейте это на простейшие шаги:

  • Сначала Unity Engine собирает информацию с подключенных устройств и отправляет соответствующие события, такие как нажатие кнопки, в систему ввода.
  • Затем система ввода преобразует эти события в действия на основе информации о действии и привязке, хранящейся в активах действия ввода.
  • Затем он передает действия скрипту PlayerInput, который вызывает соответствующие методы.

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

Установка новой системы ввода

Первое, что вам нужно сделать, это установить новый пакет системы ввода. Стандартная установка Unity не включает его.

Откройте Window > Package Manager в строке меню. Убедитесь, что вы выбрали Unity Registry в раскрывающемся списке пакетов, если вы еще этого не сделали.

Окно Package Manager в редакторе Unity

Найдите Input System в списке. Выберите и нажмите Install.

Установка системы ввода в окне редактора Unity

Создание ассета действия Input

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

Откройте окно Project и выберите Settings из RW. Щелкните правой кнопкой мыши, выберите Create > Input Actions и переименуйте его в MyControl.

Создание нового ассета Input в Unity

Настройка редактора действий

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

Окно Action Editor в Unity

Поскольку это новое окно, взгляните на разделы:

  1. Action Maps: группы действий, которые происходят в игре. Вы можете группировать действия для разных целей, таких как игрок, игровой процесс или пользовательский интерфейс.
  2. Actions: список действий и привязок, связанных с выбранной картой действий. На этой панели вы можете создавать, изменять или удалять действия и привязки.
  3. Properties: отредактируйте свойства действия или привязки на этой панели, например тип действия и элементы управления, связанные с привязкой.
  4. Save Assets: это очень важная функция: вы должны нажать Save Assets после внесения любых изменений в Input Action Asset. Если вы забудете сохранить, настройка не сработает. Таким образом, вы не увидите ожидаемого результата и можете подумать, что в коде есть ошибка. Вы можете включить автосохранение, чтобы избежать проблемы, но это довольно медленно.

Теперь вы готовы создать свое первое действие — действие Jump.

Создание действия Jump

Сначала откройте редактор действий и нажмите на значок + в ActionMap, чтобы создать новую карту действий. Переименуйте со значения по умолчанию New Action Map в Player.

Затем на панели Action дважды нажмите на New Action и переименуйте в понятное имя: Jump.

И наконец, вам нужно добавить привязку к действию Jump. Вы свяжете кнопку Spacebar и левую кнопку мыши с этим действием, выполнив следующие действия:

  1. Выберите действие Jump, нажмите на значок + и выберите Add Binding.
  2. Нажмите на новый элемент привязки, .
  3. Нажмите на поле Path на панели Binding properties.
  4. Введите Spacebar Keyboard и выберите Space Как сделать прицел в unity, чтобы создать привязку для клавиши Spacebar.
  5. Повторите шаги 1–3, чтобы создать еще одну привязку для левой кнопки мыши.
  6. Введите Left Button в поле Path и выберите Left Button [Mouse], чтобы создать привязку.

Поздравляем, теперь вы связали действие Jump с клавишей Spacebar на клавиатуре и левой кнопкой мыши.

Теперь соедините эти действия с кодом!

Реализация логики прыжка

Прежде всего, вам нужно удалить из проекта старую логику обработки ввода данных. Откройте Player.cs и перейдите к методу Update () .

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

Теперь, когда действие Jump и его привязки элементов управления готовы, следующее, что нужно сделать, — это связать действие с кодом.

Связывание действия Jump с кодом

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

Сохраните скрипт и вернитесь в редактор. Выберите объект Player в иерархии и добавьте компонент PlayerInput из инспектора.

Затем перетащите MyControl в поле Actions компонента PlayerInput. Убедитесь, что в качестве Default Map выбрано Player.

И наконец, откройте Player.cs и добавьте новый метод OnJump () со следующим кодом:

Вы связали этот метод с действием Jump, назвав его этим шаблоном: public void On [Action Name Goes Here] () .

Например, действие Jump вызывает OnJump () , а действие Attack вызывает OnAttack () .

Нажмите на Save Asset в редакторе действий и запустите игру. Теперь вы можете использовать пробел или левую кнопку мыши, чтобы заставить персонажа игрока прыгать. Это действительно так просто!

Создание действия перемещения

Вы узнали, как использовать систему ввода для создания действия прыжка. Далее идет действие движения Move! Это действие похоже на Jump, но имеет несколько ключевых отличий.

Например, действие Jump — это простое инициирующее событие, а действие Move — это событие, которое несет в себе значения: направление движения, которое определяется пользовательским вводом.

Опять же, вам нужно создать действие и его привязку. Начните с перехода в редактор действий (дважды нажмите на MyControl, если окно не отображается) и нажмите на значок + на панели действий, чтобы создать новое действие. Переименуйте его в Move.

Затем откройте панель свойств действия, измените Action Type на Value и Control Type на Vector 2.

И наконец, удалите , щелкнув правой кнопкой мыши и выбрав Delete.

Теперь вам нужно создать привязки для действия Move.

Сначала нажмите значок + в заголовке действия Move. Затем выберите Add 2D Vector Composite, чтобы создать четыре элемента привязки, соответствующие направлениям вверх, вниз, влево и вправо.

  • Up: Up Arrow Как сделать прицел в unity
  • Down: Down Arrow Как сделать прицел в unity
  • Left: Left Arrow Как сделать прицел в unity
  • Right: Right Arrow Как сделать прицел в unity

Не забудьте сохранить ассет в редакторе действий!

Реализация логики движения

Перед добавлением новой логики движения вам необходимо удалить реализацию старого ввода Unity.

Откройте Player.cs и перейдите в метод FixedUpdate () :

Обратите внимание, что FixedUpdate () вызывается в каждом кадре с фиксированной частотой кадров.

А теперь рассмотрим по порядку:

  1. Input.GetAxisRaw возвращает значение Axis . Input.GetAxisRaw ("Horizontal") дает значение оси X, а Input.GetAxisRaw ("Vertical") дает значение оси Y.
  2. Эти два значения определяют вектор движения moveVec , который вы используете для управления направлением движения игрока.
  3. Логика поведения персонажа игрока на поверхности.
  4. Логика поведения персонажа игрока во время прыжка.

Теперь удалите весь код перед оператором if , чтобы убрать старую логику ввода. Добавьте следующий код над определением класса:

Это позволяет вам получить доступ к значениям из новой системы ввода.

Затем добавьте метод OnMove () , который вызывает действие Move.

Когда игрок нажимает клавиши Up, Down, Left и Right, он передает этому методу действие Move вместе со значениями. Вот как нажатие клавиш влияет на значения:

InputValue — это новый тип, о котором вы, возможно, не знаете. В этом классе есть метод Get \ () , который можно использовать для доступа к его значениям. В этом случае вы хотите, чтобы 2D-векторный композит, который вы установили в привязке, вычислял вектор движения.

Нажмите Play, чтобы проверить логику.

Обработка действий

Новая система ввода предоставляет четыре способа обработки событий действия.

В этом уроке вы использовали подход SendMessages. Вы можете изменить этот параметр в поле Behavior компонента PlayerInput.

Изменение поведения для обработки ввода в Unity

SendMessage и BroadcastMessage — самые простые способы обработки действий. Когда вы используете эти две опции, система вызывает метод с именем, совпадающим с именем действия.

Например, в этом уроке действие Jump вызывает OnJump () , а действие Move вызывает OnMove () .

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

Использование Invoke Unity Events

При использовании Invoke Unity Events (вызов событий Unity) вы настраиваете действие так же, как вы настраиваете нажатие кнопки в Unity UI.

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

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

Вот пример того, как это выглядит:

Вот что делает этот код:

  1. Получает компонент PlayerInput и регистрирует метод в onActionTriggered .
  2. Управляет тем, какой метод вызывать для различных действий.

Использование цикла обновления новой системы ввода

В старом Unity Input Manager вы проверяли ввод в каждом кадре с помощью метода Update () . В новой системе ввода вы можете задаться вопросом, когда отправляются действия и отправляются ли они перед каждым методом Update () .

В новой системе ввода используется другой цикл обновления, который не зависит от цикла MonoBehaviour . Вы можете узнать больше об этом в документации Unity Execution Order.

Система предлагает три режима обновления для управления циклом обновления. Вы можете настроить их в настройках проекта Project Settings > Input System Package > Update Mode.

Разные методы обновления системы ввода в Unity

Взгляните на каждый из этих узлов:

  • Dynamic Update: обрабатывает события с нерегулярными интервалами, определяемыми текущей частотой кадров. Это значение по умолчанию.
  • Fixed Update: обрабатывает события с интервалами фиксированной длины. Time.fixedDeltaTime определяет длину интервала.
  • Manually: события не обрабатываются автоматически; вы обрабатываете их, когда вызываете InputSystem.Update () . Если вам нужна проверка, аналогичная старой системе, вы можете вызвать InputSystem.Update () в Update () .

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

Куда двигаться дальше?

В этом уроке по Unity Input вы узнали:

  • Базовая схема новой системы ввода.
  • Как использовать действия и привязки.
  • Как эффективно обрабатывать различные типы ввода игроков.

Чтобы проверить свои навыки, попробуйте добавить в игру действие Pause.

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

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