First Person Shooter на Unity. Базовые функции FPS с простой физикой.


Содержание

Счетчик FPS в левом углу экрана

11.04.2020, 18:15

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

Непонятные квадратики в левом верхнем углу экрана
Привет всем. непонятные квадратики в левом верхнем углу экрана после нажатия кнопки.

Вывести текущее время в верхнем левом углу экрана
Вывести текущее время в верхнем левом углу экрана. Помогите плиз. Нужен код программы на.

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

Вывод координат мыши в левом верхнем углу экрана
Подскажите, как исправить: координаты и сообщения мигают на экране (постоянно идет обработка). И.

Unity 5 уроки — создание оружия для FPS шутера

Данная серия уроков предназначена для тех, кто хочет научиться создавать своё собственное оружие для видеоигр, будь то AAA First Person Shooter(FPS), Survival Game или Third Person Shooter(TPS). Моделирование оружия — очень простое дело, но занимает уйму времени, так как первоначально мы должны создать High-Poly модель, после этого мы должны сделать ретопологию, тем самым оптимизировав модель для игр, запечь Normal Map с High-Poly, наложить качественные Physically Based Rendering (PBR) текстуры и сделать риггинг 3D модели для последующей анимации. Серия уроков будет разбита на 3 части: 1. Моделирование пистолета, 2. Создание материалов и анимаций для Glock, 3. Импорт модели в Unity3D и создание скрипта стрельбы.

Для создания данной модели мы возьмем бесплатный и очень мощный софт Blender3D. Последняя на момент написания статьи версия Блендера — 2.78. Скачать можно с официального сайта. Вы можете использовать любой другой софт: 3DS Max, Maya и даже отечественный Компас-3D, разница будет только в интерфейсе программы. Для создания текстур мы будем использовать всеми любимый Photoshop, но также подойдет и GIMP.

Чтобы создать Game-Ready Glock, нам нужно придерживаться данного плана:
1. Найти чертежи и несколько референсов пистолета
2. Приступить к моделированию High-Poly
3. Оптимизировать 3D модель для игр
4. Создать PBR текстуры
5. Импортировать Glock в Unity

Чертежи пистолета Glock

Для создания большинства моделей необходимы чертежи. Мы нашли неплохое изображение пистолета Glock 19 спереди, сзади и по бокам. Фотографии не совсем совпадают, но такие погрешности не должны помешать процессу. Но все-таки лучше использовать точные чертежи, например с этого или этого сайта. Итак, чтобы добавить изображение на задний фон, нужно: нажать клавишу N, в открывшемся меню найти вкладку Background Images > Add Image и выбрать нужный файл. Чтобы увидеть изображение, нужно перейти в ортогональный режим, нажав 5 на Numpad. Снизу есть важная характеристика — Opacity (Прозрачность). Добавьте ещё несколько референсов таким же способом, но временно отключив их в этой вкладке. Если вам этот метод не нравится, то можно включить аддон Images As Planes в User Preferences > Add-ons.

Чертежи не могут показать порезы или мелкие части на пистолете. Здесь нам помогут референсы из Google. Поищите как можно больше фотографий Glock с различных сторон.

Моделирование High-Poly оружия

При создании High-Poly модели нет необходимости экономить полигоны, используйте столько, сколько считаете нужным. Не жалейте полигонов на всеразличные мелкие детали и порезы. Для удобства вы можете использовать Hotkeys (горячие клавиши), которые сильно упростят вам жизнь и сэкономят уйму времени. Все полезные горячие клавиши Blender написаны в этой статье: Горячие клавиши Blender3D. Нам же понадобятся только некоторые из них: E — экструдирование, G — перемещение, S — масштабирование, Ctrl+B — фаска, Z — переход в режим Wireframe, X — удаление, A — выделение всех элементов, если нажать A в режиме редактирования, то выделятся все точки/ребра/плоскости, H — скрыть объект.

Ретопология High-Poly Glock

На данном этапе нам нужно оптимизировать нашу 3D модель для видеоигр. AAA оружие сейчас должно иметь до 20.000 Tris, если это автомат, до 10.000 Tris, если это пистолет. Это приблизительные значения, для каждого проекта они разные. BlenderMania выпустили очень неплохой урок о том, как сделать ретопологию высокополигонального объекта на Low-Poly 3D модель.

В данном уроке автор рассказывает о том, как использовать Blender3D и MeshLab для создания быстрой ретопологии, используя минимум усилий и времени. В нашем случае нет необходимости использовать MeshLab, мы создадим Low-Poly модель с нуля, как показано в этом видеоуроке:

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

Создайте UV-развертку низкополигональной модели. Для запекания Normal Map нужно выбрать нашу High-Poly модель, потом выбрать нашу Low-Poly, перейти во вкладку Render. Нужно убедиться, что у нас выбран Blender Render. Находим в этой вкладке Bake> Bake Mode = Normals, Normal Space = Tangent, Selected to Active. Жмем Bake. После запекания карты нормалей нужно сохранить, нажав F3. Перейдите во вкладку Materials, создайте новый материал, во вкладке Textures выберите нашу карту нормалей, в Influence отключите Color, Geometry > Normal. В Mapping Coordinates должны быть переключены с Generated на UV. Добавьте свет на сцену и посмотрите результат.

В следующем уроке мы создадим текстуры и анимации для нашего пистолета.

Assassin’s Creed: Unity. FAQ с проседанием FPS.

Предлагаю вариант решения самой мерзкой проблемы с проседанием FPS, когда изображение рендерится «рывками»! Пробовал на патче 1.3.0.

Сразу оговорюсь, что этот вариант поможет только тем, у кого средний FPS играбельный (на уровне 30 кадров), а не «стабильные 9»)) Тут и «припарки» не помогут.


Для этого в настройках графики в пункте меню «Оконный режим» поставьте параметр «рястянуть», после чего сохраните и перезапустите игру! После перезапуска игра каждый раз какое-то время «адаптируется» и FPS идет значительно плавнее!

P.S. Только не спрашивайте, как это объяснить логически)) Никак) Продукт по-прежнему крайне сырой с отвратительным качеством прорисовки местности на дальних расстояниях, в последний патч добавились еще и проблемы с освещением..

P.P.S. Также опытным путем замечено, что при прочих равных при очередном запуске игры общий уровень FPS может принципиально различаться (аж на 15-20 кадров!!).. Так что, перезапустив игру, можно получить на том же месте 45 кадров, вместо скажем 25)) Уж чего, а такую ересь вижу впервые! Интересно, что от других графических настроек, за исключением прожорливого сглаживания, у меня не меняется вообще ничего (разница 2-5 FPS)! В общем занятный такой «некстгенчег» получился))

лично для себя пришел к выводу что при достатточной гпу производительности и нормальном цп решающее в этой игре количество гпу памяти.
1 гиг говно не тянет. в каменоломню такие карты
2 гига поднимут только средние текстуры бес сглаживания. и то не факт что везде. при сильно широком мониторе лучше перейти на низкие текстуры.
3 гига высокие текстуры бес сглаживания или средние текстуры со сглаживанием
4-6 и сглажка и максы.

второй параметр больше относится к цп а точнее к пропускной способности
дальность прорисовки.
и5 фх6ххх низко. и5 нормальный на 1155с и фх 8ххх с разгоном — средне. лга1366 и лга2011 с ксеонами и топами макс.
проблема может так же что когда 2 видюхи некоторые и7 не имеют полноценной экспресс линии на 2 карты и более карты от чего все может плохо работать из-за бутылочного горлышка.

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

PS а играть на 30 фпс с просадками. Опять же, мое мнение, что это мазохизм ещё тот. Нервы от микрошаттеринга расстраиваются быстро. И ни одна игра не стоит этих нервов.

А вы попробуйте сказать, что у юбисофта кривые руки, играя, к примеру, в Watch_dogs или предыдущие игры серии assassin’s creed: I, II, Brotherhood, Revelations, III и т.д. Что-то не похоже, что у юбисофта кривые руки, Похоже им просто не хватило времени все доделать. Неужели вы думаете, что отличная компания, выпускающая и по сей день отличные игры, выпустит эту сырую, недоделанную «говноигру» без какой-либо уважительной причины. Я буду писать это везде, до тех пор, пока не прекратится это нытье.

LightHOwU
Ты и вправду думаешь, что у них хватило совести сделать полуигру, с событиями во времена знаменитой французской революции, будучи при этом сами французской компанией, только для того,чтобы грести деньги с предзаказов? а зачем тогда такая графа? Сделали бы её тогда как в I или во II части, отрендерили в трейлере и все. Зачем столько мучений? Зачем такая проработанная, детализированная архитектура, размер зданий 1:1? Зачем тогда патчи? И тем более, вряд ли они пытались сделать «говноигру» с историей своей страны. Но в одном я с тобой согласен: пока в неё играть рановато.

[[[Чебураtor]]]
без какой-либо уважительной причины
Кто-то ищет причины, а кто-то оценивает результат.

Watch dogs — это заштампованный проходняк, в плане сюжета, где графика такая, что даже нет теней от фар, а все персонажи скучны и вторичны, чуть более, чем полностью. Первый Ассасин — добротный, классический сценарий с архиунылым геймплеем. Второй Ассасин — единственная, по-настоящему достойная часть, где и атмосфера есть (спасибо Киду), и сюжет с конспирологией и персонажи все на своей месте. Третий Ассасин тоже добротный и классический — пока играешь за Хейтема. Дальше предсказуемая вторичность, опять же слив. Четвертый Ассасин — это верх тупости, предсказуемости сюжета, помноженное на такой же унылый геймплей, только теперь с такими же унылыми абордажами.

PS если уж брать Юбисофт, то хотя бы Fat Cry 3 и Blacklist. В первом отличный сюжет, харизматичные персонажи и отличая, шутерная механика. Второй — шикарный стелс с классическим боевичком, не претендующий черезчур нагло, но поэтому то, в итоге, и не обосравшийся (как watch dogs).

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

Моя система FX 6100 разгон 3,7 Ghz, 8 gb ,видеокарта gforce 660 . Поменяйте в C:\Users\Documents\Assassin’s Creed Unity. Файл ACU.ini как у меня

[Graphics]
AdapterVendor > AdapterDevice > M
DisplayW > DisplayHeight=1080
RefreshRate=50
DisplayableRefreshRate=50
WindowMode=2
VSync=1
Stretching=0
Envir0
TextureQuality=0
ShadowQuality=0
SSAO=0
Bloom=0
AntiAliasingMode=0
Tessellation=0
[Startup]
[Input]
SelectedInput=KeyboardMouse2
HighProfileToggle=0
[KeyboardMouse1
Vendor > Product > [KeyboardMouse2 DefaultBindings]
Button1=57
Button2=256
Button3=47
Button4=18
PadUp=16
PadRight=77
PadDown=44
PadLeft=75
Select=15
Start=1
ShoulderLeft1=29
ShoulderLeft2=257
ShoulderRight1=42
ShoulderRight2=33
StickLeft=19
StickRight=46
BindableButton01=2
BindableButton02=3
BindableButton03=4
BindableButton04=5
BindableButton05=6
BindableButton06=7
BindableButton07=8
BindableButton08=9
BindableButton09=10
BindableButton10=-1
BindableButton11=-1
BindableButton12=-1
BindableButton13=-1
BindableButton14=-1
BindableButton15=-1
BindableButton16=-1
LeftStickUp=17
LeftStickDown=31
LeftStickLeft=30
LeftStickRight=32
RightStickUp=200
RightStickDown=208
RightStickLeft=203
RightStickRight=205
[KeyboardMouse5]
Vendor > Product > [KeyboardMouse5 DefaultBindings]
Button1=259
Button2=256
Button3=18
Button4=260
PadUp=3
PadRight=4
PadDown=5
PadLeft=2
Select=15
Start=1
ShoulderLeft1=33
ShoulderLeft2=20
ShoulderRight1=257
ShoulderRight2=16
StickLeft=10
StickRight=46
BindableButton01=-1
BindableButton02=-1
BindableButton03=-1
BindableButton04=-1
BindableButton05=-1
BindableButton06=-1
BindableButton07=-1
BindableButton08=-1
BindableButton09=-1
BindableButton10=-1
BindableButton11=-1
BindableButton12=-1
BindableButton13=-1
BindableButton14=-1
BindableButton15=-1
BindableButton16=-1
LeftStickUp=17
LeftStickDown=31
LeftStickLeft=30
LeftStickRight=32
RightStickUp=200
RightStickDown=208
RightStickLeft=203
RightStickRight=205
[Keyboard]
Vendor > Product > [Keyboard DefaultBindings]
Button1=76
Button2=72
Button3=73
Button4=77
PadUp=82
PadRight=81
PadDown=80
PadLeft=79
Select=15
Start=1
ShoulderLeft1=33
ShoulderLeft2=20
ShoulderRight1=78
ShoulderRight2=16
StickLeft=10
StickRight=75
BindableButton01=-1
BindableButton02=-1
BindableButton03=-1
BindableButton04=-1
BindableButton05=-1
BindableButton06=-1
BindableButton07=-1
BindableButton08=-1
BindableButton09=-1
BindableButton10=-1
BindableButton11=-1
BindableButton12=-1
BindableButton13=-1
BindableButton14=-1
BindableButton15=-1
BindableButton16=-1
LeftStickUp=17
LeftStickDown=31
LeftStickLeft=30
LeftStickRight=32
RightStickUp=200
RightStickDown=208
RightStickLeft=203
RightStickRight=205
[KeyboardAlt]
Vendor > Product > [KeyboardAlt DefaultBindings]
Button1=57
Button2=48
Button3=18
Button4=49
PadUp=4
PadRight=3
PadDown=2
PadLeft=5
Select=15
Start=1
ShoulderLeft1=33
ShoulderLeft2=20
ShoulderRight1=50
ShoulderRight2=16
StickLeft=10
StickRight=82
BindableButton01=2
BindableButton02=3
BindableButton03=4
BindableButton04=5
BindableButton05=6
BindableButton06=7
BindableButton07=8
BindableButton08=9
BindableButton09=10
BindableButton10=-1
BindableButton11=-1
BindableButton12=-1
BindableButton13=-1
BindableButton14=-1
BindableButton15=-1
BindableButton16=-1
LeftStickUp=17
LeftStickDown=31
LeftStickLeft=30
LeftStickRight=32
RightStickUp=200
RightStickDown=208
RightStickLeft=203
RightStickRight=205
[KeyboardMouse2]
Vendor > Product >

Создание простейшего шутера на Unity3D (часть 1)

Prerequisites

Starting a new project

  • Запустите Unity
  • Создайте новый проект

В Project View находятся папки Standard Assets и Pro Standard Assets (если есть лиценизия Pro). Новые ресурсы лучше группировать в папках по функциям (Rocket, Explosion, Audio и т. п.)

  • Скачайте проект с необходимыми файлами, распакуйте и запустите его.

Setting up the game environment


Adding the Main Character

Сейчас мы добавим персонажа, которым игрок сможет управлять. Unity содержит в /StandardAssets/Prefabs/ префаб для управления персонажем от первого лица.

  • Выберите префаб /Standard Assets/Prefabs/First Person Controller и перетащите его в сцену.
  • Вы должны увидеть цилиндр, представляющий игрока, 3 больших стрелки гизмо-контейнера для перемещения объекта в 3D-пространстве (если их нет, нажмите `W`) и пирамидальный каркас, исходящий из объекта и показывающий, куда смотрит игрок. FirstPersonController (FPC) теперь является стандартной камерой — при перемещении объекта будет изменяться и вид в Game View. Над FPC также отображается иконка камеры. Поместите FPC над уровнем пола.
  • Теперь нам не нужна MainCamera, удалите её.
  • Нажмите Play. Вы теперь можете перемещаться по уровню, используя мышь и клавитуру (клавиши со стрелками или WASD).

Теперь снабдим игрока оружием.

Adding a weapon

Create the weapon launcher

Create the Missile object

Write the Missile Launcher code

FirstPersonController — это префаб, состоящий из нескольких объектов и компонентов. Сам FPC представлен цилиндрическим мешем, который может вращаться только по оси Y. Если мы прикрепим скрипт стрельбы к нему, то сможем стрелять только вверх и вниз. Поэтому мы прикрепим скрипт к объекту MainCamera внутри FPC, так как камера может смотреть в любом направлении.
Создадим наш первый Javascript, определяющий поведение Launcher.

  • Assets→Create→JavaScript. Будет создан пустой JavaScript с именем NewBehaviourScript. Переименуйте его в «MissileLauncher».
Цукерберг рекомендует:  Центрирование Div-а по горизонтали и вертикали

Совет: вы можете задать использование внешнего редактора кода в Unity→Preferences→ExternalScriptEditor.

  • Переместите скрипт MissileLauncher.js и префаб Missile в папку WeaponScripts. В этой папке будут храниться скрипты оружия.

Что мы хотим от скрипта? Мы хотим обнаружить, когда пользователь нажмёт клавишу огня, затем вызвать новый экземпляр ракеты и запустить её с определённой скоростью туда, куда пользователь целится. Давайте разбираться с кодом:
var projectile : Rigidbody;
var speed = 20;

function Update()
Это начало скрипта, в котором объявляются публичные переменные (они выступают в роли свойств скрипта) и функция Update.
if( Input.GetButtonDown( «Fire1» ) )
Сначала мы хотим проверить, когда пользователь нажмёт клавишу огня. Клавиша огня «Fire1» по умолчанию назначена на ЛКМ и Ctrl (это может быть изменено в Editor→Project Settings→Input).
<
var instantiatedProjectile : Rig > projectile, transform.position, transform.rotation );
Мы объявляем переменные для хранения ссылки на объект, чьи экземпляры вызываются. Тип переменной — Rigidbody, потому что ракета должна иметь физическое поведение.
Для вызова экземляра объекта используется функция Instantiate с тремя параметрами: объект для вызова, его местоположение и угол поворота. Возможна и другая конструкция (смотрите API guide), но мы будем использовать эту.
Первый параметр, projectile — это объект, который мы хотим создать. Это снаряд. Снаряд создан и настроен в редакторе. Для этого мы объявили переменную projectile как публичную, за пределами функций, что открывает её, делает доступной для редактора Unity. Объект снаряда может быть создан в коде, однако если вы хотите изменять переменную, то лучше сделать это в редакторе через Inspector.
Второй параметр, transform.position, создаёт снаряд (объект projectile) в той точке 3D-пространства, где находится пусковая установка (launcher). Почему пусковая установка? Скрипт будет присоединён к пусковой установке и transform.position даёт нам её текущее положение (ключевое слово transform получает доступ к компоненту Transform того объекта, к которому прикреплён скрипт).
Третий параметр, transform.rotation, действует аналогично второму параметру и даёт созданному объекту тот же угол поворота, каким обладает пусковая установка.
instantiatedProjectile.velocity = transform.TransformDirection( Vector3( 0, 0, speed ) );
Следующая часть кода создаёт перемещение ракеты. Для этого мы придаём ракете скорость, но в каком направлении (X, Y или Z)? В Scene щёлкните на FPC. Отобразятся стрелки перемещений (нажмите `W`, если не отображаются): красная (ось X), зелёная (ось Y) и синяя (ось Z). Голубая стрелка показывает, в какую сторону смотрит игрок (то есть, он смотрит в направлении оси Z). Соответственно, нужно придать ракете скорость по оси Z.
Скорость (velocity) — это свойство instantiatedProjectile. Как мы это узнали? Тип переменной instantiatedProjectile — Rigidbody. Посмотрим в API и увидим, что velocity — это свойство Rigidbody. Там же можете ознакомиться с другими свойствами. Для настройки velocity нужно задать скорость по каждой оси. Однако, есть небольшая проблема. Объекты в 3D используют две системы координат: локальная и мировая. В локальной системе координаты определяются относительно объекта. В мировой системе координаты абсолютные: верх, к примеру, будет всегда в одном направлении для всех объектов. Rigidbody.velocity должен определяться в мировой системе координат. Соответственно, мы должны преобразовать локальную ось Z в направление в мировой системе. Для этого используется функция transform.TransformDirection, которая использует Vector3 как аргумент. Переменная speed является публичной, так что может быть настроена в редакторе через Inspector.
Physics.IgnoreCollision( instantiatedProjectile. collider, transform.root.collider );
>
>
Мы выключаем столкновения между ракетой и игроком. Если этого не сделать, то ракета будет сталкиваться с игроком при её вызове. Смотрите свойство IgnoreCollision в API.
Вот полный код MissileLauncher.js:
var projectile : Rigidbody;
var speed = 20;

function Update()
<
if( Input.GetButtonDown( «Fire1» ) )
<
var instantiatedProjectile : Rig > Instantiate( projectile, transform.position, transform.rotation );
instantiatedProjectile.velocity = transform.TransformDirection( Vector3( 0, 0, speed ) );
Physics.IgnoreCollision( instantiatedProjectile. collider, transform.root.collider );
>
>

  • Вставьте этот код в MissileLauncher.js и сохраните скрипт.
  • Прикрепите (просто перетащите) скрипт MissileLauncher к объекту Launcher в FPC. Скрипт должен появиться в Inspector объекта.

Префаб ракеты, который мы создали перед этим, не связан с переменной projectile в скрипте. Мы проведём эту связь в редакторе. Тип переменной projectile — Rigidbody, а это значит, что и ракета должна обладать компонентом Rigidbody.

  • Выберите Missile в Project View и добавьте компонент Components→Physics→Rigidbody. Компонент Rigidbody добавлен к ракете. Тип объекта, назначаемого на переменную, должен соответствовать типу переменной.
  • Свяжите ракету с переменной в скрипте. Выберите Launcher в Hierarchy, найтите переменную Projectile в скрипте MissileLauncher в Inspector. Перетащите префаб Missile из Project View на переменную Projectile.
  • Теперь запустите игру. При выстреле будут вылетать сферы, подчиняющиеся гравитации.

Missile explosions

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

  • Создайте пустой скрипт (Assets→Create→Javascript) и переименуйте его в «Projectile». Перетащите новый скрипт в папку WeaponScripts.

И что мы хотим от Projectile? Мы хотим обнаружить, когда ракета столкнётся с чем-либо, и создать взрыв в этой точке. Посмотрим этот код:
var explosion : GameObject;

function OnCollisionEnter( collision : Collision )
<
Любой код, который мы вставим внутрь функции OnCollisionEnter, будет выполнен, когда объект, к которому прикреплён скрипт, столкнётся с другим объектом.
var contact : ContactPoint = collision.contacts[0];
Основная задача функции OnCollisionEnter — вызвать новый взрыв в точке столкновения ракеты. Как определить, где произошло столкновение? Функция OnCollisionEnter работает с классом Colli­sion, который содержит эту информацию. Точка столкновения сохраняется в переменной ContactPoint.
var rotation = Quaternion.FromToRotation( Vector3.up, contact.normal );
var instantiatedExplosion : GameObject = Instantiate( explosion, contact.point, rotation );
Здесь мы используем функцию Instantiate для создания взрыва. Мы знаем, что функция работает с 3 параметрами: (1) объект для вызова, (2) позиция и (3) угол поворота.
Мы назначим объект с системой частиц позже. Использовать для этого мы будем редактор, так что переменную нужно сделать публичной (объявить за границами функций).
Второй параметр определяет точку вызова взрыва, исходя из информации в классе Collision.
Третий параметр, угол поворота взрыва, нуждается в пояснении. Мы хотим повернуть взрыв так, чтобы ось Y взрыва была параллельна нормали (normal) поверхности, с которой столкнулась ракета. Это означает, что для стен взрыв будет направлен наружу, для пола — вверх. Фактически, это перевод локальной оси Y (ось Y направлена вверх) в нормаль поверхности (в мировой системе) объекта, с которым произошло столкновение. То есть, ось Y взрыва поворачивается в том же направлении, в каком повёрнута нормаль поверхности, с которой произошло столкновение.
Destroy( gameObject );
>
Теперь мы ходим заставить ракету исчезнуть из игры после столкновения. Для этого вызываем фукнцию Destroy(), с объектом в качестве параметра (gameObject, как в нашем случае, ссылается на тот объект, к которому прикреплён скрипт).
Вот полный код Projectile.js:
var explosion : GameObject;

function OnCollisionEnter( collision : Collision )
<
var contact : ContactPoint = collision.contacts[0];
var rotation = Quaternion.FromToRotation( Vector3.up, contact.normal );
var instantiatedExplosion : GameObject = Instantiate( explosion, contact.point, rotation );
Destroy( gameObject );
>

  • Добавьте код в Projectile.js и сохраните.
  • Прикрепите Projectile.js к префабу Missile (Component→Scripts→Projectile).

Теперь мы создадим сам взрыв.

  • Создайте новый префаб (назовите его «Explosion»), который будет ссодержать ресурсы взрыва.
  • Стандартные ресурсы содержат хороший префаб взрыва с системой частиц и источником света. Перетащите префаб /Standard Assets/ Particles/explosion в Hierarchy.
  • Настройте внешний вид взрыва, а затем перетащите объект explosion из Hierarchy в префаб Explosion.

Теперь прикрепим взрыв к ракете:

  • Выберите префаб Missile и перетащите префаб Explosion в переменную Explosion в скрипте Projectile.

Defining Explosion Behavior


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

  • Создайте новый скрипт, назовите его «Explosion» и поместите в папку WeaponScripts.

Существует ещё одна часто вызываемая функция — Start(). Код, размещённый в этой функции, выполняется один раз, при вызове экземпляра объекта. Пока что мы хотим удалить взрыв из игры по прошествии определённого времени. Для этого мы используем функцию Destroy() со вторым параметром, который определит, через сколько будет удалён объект.
var explosionTime = 1.0;

function Start()
<
Destroy( gameObject, explosionTime );
>
Переменная explosionTime является публичной и определяет, через сколько будет удалён объект.

  • Вставьте код в скрипт Explosion и удалите функцию Update().
  • Прикрепите скрипт к префабу Explosion.

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

  • Запустите игру. При столкновении ракеты с окружением, вы увидите взрыв (систему частиц) и её исчезновение через одну секунду.

FPS Sample — многопользовательский шутер от первого лица, призванный продемонстрировать последние возможности движка Unity

Поделитесь в соцсетях:

Разработчики Unity рассказали о выходе многопользовательского шутера от первого лица — FPS Sample. Игра призвана продемонстрировать последние возможности движка Unity, а также стать отправной точкой для сторонних разработчиков в создании собственных игр.

Исходный код, графические ассеты и звуковые эффекты доступны по Unity Companion License и располагаются на GitHub. При этом скачать можно как весь репозиторий, так и отдельные компоненты проекта.

По словам разработчиков Unity, FPS Sample — это следующий шаг в развитии платформы. Утверждается, что над шутером трудились всего 6 человек.

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

Особый упор в FPS Sample сделан на графическую составляющую. Так, проект поддерживает технологию High Definition Render Pipeline, которая представляет собой конвейерную обработку реалистичной визуализации, опирающуюся на законы физики. С ее помощью, к примеру, детально прорабатывается освещение.

Кроме того, разработчики оптимизировали производительность, в частности, задействовали технологию «клиент-предсказания», позволяющую игроку перемещаться без необходимости предварительно получать на это «одобрение» со стороны сервера. Тем самым существенно снижается нагрузка на последний.

На данный момент FPS Sample доступен только на ПК, в будущем проект планируется портировать на Mac, PS4 и Xbox One.

Помимо этого, разработчики обещают прислушиваться к обратной связи и развивать платформу. Например, в ближайшие обновления в шутер будет добавлена функция VFX Graph.

Assassin’s Creed: Unity — Оптимизация для слабых ПК

Существует много способов улучшить работу игр на не самом слабом компьютере. Далее мы рассмотрим их в порядке от простых к сложным и расскажем, что делать, если Assassin’s Creed: Unity тормозит.

Простое решение тормозов в ACV

  1. Скачайте и запустите всемирно известный CCleaner (скачать по прямой ссылке) — это программа, которая очистит ваш компьютер от ненужного мусора, в результате чего система станет работать быстрее после первой же перезагрузки;
  2. Обновите все драйверы в системе с помощью программы Driver Updater (скачать по прямой ссылке) — она просканирует ваш компьютер и обновит все драйверы до актуальной версии за 5 минут;
  3. Установите программу WinOptimizer (скачать по прямой ссылке) и включите в ней игровой режим, который завершит бесполезные фоновые процессы во время запуска игр и повысит производительность в игре.

Освободить место на диске

Прежде чем переходить к активным действиям нужно убедиться, что на компьютере есть хотя бы 10-15 Гб свободного места на жестком диске, на который установлена операционная система.

Обычно это диск «C». Этот минимальный запас необходим для того, чтобы система могла без каких-либо проблем создавать временные хранилища файлов Assassin’s Creed: Unity, кэши и так далее.

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

Отключить ненужные программы


Каждая программа, которая запущена в ОС, занимает определенный процент оперативной памяти и загружает процессор. Убедиться в этом легко, достаточно просто открыть диспетчер задач с помощью сочетания клавиш Ctrl+Alt+Del:

Если в компьютере установлен не самый мощный процессор, а оперативной памяти меньше 8-16 Гб, то перед запуском ACV нужно отключить ненужные программы. Например, Skype, Discord, Telegram, Google Chrome и так далее.

Отключить оверлеи

Речь идет о тех программах, которые способны отображать свой интерфейс поверх игры. Часто на компьютере есть такие — Fraps, Steam, Origin и так далее. Даже когда оверлей скрыт, он обрабатывается компьютером, снижая FPS в ACV.

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

Обновить драйвера видеокарты, скачать драйвера для ACV

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

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

Для некоторых игр производители видеокарт выпускают специально оптимизированные драйвера. Поищите таковые в разделе новостей о ACV — обычно мы про них пишем. Также можно посмотреть на сайте производителей видеокарт.

Изменить параметры электропитания

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

Это не дает компьютеру раскрыть свой потенциал в Assassin’s Creed: Unity полностью, поэтому первым делом нужно открыть панель управления, которую можно найти с помощью поиска. После нужно сделать следующее:

  • Выбрать режим просмотра «Мелкие значки»;
  • Кликнуть на «Электропитание»;
  • На экране найти опцию «Настройка схемы электропитания», кликнуть на нее;
  • Кликнуть на «Изменить дополнительные параметры питания»;
  • В открывшемся окне найти выпадающий список;
  • В списке выбрать «Высокая производительность»;
  • Нажать кнопку «Применить», затем кликнуть «ОК».

Включить режим производительности Nvidia

После установки драйвера для видеокарты от компании Nvidia можно ускорить работу Assassin’s Creed: Unity с помощью режима производительности. Это немного упростит графику в игре, но повысит FPS. Обратите внимание, что этот метод доступен только в случае, если у вас видеокарта с чипом от Nvidia. Вот как это сделать:

  • В нижнем правом углу экрана, в трее, нажать правой кнопкой мыши на иконку «Настройки NVIDIA»;
  • В открывшемся окне справа выбрать вкладку «Параметры 3D»;
  • Нажать на опцию «Регулировка настроек изображения с просмотром»;
  • Справа поставить флажок напротив «Пользовательские настройки с упором на:»;
  • Передвинуть «ползунок», который находится ниже, в крайнюю левую позицию «Производительность»;
  • Снизу нажать на кнопку «Применить».
Цукерберг рекомендует:  Эффект неисправного отображения текста, изображения, SVG

Далее необходимо запустить Assassin’s Creed: Unity и убедиться, что все отображается корректно. Если возникают проблемы, то нужно вместо «Пользовательские настройки с упором на:» выбрать «Настройки согласно 3D-приложению».

Отключить эффекты Windows

Если Assassin’s Creed: Unity работает не в полноэкранном режиме, а в окне, в том числе и без рамки, то повысить FPS можно, если отключить эффекты Windows. Для этого нужно проделать следующие действия:

  • Открыть «Проводник»;
  • Правой кнопкой нажать на «Этот компьютер» (или «Мой компьютер»);
  • В контекстном меню кликнуть на «Свойства»;
  • В открывшемся окне слева нажать на «Дополнительные параметры системы»;
  • В открывшемся окне перейти на вкладку «Дополнительно»;
  • В разделе «Быстродействие» нажать на кнопку «Параметры. »;
  • В открывшемся окне перейти на вкладку «Визуальные эффекты»;
  • Поставить флажок напротив опции «Обеспечить наилучшее быстродействие».

При необходимости на последнем шаге можно выбрать опцию «Особые эффекты». В таком случае можно самостоятельно выбрать, какие эффекты оставить, а какие — отключить.


Увеличить файл подкачки, если не хватает оперативной памяти для Assassin’s Creed: Unity

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

  • Открыть «Проводник»;
  • Правой кнопкой нажать на «Этот компьютер» (или «Мой компьютер»);
  • В контекстном меню кликнуть на «Свойства»;
  • В открывшемся окне слева нажать на «Дополнительные параметры системы»;
  • В открывшемся окне перейти на вкладку «Дополнительно»;
  • В разделе «Быстродействие» нажать на кнопку «Параметры. »;
  • В открывшемся окне перейти на вкладку «Дополнительно»;
  • Снять флажок с параметра «Автоматически выбирать объем файла подкачки» (если есть);
  • Поставить флажок напротив опции «Указать размер»;
  • В текстовых полях «Исходный размер (МБ):» и «Максимальный размер (МБ):» указать в мегабайтах значение, равное половине объема оперативной памяти.

Например, если в системном блоке установлена «плашка» на 4 Гб, то есть 4192 Мб, в поля выше нужно вписать число 2048. Можно сделать файл подкачки больше, но никакого прироста это не даст.

Следует понимать, что файл подкачки эффективен только тогда, когда системе не хватает оперативной памяти. Если компьютер имеет 8-16 Гб, то файл подкачки практически не используется. А при использовании SSD-диска в качестве системного наличие файла подкачки и вовсе может замедлить производительность Assassin’s Creed: Unity, поэтому не следует бездумно задавать большое значение файла подкачки.

Еще больше ухудшить графику в Assassin’s Creed: Unity (режим «картошки») — выключить сглаживание и т.п.

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

Загрузив программу, запускаем ее. В случае с NVIDIA Inspector нужно запускать файл nvidiaProfileInspector.exe, а не nvidiaInspector.exe. Сверху, в строке «Profiles:» можно выбрать любую игру, которая поддерживается драйверами Nvidia.

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

Наибольший прирост производительности дает изменение этих двух параметров:

  • Texture filtering — LOD bias;
  • Antialiasing — Transparency Supersampling.

Каждая из этих настроек имеет разные значения. Некоторые из них могут делать картинку в Assassin’s Creed: Unity неудобоваримой, поэтому следует попробовать разные комбинации значений, которые дают более-менее сносное играбельную картинку.

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

Как разогнать видеокарту для ACV

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

Чтобы добиться большего значения FPS в Assassin’s Creed: Unity, сначала можно попробовать разогнать видеокарту. Самый простой способ сделать это — воспользоваться встроенными функциями ПО от производителя видеокарты.

Например, в комплекте с некоторыми видеокартами от GIGABYTE поставляется программа Graphics Engine, в которой есть несколько уже готовых профилей разгона. Это позволяет выжать из видеокарты 5-10 дополнительных кадров в секунду.

Если программы от производителя нет, то всегда можно воспользоваться универсальным решением — MSI Afterburner. Это одна из лучших программ для разгона, в ней множество разных настроек.

Но тут придется все настраивать вручную. Повышать следует в первую очередь частоту самого видеочипа («Core Clock») и частоту памяти видеокарты («Memory Clock»). Слева находятся базовые значения этих параметров. Справа отображаются температура и увеличение вольтажа — эти характеристики позволяют следить за «здоровьем» видеокарты.

При повышении частоты возрастает нагрев видеокарты. Если температура переходит отметку в 85 градусов, то следует увеличить скорость оборотов вентиляторов («Fan Speed»). Если температура повысилась до 100 градусов, то следует немедленно прекратить разгон, иначе чип может расплавиться. Мощный «разгон» требует водяного охлаждения, поэтому не следует повышать частоты более чем на 10%.

Разогнать процессор

В то время как «разгон» видеокарты вполне осуществим прямо в Windows, для того, чтобы улучшить работу процессора и тем самым увеличить быстродействие Assassin’s Creed: Unity, придется лезть в «Биос».


Геймерский «разгон» процессора обычно предполагает увеличение процессорного множителя (Core Ratio). Сделать это можно далеко не на каждом процессоре, а только на том, где этот множитель разблокирован. Обычно такие процессоры помечаются особым образом. Например, компания Intel использует маркировки «K» и «X‘. То есть, например, i7-4790 нельзя разогнать с помощью множителя, а вот i7-4790K — вполне.

Но как узнать точное название модели процессора? Проще всего воспользоваться программой CPU-Z. Запустив ее, нужно открыть вкладку «CPU» и посмотреть на самую первую строчку — «Name». Это и есть название процессора. Кстати, там же можно увидеть из сам множитель. Он в разделе «Clocks», в строке «Multiplier». Если процессор поддерживает «разгон», то этот множитель можно изменить.

Чтобы изменить коэффициент Core Ratio, нужно сначала попасть в оболочку BIOS. Для этого нужно нажать особое сочетание клавиш во время загрузки компьютера (до того, как появится экран Windows).

Сочетание может различаться в зависимости от материнской платы. Часто BIOS можно вызвать с помощью клавиши «F8» или «Del». На экране «Биоса» нужно найти раздел, посвященный процессору. Тут тоже все сложно, так как оболочек у BIOS много. Практически каждый производитель материнский плат использует свою собственную, поэтому без знания английского языка найти нужное место не так-то просто.

Изменять множитель нужно постепенно, повышая его на 2. После каждого изменения следует перезапускать компьютер и тщательно проверять работоспособность и температуру процессора. Если она становится выше 80 градусов во время игры, то нужно немедленно выключить Assassin’s Creed: Unity, перезагрузить компьютер, зайти в BIOS и снизить значение Core Ratio. Иначе процессор может сгореть.

Первые шаги в оптимизации и полировке игры на Unity3d

После того как я закончил мой первый проект, пришла мысль о портировании его на мобильные устройства или хотя бы запуске на встроенном GPU. Во всех гайдах по оптимизации, в одном из первых советов вам сообщат, что не стоит переживать о производительности заранее, начинайте оптимизировать, после того как все закончите, и вы постепенно приведете все в порядок. Так и я, выпустив изначально игру на десктоп, решил, что никогда не будет поздно оптимизировать ее под мобильные устройства. К сожалению, мне не удалось в полной мере достичь поставленной цели, потому как, похоже, что мобильные игры следует с самого начала разрабатывать с прицелом на слабое железо. На данный момент, для дальнейшей оптимизации под мобильные платформы я вижу только необходимость серьезно переделать геймплей и дизайн игрового мира. Однако и в текущем варианте получен ценный опыт оптимизации под Unity3d и результирующий прирост производительности более чем в 300% на интегрированном GPU.

Давайте начнем с CPU

Достаточно очевидный список сформировавшийся во время оптимизации:

    Не используйте Свойства! Поля и методы — ваши лучшие друзья.

Кешируйте все, что вы получаете через GetComponent<>, сюда же входят transforms, rigidbodies и др.

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

Кешируйте всю математику. Каждый вызов Vector.Up будет под капотом вызывать конструктор, что не очень быстро. Я создал статический CachedMath класс, в который были сложены все направления, часто используемые векторы и кватернионы.

Попробуйте обходиться без использования типа String. Каждая строка требует выделения памяти, и при бесконтрольном использовании строк, вы увидите, как GC остановит все потоки для своего вызова. В моем случае основными источниками строк были индикатор FPS и таймер во время гонки. Решением стало создать пул строковых литералов для всех цифр от 1 до 100. Это полностью исключило выделение строк в каждом кадре.

Никогда не используйте foreach, просто замените на for, если хотите сберечь GC и драгоценное время CPU. К тем же последствиям зачастую приводит и использование шаблонных методов(generics).

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

Все строки используемые в Animator-объектах следует сконвертировать в целочисленные идентификаторы через Animator.StringToHash()


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

  • Удаляйте все пустые методы Update и FixedUpdate. Также, если ваш скрипт использует оба или только фиксированный, то стоит подумать о переносе любой возможной логики из фиксированного в обычный Update.
  • Конечно, любые оптимизации стоит проводить только, если вы видите задержки в окне профилировщика. Главное, уничтожайте на корню постоянные выделения памяти.

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

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

    Теперь GPU

    С CPU советы были достаточно универсальны и они применимы в любом проекте. Чего не скажешь о GPU-оптимизациях, которые зачастую сильно зависят от конкретной сцены. Однако, если вы не используете сильной магии в своих шейдерах, то явный индикатор — это количество проходов GPU(pass-calls).

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

    Материалы. Уменьшайте количество используемых материалов насколько это возможно. Каждая смена материала это новый проход, также как и каждый текстурный слой внутри материала это тоже новый проход. Конечно, я несколько упрощаю и проходы формируются не так просто, но факт остается — слишком много проходов будут непомерно нагружать слабый GPU. Для мобильных устройств рекомендуют что-то в районе 40-60 проходов. Более продвинутые устройства могут обрабатывать и в районе сотни. Так что вам есть куда стремиться!

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

    Импостеры. Я предпочел заменить мои объекты с помощью импостеров (в целом это очень похоже на биллборды, но это множество текстур полученных пререндером объекта со всех сторон). Во встроенном Asset-Store от Unity3d множество готовых платных решений для LOD и импостеров. Однако я решил воспроизвести базовый алгоритм самостоятельно. Я создал скрипт-расширение редактора, который создавал копию необходимого объекта, менял его слой, затем создавал камеру которая была ограничена только этим специальным слоем, и производил отрисовку объекта в текстуры со всех сторон. Были добавлены основные параметры, как название результирующей папки с текстурами, разрешение получаемых текстур, расстояние до объекта, смещение по высоте, количество сторон и флаг для сохранения или отключения освещения во время создания импостера. После того как все действия завершены, скрипт удалял уже ненужную копию объекта.

    Спрайты. Теперь почти все объекты заменяются спрайтами на определенном удалении от камеры. Но количество проходов было все еще огромным. Тогда я обнаружил, что спрайты это далеко не всегда легковесная форма для отображения. Каждый спрайт по умолчанию триангулирует картинку, создавая множество вершин. На каждые 900 или около того(по официальной документации) вершин, создается очередной проход (официально группировка|пакетирование|batching — сохранение данных множества объектов в одну инструкцию для GPU — вообще неприменим к SpriteRenderer объектам). В то же время нельзя заменить все спрайты на полные квадратные регионы с прозрачностью, т. к. все прозрачные пиксели все еще требуют отрисовки, и GPU их не пропускает. Также прозрачность ведет к проблемам во время отрисовки всех спрайтов из-за проверки на глубину отрисовки. GPU все еще будет создавать дополнительный проход для одного или двух спрайтов, между отрисовкой множества уже сгруппированных только потому, что этого требует проверка по глубине. Единственное, что удалось сделать — это изменить тип спрайта на Multiple, что меняет внутренний механизм триангуляции, который создает намного меньше вершин.

    Упаковщик спрайтов(SpritePacker). Это последнее о чем вы должны помнить при работе со спрайтами. Чтобы явно указать для спрайта необходимость упаковки в карту атлас, нужно указать его Tag. В момент отрисовки спрайтов из одного атласа GPU не создает дополнительных проходов, даже если порядок отрисовки по глубине не оптимален для неупакованных спрайтов. Размер результирующего атласа также важен. По умолчанию он ограничен значением в 2048х2048. Это максимальный размер атласа, и он динамически подстраивается под оптимальный, в зависимости от заполнения. В моем случае этого было недостаточно для упаковки всех необходимых мне спрайтов на одной странице. Замена алгоритма упаковки на собственный, который основан на базовом, но с измененным значением размера на 4096×2048 значительно улучшило производительность.

    Цукерберг рекомендует:  Html - Могу ли я на своем сайте использовать шрифты мака

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

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

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

    Вода. В моем случае, мне необходимо было получить более производительную воду. Изначально в сцене использовалась waterProDaytime с включенным преломлением, которая подверглась минимальным изменениям для поддержки пены вдоль береговой линии. Была убрана камера преломлений и заменена на вызов grabpass. Все дело в том, что для корректного отображения преломлений, камере пришлось отключать матрицу отсечения, т. к. в противном случае — все объекты, выше уровня воды, просто не отбрасывали теней. Из-за этого ограничения, камера дополнительно отрисовывала сцену целиком, и вызов grabpass оказался в этом случае быстрее. Также был изменен параметр LOD множителя на время отрисовки отражений. Таким образом импостеры чуть дольше отображаются в воде, что дополнительно снижает нагрузку.

    Все изменения повысили производительность на интегрированном GPU с 6-8 до 22-24 кадров в секунду. По-прежнему низкий показатель, но лучшего добиться пока не удалось. Все еще рекомендую запуск своей игры на дискретной графике.

    Полировка

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

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

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


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

    И последним стал экран медалей. Он был просто статичен, в нем было ужасно скучно находиться. А ведь это должно быть местом в котором игрок с наслаждением наблюдает за своим прогрессом. Так что я добавил немного жизни. Теперь его украшают три системы частиц, создающих мягкие переливающиеся шары света похожие на светлячков. Частицы, к сожалению по умолчанию не доступны на UI, поэтому пришлось создавать дополнительную камеру, которая отрисовывает только эти частицы в текстуру, затем накладывающуюся на UI.

    Что было оставлено позади

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

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

    Другая цель, появившаяся во время оптимизаций в виде быстрого запуска приложения, или даже плавного запуска, также не была достигнута. Холодный старт в моем случае длится больше минуты. Причем каждый последующий запуск сокращает это время почти вдвое. Так что, похоже, это какое-то внутреннее необходимое требование Unity-плеера. Самым главным же недостатком является зависание UI потока при активации сцены. Я уже использую асинхронный вариант загрузки сцены, даже переключил его в Additive режим, однако UI просто останавливается после 90% загрузки, когда необходимо переключить флаг allowSceneActivation. Было бы здорово, если кто-то подскажет обходной путь для Unity5.x, или нечто вроде вызова события которое может потокобезопасно и с главным приоритетом изменять Ui-объекты с их перерисовкой, чтобы была хоть какая-то индикация процесса приложения.

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

    Assassin’s Creed: Unity. FAQ с проседанием FPS.

    Предлагаю вариант решения самой мерзкой проблемы с проседанием FPS, когда изображение рендерится «рывками»! Пробовал на патче 1.3.0.

    Сразу оговорюсь, что этот вариант поможет только тем, у кого средний FPS играбельный (на уровне 30 кадров), а не «стабильные 9»)) Тут и «припарки» не помогут.

    Для этого в настройках графики в пункте меню «Оконный режим» поставьте параметр «рястянуть», после чего сохраните и перезапустите игру! После перезапуска игра каждый раз какое-то время «адаптируется» и FPS идет значительно плавнее!

    P.S. Только не спрашивайте, как это объяснить логически)) Никак) Продукт по-прежнему крайне сырой с отвратительным качеством прорисовки местности на дальних расстояниях, в последний патч добавились еще и проблемы с освещением..

    P.P.S. Также опытным путем замечено, что при прочих равных при очередном запуске игры общий уровень FPS может принципиально различаться (аж на 15-20 кадров!!).. Так что, перезапустив игру, можно получить на том же месте 45 кадров, вместо скажем 25)) Уж чего, а такую ересь вижу впервые! Интересно, что от других графических настроек, за исключением прожорливого сглаживания, у меня не меняется вообще ничего (разница 2-5 FPS)! В общем занятный такой «некстгенчег» получился))

    лично для себя пришел к выводу что при достатточной гпу производительности и нормальном цп решающее в этой игре количество гпу памяти.
    1 гиг говно не тянет. в каменоломню такие карты
    2 гига поднимут только средние текстуры бес сглаживания. и то не факт что везде. при сильно широком мониторе лучше перейти на низкие текстуры.
    3 гига высокие текстуры бес сглаживания или средние текстуры со сглаживанием
    4-6 и сглажка и максы.

    второй параметр больше относится к цп а точнее к пропускной способности
    дальность прорисовки.
    и5 фх6ххх низко. и5 нормальный на 1155с и фх 8ххх с разгоном — средне. лга1366 и лга2011 с ксеонами и топами макс.
    проблема может так же что когда 2 видюхи некоторые и7 не имеют полноценной экспресс линии на 2 карты и более карты от чего все может плохо работать из-за бутылочного горлышка.

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

    PS а играть на 30 фпс с просадками. Опять же, мое мнение, что это мазохизм ещё тот. Нервы от микрошаттеринга расстраиваются быстро. И ни одна игра не стоит этих нервов.

    А вы попробуйте сказать, что у юбисофта кривые руки, играя, к примеру, в Watch_dogs или предыдущие игры серии assassin’s creed: I, II, Brotherhood, Revelations, III и т.д. Что-то не похоже, что у юбисофта кривые руки, Похоже им просто не хватило времени все доделать. Неужели вы думаете, что отличная компания, выпускающая и по сей день отличные игры, выпустит эту сырую, недоделанную «говноигру» без какой-либо уважительной причины. Я буду писать это везде, до тех пор, пока не прекратится это нытье.

    LightHOwU
    Ты и вправду думаешь, что у них хватило совести сделать полуигру, с событиями во времена знаменитой французской революции, будучи при этом сами французской компанией, только для того,чтобы грести деньги с предзаказов? а зачем тогда такая графа? Сделали бы её тогда как в I или во II части, отрендерили в трейлере и все. Зачем столько мучений? Зачем такая проработанная, детализированная архитектура, размер зданий 1:1? Зачем тогда патчи? И тем более, вряд ли они пытались сделать «говноигру» с историей своей страны. Но в одном я с тобой согласен: пока в неё играть рановато.

    [[[Чебураtor]]]
    без какой-либо уважительной причины
    Кто-то ищет причины, а кто-то оценивает результат.

    Watch dogs — это заштампованный проходняк, в плане сюжета, где графика такая, что даже нет теней от фар, а все персонажи скучны и вторичны, чуть более, чем полностью. Первый Ассасин — добротный, классический сценарий с архиунылым геймплеем. Второй Ассасин — единственная, по-настоящему достойная часть, где и атмосфера есть (спасибо Киду), и сюжет с конспирологией и персонажи все на своей месте. Третий Ассасин тоже добротный и классический — пока играешь за Хейтема. Дальше предсказуемая вторичность, опять же слив. Четвертый Ассасин — это верх тупости, предсказуемости сюжета, помноженное на такой же унылый геймплей, только теперь с такими же унылыми абордажами.

    PS если уж брать Юбисофт, то хотя бы Fat Cry 3 и Blacklist. В первом отличный сюжет, харизматичные персонажи и отличая, шутерная механика. Второй — шикарный стелс с классическим боевичком, не претендующий черезчур нагло, но поэтому то, в итоге, и не обосравшийся (как watch dogs).

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

    Моя система FX 6100 разгон 3,7 Ghz, 8 gb ,видеокарта gforce 660 . Поменяйте в C:\Users\Documents\Assassin’s Creed Unity. Файл ACU.ini как у меня


    [Graphics]
    AdapterVendor > AdapterDevice > M
    DisplayW > DisplayHeight=1080
    RefreshRate=50
    DisplayableRefreshRate=50
    WindowMode=2
    VSync=1
    Stretching=0
    Envir0
    TextureQuality=0
    ShadowQuality=0
    SSAO=0
    Bloom=0
    AntiAliasingMode=0
    Tessellation=0
    [Startup]
    [Input]
    SelectedInput=KeyboardMouse2
    HighProfileToggle=0
    [KeyboardMouse1
    Vendor > Product > [KeyboardMouse2 DefaultBindings]
    Button1=57
    Button2=256
    Button3=47
    Button4=18
    PadUp=16
    PadRight=77
    PadDown=44
    PadLeft=75
    Select=15
    Start=1
    ShoulderLeft1=29
    ShoulderLeft2=257
    ShoulderRight1=42
    ShoulderRight2=33
    StickLeft=19
    StickRight=46
    BindableButton01=2
    BindableButton02=3
    BindableButton03=4
    BindableButton04=5
    BindableButton05=6
    BindableButton06=7
    BindableButton07=8
    BindableButton08=9
    BindableButton09=10
    BindableButton10=-1
    BindableButton11=-1
    BindableButton12=-1
    BindableButton13=-1
    BindableButton14=-1
    BindableButton15=-1
    BindableButton16=-1
    LeftStickUp=17
    LeftStickDown=31
    LeftStickLeft=30
    LeftStickRight=32
    RightStickUp=200
    RightStickDown=208
    RightStickLeft=203
    RightStickRight=205
    [KeyboardMouse5]
    Vendor > Product > [KeyboardMouse5 DefaultBindings]
    Button1=259
    Button2=256
    Button3=18
    Button4=260
    PadUp=3
    PadRight=4
    PadDown=5
    PadLeft=2
    Select=15
    Start=1
    ShoulderLeft1=33
    ShoulderLeft2=20
    ShoulderRight1=257
    ShoulderRight2=16
    StickLeft=10
    StickRight=46
    BindableButton01=-1
    BindableButton02=-1
    BindableButton03=-1
    BindableButton04=-1
    BindableButton05=-1
    BindableButton06=-1
    BindableButton07=-1
    BindableButton08=-1
    BindableButton09=-1
    BindableButton10=-1
    BindableButton11=-1
    BindableButton12=-1
    BindableButton13=-1
    BindableButton14=-1
    BindableButton15=-1
    BindableButton16=-1
    LeftStickUp=17
    LeftStickDown=31
    LeftStickLeft=30
    LeftStickRight=32
    RightStickUp=200
    RightStickDown=208
    RightStickLeft=203
    RightStickRight=205
    [Keyboard]
    Vendor > Product > [Keyboard DefaultBindings]
    Button1=76
    Button2=72
    Button3=73
    Button4=77
    PadUp=82
    PadRight=81
    PadDown=80
    PadLeft=79
    Select=15
    Start=1
    ShoulderLeft1=33
    ShoulderLeft2=20
    ShoulderRight1=78
    ShoulderRight2=16
    StickLeft=10
    StickRight=75
    BindableButton01=-1
    BindableButton02=-1
    BindableButton03=-1
    BindableButton04=-1
    BindableButton05=-1
    BindableButton06=-1
    BindableButton07=-1
    BindableButton08=-1
    BindableButton09=-1
    BindableButton10=-1
    BindableButton11=-1
    BindableButton12=-1
    BindableButton13=-1
    BindableButton14=-1
    BindableButton15=-1
    BindableButton16=-1
    LeftStickUp=17
    LeftStickDown=31
    LeftStickLeft=30
    LeftStickRight=32
    RightStickUp=200
    RightStickDown=208
    RightStickLeft=203
    RightStickRight=205
    [KeyboardAlt]
    Vendor > Product > [KeyboardAlt DefaultBindings]
    Button1=57
    Button2=48
    Button3=18
    Button4=49
    PadUp=4
    PadRight=3
    PadDown=2
    PadLeft=5
    Select=15
    Start=1
    ShoulderLeft1=33
    ShoulderLeft2=20
    ShoulderRight1=50
    ShoulderRight2=16
    StickLeft=10
    StickRight=82
    BindableButton01=2
    BindableButton02=3
    BindableButton03=4
    BindableButton04=5
    BindableButton05=6
    BindableButton06=7
    BindableButton07=8
    BindableButton08=9
    BindableButton09=10
    BindableButton10=-1
    BindableButton11=-1
    BindableButton12=-1
    BindableButton13=-1
    BindableButton14=-1
    BindableButton15=-1
    BindableButton16=-1
    LeftStickUp=17
    LeftStickDown=31
    LeftStickLeft=30
    LeftStickRight=32
    RightStickUp=200
    RightStickDown=208
    RightStickLeft=203
    RightStickRight=205
    [KeyboardMouse2]
    Vendor > Product >

    First Person Shooter на Unity. Базовые функции FPS с простой физикой.

    С помощью этого префаба юнити можно очень просто создать «болванку» для персонажа игрока в трехмерной игре.

    Префаб First Person Controller находится в папке Standart Assets\Prefabs

    Этот компонент содержит:

    Character Controller – компонент, используемый в играх от третьего и первого лица. На этот компонент не действуют команды rigidbody-физики.

    * Height — высота капсульного коллайдера.
    * Radius — можно сказать, что это ширина коллайдера.
    * Slope Limit – здесь указывается наклон, на который сможет передвигаться коллайдер.
    * Step Offset – коллайдер сможет подняться на следующую ступень, только если она ближе к земле чем значение этой переменной.
    * Min Move Distance – если персонаж передвинулся на меньшее значение, чем в этой переменной, он не сдвинется с места. Чаще всего используется, чтобы уменьшить дрожание.
    * Skin width – два коллайдера могут проходить сквозь друг друга настолько, насколько равна эта переменная. Большое значение уменьшает дрожание, маленькое может привести к тому, что коллайдер будет застревать.
    * Center – центровка капсульного коллайдера.

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

    FPSWalker — скрипт, который отвечает за передвижение персонажа.

    * Speed — скорость передвижения персонажа.
    * JumpSpeed — высота прыжка персонажа.
    * Gravity — гравитация, которая действует только на персонаж во время прыжка.

    Для удобного доступа к переменным скрипта FPSWalker, я создаю управляющий скрипт (scr_player_status)(JavaScript)

    Этот скрипт ставится на главный объект префаба First Person Controller

    Теперь с помощью переменной fps_walker мы можем получить доступ к скорости, мощности прыжка и гравитации. st_moving – переменная-флаг.

    Чтобы продемонстрировать работу со скоростью, реализуем «уставание» – во время бега переменная, отвечающая за энергию, уменьшается. Низкая энергия приводит к низкой скорости.

    Вверху скрипта выразим две переменные

    Первая – это текущая энергия. Вторая – максимальный уровень энергии.

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

    fps_walker.grounded == true – это проверка на то, находится ли персонаж в воздухе. Мы же не хотим, чтобы персонаж терял энергию в прыжке?

    Нам нужно показывать количество очков энергии, поэтому добавим в наш скрипт функцию OnGUI()

    Теперь добавим в наш скрипт зависимость скорости от энергии:

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

    Теперь сделаем восстановление энергии в то время, когда персонаж стоит на месте

    Вот весь скрипт (ставьте его на главный объект префаба First Person Controller)

    Создание FPS — First Person Shooter(Unity3D) №1

    В серии уроков по Unity3D — «Создание шутера», мы поговрим о том, как создать свой собственный шутер. В этом уроке я расскажу о том, как сделать простой пистолет и «дать» его в руки игрока.
    Спасибо за просмотр!

    Все файлы к уроку, вы можете найти тут: http://dimak-stalker.ru/page/sozdanie-fps-first-person-shooterunity3d-1

    Наша группа в ВК: http://vk.com/proxorgames
    Я в ВК: http://vk.com/dima_proxor
    Наш сайт: http://dimak-stalker.ru/

    Видео Создание FPS — First Person Shooter(Unity3D) №1 канала Proxor Games Studio

    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих