Як перемикати камери в Юніті




Як перемикати камери в Юніті



Камера

Камери є пристроями, які захоплюють та відображають світ гравцю. Шляхом налаштування та маніпулювання камерами, ви можете зробити презентацію своєї гри справді унікальною. Ви можете мати необмежену кількість камер у сцені. Ви можете налаштувати рендеринг камерами в будь-якому порядку, на будь-якому місці екрана або лише в певних частинах екрану.

Властивості

Властивість: Функція:
Clear Flags Визначає, які частини екрана буде очищено. Це зручно при використанні декількох камер для відображення різних елементів гри.
Background Колір, що застосовується для фону після відтворення всіх елементів, у разі відсутності скайбоксу.
###Маска відрізання Увімкнення або вилучення шарів об'єктів на рендер цією камерою. Призначення шарів об'єктам провадиться через Inspector.
Projection Перемикає здатність камери симулювати перспективу.
X Камера малюватиме об'єкти в перспективі.
X Камера буде знімати об'єкти uniformly, з небезпекою. NOTE: Відмінний рендеринг не підтримується в ортографічному режимі. Forward rendering is always used.
Size (коли вибрано ортографічний режим) Розмір зони видимості камери для ортографічного режиму.
Field of view (коли вибрано режим перспективи) Ширина кута огляду камери вимірюється в градусах по локальній осі Y.
###Clip Planes (Площини відрізу) Дистанція, на якій камера починає та закінчує рендеринг.
X Найближча точка щодо камери, яка малюватиметься.
X Дальня точка щодо камери, яка малюватиметься.
Normalized View Port Rect Чотири значення, що відображають те, в якій області екрана буде виведено зображення з камери, в екранних координатах (від 0 до 1).
X Початкова позиція області по горизонталі виду камери, що малюватиметься.
Y Початкова позиція області по вертикалі, де вигляд камери малюватиметься.
W (Ширіна) Ширина подання камери на екрані.
H (Висота) Висота камери на екрані.
Depth Позиція камери в черзі малювання. Камери з великим значенням будуть намальовані поверх менших камер.
###Спосіб рендеру Опції визначення методів рендерингу для камери.
X Камера використовує метод рендерингу, встановлений у Player Settings.
Вершинне освітлення Всі об'єкти, що малюються цією камерою, будуть рендеруватись як Vertex-Lit-об'єкти.
X Всі об'єкти будуть рендеруватись з одним проходом на матеріал.
Deferred Lighting (тільки в Unity Pro) Всі об'єкти будуть рендеруватись спочатку без освітлення, а потім буде проведений рендер освітлення для всіх об'єктів разом, наприкінці черги рендерингу.
Target Texture Посилання на Render Texture, яка міститиме результат рендерингу камери. Призначення цього посилання вимикає здатність камери рендерувати на екран.
HDR Увімкнення технології High Dynamic Range.
Target Display Defines which external device to render to. Between 1 і 8.

Деталі

Камери є дуже важливими для демонстрації вашої гри гравцю. Вони можуть бути змінені, заскриптовані, успадковані для отримання різноманітних візуальних ефектів. Для паззла ви можете зробити камеру статичною та охоплюючою оглядом весь паззл. Для шутера від першої особи ви можете зробити камеру дочірньою по відношенню до гравця та розмістити її на рівні очей персонажа. Для гоночної гри ви можете закріпити камеру за автомобілем і змусити її слідувати за ним.

Ви можете створити кілька камер і призначити кожній свою глибину (Depth). Камери будуть малюватись від нижчої глибини до вищої глибини. Іншими словами, камера з Depth 2 буде відображена поверх камери з Depth 1. Ви можете налаштувати значення властивості Normalized View Port Rectangle для зміни позиції та розміру зображення з камери на екрані, наприклад, для створення декількох екранів в одному, або для створення дзеркала заднього виду.

Спосіб рендеру

Unity підтримує різні способи рендерингу. Ви повинні вибрати один з них, залежно від вмісту вашої гри та цільової платформи / апаратного забезпечення.Різні методи рендерингу підтримують різні можливості та дають різну продуктивність, особливо в аспекті застосування тіней та джерел світла. Метод рендерингу, який використовується у вашому проекті, вибирається у Player Settings. Додатково свій метод рендерингу можна вибрати для кожної камери.

Див. способи рендерингу для отримання всіх подробиць.

Clear Flags

Кожна камера зберігає інформацію про колір та глибину, коли рендерує свій вигляд. За замовчуванням незаповнені частини екрана будуть показані у вигляді скайбоксу. При використанні декількох камер кожна камера матиме свої буфери кольору та глибини, що заповнюються при кожному рендерингу. Кожна камера буде рендерувати те, що видно з ракурсу, а шляхом зміни налаштування Clear Flags можна вибрати набір буферів, які будуть оновлені (очищені), під час рендерингу. Це здійснюється вибором одного з чотирьох варіантів:

Skybox

Це стандартне налаштування. Порожні ділянки екрана відображатимуть скайбокс поточної камери. Якщо поточна камера не має скайбоксу, то скайбокс буде використаний стандартний скайбокс із меню Render Settings (Edit->Render Settings). Якщо і там не буде вказано скайбокс, то буде використано колір Background Color. Також до камери можна додати компонент Skybox. Якщо ви хочете створити новий скайбокс, див. посібник.

Solid color

Будь-які порожні частини екрана відображатимуть поточний фоновий колір (Background Color) камери.

Тільки глибина

Якщо ви хочете малювати зброю гравця, не обрізуючи об'єктами оточення, всередині яких вона знаходиться, встановіть одну камеру, яка малює оточення, з Depth 0, і ще одну камеру, що малює зброю — Depth 1. Для камери зброї виберіть Clear Flags depth only . Це дозволить відобразити оточення на екрані, але проігнорувати всю інформацію про взаємне становище предметів у просторі.Коли зброя буде відмальована, непрозорі частини будуть повністю відмальовані на екрані поверх зображення, що раніше знаходилося там, незалежно від того, наскільки близько зброя знаходиться до стіни.

Зброя відмальована останньою після очищення буфера глибини камери, що передувала.

Чи не очищати

У цьому режимі не очищаються ні колір, ні буфер глибини. В результаті кожен кадр малюється поверх іншого, через що вийде ефект розмиття. Це зазвичай не використовується в іграх, і краще використовувати разом з шейдером користувача.

Clip Planes (Площини відрізу)

Near і Far Clip Plane - властивості, що визначають, де починається і закінчується область відтворення камери. Ця область обмежується площинами, перпендикулярними до напрямку камери, і що знаходилися в цих позиціях щодо неї. Near Plane – це найближча позиція, а Far Plane – дальня позиція.

Площини визначають точність буфера глибини. Для забезпечення найвищої точності вам слід відсунути Near Plane так далеко, наскільки це можливо.

Зверніть увагу, що ці площини разом визначають поле зору камери, яке відоме як фрустум. Unity гарантує, що об'єкти, що повністю знаходяться за межами фрустуму, не відображатимуться. Це називається Frustum Culling та це спрацьовує незалежно від Occlusion Culling.

З міркувань продуктивності ви можете припиняти малювання дрібних об'єктів раніше, ніж відображення інших. Для цього помістіть їх у separate layer та налаштуйте дистанцію обрізки для цього шару, використовуючи функцію Camera.layerCullDistances.

Маска відрізання

Culling Mask використовується для вибіркового рендерингу груп об'єктів за допомогою шарів. Більше інформації про використання шарів можна знайти тут.

Normalized Viewport Rectangles

Normalized Viewport Rectangles призначений для визначення частини екрана, на якій буде відображено зображення з камери.Ви можете, наприклад, вставити зображення карти в нижній правий кут екрана, а вид з камери на випущеній ракеті - у лівий верхній кут. Трохи попрацювавши над дизайном, використовуючи Viewport Rectangle, ви зможете створити деякі унікальні системи.

Дуже просто створити роздільний екран для двох гравців, використовуючи Normalized Viewport Rectangle. Після створення двох камер, встановіть обом камерам властивість H значення 0.5 і для однієї з них властивість Y значення 0.5, а для іншої — значення 0. У результаті, перша камера буде малювати зображення у верхній половині екрана, а друга камера — в нижній половині екрану.

Створення екрану для двох гравців за допомогою Normalized ViewportRectangle

Orthographic

Переключивши камеру в ортографічний (Orthographic) режим, ви усунете всю перспективу з зображення, що відтворюється їй. Це корисно для створення двовимірних та ізометричних ігор.

Зауважте, що туман малюється при цьому рівномірно, так що може виглядати не так, як ви очікували. Прочитайте довідку про Render Settings для отримання подробиць.

Перспективні камери. Ортографічна камера. Зображення об'єктів не зменшується зі збільшенням дистанції.

Текстура рендеру

Ця можливість доступна лише у розширених ліцензіях Unity. Вона дозволяє малювати зображення з камери в текстуру (Texture), яка може бути застосована до іншого ігрового об'єкта. Це робить простим створення спортивної арени з відеомоніторами, камери спостереження, відбиття тощо.

Використання рендертекстури для створення монітора

Target display

A camera has up to 8 target display settings. Камера може бути керована до переміщення до одного з вгору до 8-х monitors. Це підтримується тільки на PC, Mac і Linux. У Game View chosen display в Camera Inspector буде shown.

Поради

  • Камери можуть бути викликані, призначені дочірнім об'єктом та заскриптовані як будь-який інший ігровий об'єкт
  • Для ефекту прискорення гоночної гри використовуйте підвищений Field of View .
  • Камери можна використовувати для симуляції фізики, якщо до них додати компонент Rigidbody .
  • Немає обмеження на кількість камер у сцені.
  • Ортографічні камери відмінно підходять для створення 3D інтерфейсів користувача
  • Якщо ви спостерігаєте артефакти глибини (миготять близькі поверхні), спробуйте виставити Near Plane в максимально можливе значення.
  • Камери не можуть рендерувати одночасно на екран і Render Texture, тільки в одне з них.
  • Pro-ліцензія надає функцію названу Render-to-Texture, яка дозволяє рендерувати камеру в текстуру для ще більш унікальних ефектів.
  • Unity поставляється з встановленими скриптами для керування камерою, їх можна знайти в Components-> Camera Control. Поекспериментуйте з ними, щоб дізнатися про їхні можливості.

Camera

Камери є пристроями, які захоплюють та відображають світ гравцю. Шляхом налаштування та маніпулювання камерами, ви можете зробити презентацію своєї гри справді унікальною. Ви можете мати необмежену кількість камер у сцені. Ви можете налаштувати рендеринг камерами в будь-якому порядку, на будь-якому місці екрана або лише в певних частинах екрану.

Unity displays різні properties в Camera Inspector depending on render pipeline, що ваш проект використовує.

  • Якщо ви використовуєте Universal Render Pipeline (URP), натисніть на URP package documentation microsite.
  • Якщо ваш проект використовує High Definition Render Pipeline (HDRP), натисніть на HDRP package documentation microsite.
  • Якщо ваші проекти використовуються в будівництві Render Pipeline, Unity displays following properties:

Властивість: Функція:
Clear Flags Визначає, які частини екрана буде очищено. Це зручно при використанні декількох камер для відображення різних елементів гри.
Background Колір, що застосовується для фону після відтворення всіх елементів, у разі відсутності скайбоксу.
###Маска відрізання Увімкнення або вилучення шарів об'єктів на рендер цією камерою.Призначення шарів об'єктам провадиться через Inspector.
Projection Перемикає здатність камери симулювати перспективу.
X Камера малюватиме об'єкти в перспективі.
X Камера буде знімати об'єкти uniformly, з небезпекою. NOTE: Відмінний рендеринг не підтримується в ортографічному режимі. Forward rendering is always used.
Size (коли обрано ортографічний режим) Розмір зони видимості камери для ортографічного режиму.
FOV Axis (Коли Perspective is selected) Field of view axis.
Horizontal The Camera використовує horizontal field of view axis.
Vertical The Camera використовує vertical field of view axis.
Field of view (коли вибрано режим перспективи) The Camera's view angle, measured in degrees along the axis specified in the FOV Axis drop-down.
Physical Camera Клацніть цей box для забезпечення Physical Camera properties for this camera.

When the Physical Camera properties are enabled, Unity calculates the Field of View використовуючи properties що simulate real-world camera attributes: Focal Length, Sensor Size, and Lens Shift.

Lower values ​​result in a wider Field of View, and vice versa.

When you choose camera формат, Unity sets the Sensor Size > X and Y properties to the correct values ​​автоматично.

Ви можете використовувати lens shifts to correct distortion that occurs when the camera is at angle to the subject (for example, converging parallel lines).

Якщо sensor aspect ratio є значним, ніж гра view aspect ratio, Unity crops rendered image at the sides.

Якщо sensor aspect ratio є smaller , ніж гра view aspect ratio, Unity overscans rendered image at the sides.

Якщо sensor aspect ratio є значним, ніж гра view aspect ratio, Unity overscans rendered image on the top and bottom.

Якщо sensor aspect ratio є витонченим, ніж гра view aspect ratio, Unity crops rendered image on the top and bottom.

Деталі

Камери є дуже важливими для демонстрації вашої гри гравцю.Вони можуть бути змінені, заскриптовані, успадковані для отримання різноманітних візуальних ефектів. Для паззла ви можете зробити камеру статичною та охоплюючою оглядом весь паззл. Для шутера від першої особи ви можете зробити камеру дочірньою по відношенню до гравця та розмістити її на рівні очей персонажа. Для гоночної гри ви можете закріпити камеру за автомобілем і змусити її слідувати за ним.

Ви можете створити кілька камер і призначити кожній свою глибину (Depth). Камери будуть малюватись від нижчої глибини до вищої глибини. Іншими словами, камера з Depth 2 буде відображена поверх камери з Depth 1. Ви можете налаштувати значення властивості Normalized View Port Rectangle для зміни позиції та розміру зображення з камери на екрані, наприклад, для створення декількох екранів в одному, або для створення дзеркала заднього виду.

Спосіб рендеру

Unity supports different rendering paths. Ви повинні вибрати, що один ви використовуєте залежно від вашого content і target platform / hardware. Різні реndering paths мають різні особливості і продуктивність характеристик, що найбільш ефективні lights і shads. Rendering path used by your Project is chosen in the Player settings. Додатково, ви можете перевірити його для всіх Camera.

Див. способи рендерингу для отримання всіх подробиць.

Clear Flags

Кожна камера зберігає інформацію про колір та глибину, коли рендерує свій вигляд. За замовчуванням незаповнені частини екрана будуть показані у вигляді скайбоксу. При використанні декількох камер кожна камера матиме свої буфери кольору та глибини, що заповнюються при кожному рендерингу. Кожна камера буде рендерувати те, що видно з ракурсу, а шляхом зміни налаштування Clear Flags можна вибрати набір буферів, які будуть оновлені (очищені), під час рендерингу. Це здійснюється вибором одного з чотирьох варіантів:

Skybox

Це є default setting. Any empty portions of the screen will display the current Camera's skybox.Якщо поточна камера має не skybox set, він буде повторювати на skybox chosen in the lighting window (menu: Window > Rendering > Lighting Settings). It will then fall back to the Background Color. Також Skybox компонент може бути приєднаний до камери. Якщо ви хочете створити новий Skybox, ви можете використовувати цей інструмент.

Solid color

Будь-які порожні частини екрана відображатимуть поточний фоновий колір (Background Color) камери.

Тільки глибина

Якщо ви хочете малювати зброю гравця, не обрізуючи об'єктами оточення, всередині яких вона знаходиться, встановіть одну камеру, що малює оточення, з Depth 0, і ще одну камеру, що малює зброю Depth 1. Для камери зброї виберіть Clear Flags depth only. Це дозволить відобразити оточення на екрані, але проігнорувати всю інформацію про взаємне становище предметів у просторі. Коли зброя буде відмальована, непрозорі частини будуть повністю відмальовані на екрані поверх зображення, що раніше знаходилося там, незалежно від того, наскільки близько зброя знаходиться до стіни.

Зgun is drawn last, після clearing depth buffer of the cameras before it

Чи не очищати

У цьому режимі не очищаються ні колір, ні буфер глибини. В результаті кожен кадр малюється поверх іншого, через що вийде ефект розмиття. Це зазвичай не використовується в іграх, і краще використовувати разом з шейдером користувача.

Зверніть увагу, що на деяких GPUs (більше мобільних GPUs), не вибираючи екранний короткий результат в вмісті його буде визначено в подальшому кадрі. На деяких системах, на екрані може бути розташований попередній кадр зображення, на solid black screen, або random colored pixels.

Clip Planes (Площини відрізу)

Near і Far Clip Plane - властивості, що визначають, де починається і закінчується область відтворення камери. Ця область обмежується площинами, перпендикулярними до напрямку камери, і що знаходилися в цих позиціях щодо неї. Near Plane — це найближча позиція, а Far Plane - Далека позиція.

Площини визначають точність буфера глибини. Для забезпечення найвищої точності вам слід відсунути Near Plane так далеко, наскільки це можливо.

Зверніть увагу, що ці площини разом визначають поле зору камери, яке відоме як фрустум. Unity гарантує, що об'єкти, що повністю знаходяться за межами фрустуму, не відображатимуться. Це називається Frustum Culling та це спрацьовує незалежно від Occlusion Culling.

З міркувань продуктивності ви можете припиняти малювання дрібних об'єктів раніше, ніж відображення інших. Для цього помістіть їх у separate layer та налаштуйте дистанцію обрізки для цього шару, використовуючи функцію Camera.layerCullDistances.

Маска відрізання

Culling Mask використовується для вибіркового рендерингу груп об'єктів за допомогою шарів. Більше інформації про використання шарів можна знайти тут.

Normalized Viewport Rectangles

Normalized Viewport Rectangles призначено для визначення частини екрана, на якій буде відображено зображення камери. Ви можете, наприклад, вставити зображення карти в нижній правий кут екрана, а вид з камери на випущеній ракеті - у лівий верхній кут. Небагато попрацювавши над дизайном, використовуючи Viewport Rectangle, Ви зможете створити деякі унікальні системи.

Дуже просто створити роздільний екран для двох гравців, використовуючи Normalized Viewport Rectangle. Після створення двох камер, встановіть обом камерам властивість H значення 0.5 і для однієї з них властивість Y значення 0.5, а для іншої — значення 0. У результаті, перша камера буде малювати зображення у верхній половині екрана, а друга камера — в нижній половині екрану.

Два-player display створені з Normalized Viewport Rectangle property

Orthographic

Переключивши камеру в ортографічніOrthographic) режим, ви усунете всю перспективу з зображення, що відтворюється їй. Це корисно для створення двовимірних та ізометричних ігор.

Зауважте, що туман малюється при цьому рівномірно, так що може виглядати не так, як ви очікували. Прочитайте довідку про Render Settings для отримання подробиць.

Perspective Camera. Ortographic camera. Objects do not get smaller with distance here!

Текстура рендеру

Ця можливість доступна лише у розширених ліцензіях Unity. Вона дозволяє малювати зображення з камери в текстуру (Texture), яка може бути застосована до іншого ігрового об'єкта. Це робить простим створення спортивної арени з відеомоніторами, камери спостереження, відбиття тощо.

A Render Texture використаний для створення live arena-cam

Target display

A camera has up to 8 target display settings. Камера може бути керована до переміщення до однієї з вгору до 8-х monitors. Це підтримується тільки на PC, Mac і Linux. У Game View chosen display в Camera Inspector буде shown.

  • 2018–10–05 Page amended
  • Physical Camera options added in Unity 2018.2
  • Gate Fit options added in Unity 2018.3

Фото- та відеокамера в Unity

Можливість WebCam має бути оголошена для програми, щоб використовувати камеру.

  1. У редакторі Unity перейдіть до параметрів програвача, перейшовши на сторінку "Змінити > програвач параметрів > проекту"
  2. Перейдіть на вкладку "Магазин Windows"
  3. У розділі "Можливості публікації параметрів>" перевірте можливості веб-камери і мікрофона

Одночасно з камерою може виконувати лише одна операція. Ви можете перевірити, в якому режимі камера знаходиться в даний час у UnityEngine.XR.WSA.WebCam.Mode Unity 2018 і раніше версіях або UnityEngine.Windows.WebCam.Mode в Unity 2019 і пізніших версій. Доступні режими: фото, відео чи ні.

Фотозйомка

Простір імен (до Unity 2019): UnityEngine.XR.WSA.WebCam
Простір імен (Unity 2019 та пізніші версії): UnityEngine.Windows.WebCam
Тип: PhotoCapture

Тип PhotoCapture дозволяє сфотографуватися з фотокамерою. Загальний шаблон використання PhotoCapture для створення фотографії виглядає так:

  1. Створення об'єкту PhotoCapture
  2. Створення об'єкта CameraParameters з потрібними параметрами
  3. Запуск режиму фотографії за допомогою StartPhotoModeAsync
  4. Зробіть фотографію, яку ви хочете
    • (необов'язково) Взаємодія з цим малюнком
  5. Зупинення режиму фото та очищення ресурсів

Загальне налаштування для PhotoCapture

Для всіх трьох використовується, почніть з одного і того ж першого трьох кроків вище

Почніть із створення об'єкта PhotoCapture

private void Start()

Потім збережіть об'єкт, задайте параметри та запустіть режим фото

private PhotoCapture photoCaptureObject = null; void OnPhotoCaptureCreated(PhotoCapture captureObject) < photoCaptureObject = captureObject; Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) =>res.width * res.height).First(); CameraParameters c = new CameraParameters(); c.hologramOpacity = 0.0f; c.cameraResolutionWidth = cameraResolution.width; c.cameraResolutionHeight = cameraResolution.height; c.pixelFormat = CapturePixelFormat.BGRA32; captureObject.StartPhotoModeAsync(c, false, OnPhotoModeStarted); >

Зрештою, ви також будете використовувати той же код очищення, представлений тут.

void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result)

Після виконання цих дій можна вибрати тип знімка для запису.

Запис фотографії у файл

Найпростіша операція полягає в тому, щоб записати фотографію безпосередньо у файл. Фотографію можна зберегти у форматі JPG або PNG.

Якщо ви успішно запустили режим фотографії, зробіть фотографію та збережіть її на диску

private void OnPhotoModeStarted(PhotoCapture.PhotoCaptureResult result) < if (result.success) < string filename = string.Format(@"CapturedImage_n.jpg", Time.time); string filePath = System.IO.Path.Combine(Application.persistentDataPath, filename); photoCaptureObject.TakePhotoAsync(filePath, PhotoCaptureFileOutputFormat.JPG, OnCapturedPhotoToDisk); > else < Debug.LogError("Unable to start photo mode!"); >>

Після запису фотографії на диск вийдіть із режиму фотографії, а потім очистіть об'єкти.

void OnCapturedPhotoToDisk(PhotoCapture.PhotoCaptureResult result) < if (result.success) < Debug.Log("Saved Photo to disk!"); photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode); >else < Debug.Log("Failed to save Photo to disk"); >>

Запис фотографії в Текстур2D з розташуванням

При записі даних у текстур2D процес аналогічний захопленню на диск.

Виконайте наведений вище процес установки.

У OnPhotoModeStarted зафіксувати кадр на згадку.

private void OnPhotoModeStarted(PhotoCapture.PhotoCaptureResult result) < if (result.success) < photoCaptureObject.TakePhotoAsync(OnCapturedPhotoToMemory); >else < Debug.LogError("Unable to start photo mode!"); >>

Потім ви застосуєте результат до текстури та використовуйте загальний код очищення вище.

void OnCapturedPhotoToMemory(PhotoCapture.PhotoCaptureResult result, PhotoCaptureFrame photoCaptureFrame) < if (result.success) < // Створити нашу Texture2D для використання і налаштування відповідного рішенняResolution cameraResolution(PhotoCapture.Support. =>res.width * res.height).First(); Texture2D targetTexture = новий Texture2D(cameraResolution.width, cameraResolution.height); // Copy the raw image data in our target texture photoCaptureFrame.UploadImageDataToTexture(targetTexture); // Do as we wish with the texture such as apply it to a material, etc. > // Clean up photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode); >

Камера з місцем розташування

Щоб помістити цю текстуру в сцену і відобразити її за допомогою матриць камери з невловимими, додайте наступний код OnCapturedPhotoToMemory у перевірці result.success :

if (photoCaptureFrame.hasLocationData)

Unity надав приклад коду для застосування матриці проекції до певного шейдера на форумах.

Запис фотографії та взаємодія з необробленими байтами

Щоб взаємодіяти з необробленими байтами кадру пам'яті, виконайте ті ж дії з налаштування, що й в OnPhotoModeStarted як при записі фотографії в Texture2D. Різниця у OnCapturedPhotoToMemory де можна отримати необроблені байти і взаємодіяти з ними.

У цьому прикладі ви створите список для подальшої обробки або застосування до текстури за допомогою SetPixels()

void OnCapturedPhotoToMemory(PhotoCapture.PhotoCaptureResult result, PhotoCaptureFrame photoCaptureFrame) < if (result.success) < ListimageBufferList = новий List(); // Copy the raw IMFMediaBuffer data у наш empty byte list. photoCaptureFrame.CopyRawImageDataIntoBuffer(imageBufferList); // У цьому досліді, ми зображені зображення за допомогою формату BGRA32. // So our stride will be 4 since we have a byte for each rgba channel. // The raw image data will also be flipped so we access our pixel data // in the reverse order. int stride = 4; float denominator = 1.0f/255.0f; List colorArray = новий List(); for (int i = imageBufferList.Count - 1; i >= 0; i -= stride) < float a = (int) (imageBufferList [i - 0]) * denominator; float r = (int) (imageBufferList [i - 1]) * denominator; float g = (int) (imageBufferList [i - 2]) * denominator; float b = (int) (imageBufferList [i - 3]) * denominator; colorArray.Add(new Color(r, g, b, a)); >// Тепер ми можемо подумати про те, що array such as texture.SetPixels() or run image processing on the list > photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode); >

Запис відео

Простір імен (до Unity 2019): UnityEngine.XR.WSA.WebCam
Простір імен (Unity 2019 та пізніші версії): UnityEngine.Windows.WebCam
Тип: VideoCapture

Функції VideoCapture аналогічно PhotoCapture. Єдиними двома відмінностями є те, що необхідно вказати значення кадрів за секунду (FPS), і ви можете зберегти лише безпосередньо на диск у вигляді .mp4. Нижче наведено дії щодо використання VideoCapture .

  1. Створення об'єкту VideoCapture
  2. Створення об'єкта CameraParameters з потрібними параметрами
  3. Запуск режиму відео за допомогою StartVideoModeAsync
  4. Почати запис відео
  5. Зупинка запису відео
  6. Зупинення режиму відео та очищення ресурсів

Почніть із створення об'єкта VideoCapture VideoCapture m_VideoCapture = null;

Потім налаштуйте параметри для запису та запуску.

void OnVideoCaptureCreated(VideoCapture videoCapture) < if (videoCapture != null) < m_VideoCapture = videoCapture; Resolution cameraResolution = VideoCapture.SupportedResolutions.OrderByDescending((res) =>res.width * res.height).First(); float cameraFramerate = VideoCapture.GetSupportedFrameRatesForResolution(cameraResolution).OrderByDescending((fps) => fps).First(); CameraParameters cameraParameters = new CameraParameters(); cameraParameters.hologramOpacity = 0.0f; cameraParameters.frameRate = cameraFramerate; cameraParameters.cameraResolutionWidth = cameraResolution.width; cameraParameters.cameraResolutionHeight = cameraResolution.height; cameraParameters.pixelFormat = CapturePixelFormat.BGRA32; m_VideoCapture.StartVideoModeAsync(cameraParameters, VideoCapture.AudioState.None, OnStartedVideoCaptureMode); > else < Debug.LogError("Failed to create VideoCapture Instance!"); >>

Після запуску почніть запис

void OnStartedVideoCaptureMode(VideoCapture.VideoCaptureResult result) < if (result.success) < string filename = string.Format("MyVideo_.mp4", Time.time); string filepath = System.IO.Path.Combine(Application.persistentDataPath, filename); m_VideoCapture.StartRecordingAsync(filepath, OnStartedRecordingVideo); > >

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

void OnStartedRecordingVideo(VideoCapture.VideoCaptureResult result) < Debug.Log("Started Recording Video!"); / / We will stop the video from recording via other input such as timer or a tap, etc. >

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

// The user has signed to stop recording void StopRecordingVideo()

Після зупинки запису зупиніть режим відео та очистіть ресурси.

void OnStoppedRecordingVideo(VideoCapture.VideoCaptureResult result) < Debug.Log("Stopped Recording Video!"); m_VideoCapture.StopVideoModeAsync(OnStoppedVideoCaptureMode); >void OnStoppedVideoCaptureMode(VideoCapture.VideoCaptureResult result)

Усунення несправностей

  • Немає доступних дозволів
    • Переконайтеся, що у проекті вказана можливість WebCam .

    Наступний етап розробки

    Якщо ви стежите за етапом розробки Unity, який ми виклали, ви перебуваєте в розпал вивчення можливостей платформи Змішана реальність та API. Ви можете перейти до наступної статті:

    Або одразу перейдіть до розгортання програми на пристрої або емуляторі:

    Ви можете будь-коли повернутися до етапів розробки для Unity.

    Див. також

Схожі статті

  • Навіщо потрібний об'єктив для камери
  • Як знімають камери спостереження
  • Як перемикатися між особами у майнкрафті
  • Як вийти з камери у майнкрафті
  • Які 4 камери у серця
  • Як зробити налаштування камери на айфоні
  • Як відкрити доступ до веб-камери
  • Як подивитися зображення з веб-камери
  • Недавні статті

  • Як бродить зернова брага
  • Що робити якщо не засмагаєш на сонці чому засмага погано лягає на шкіру або перестає прилипати
  • Як швидко зняти гель лак без апарату
  • Як робиться Каті голови
  • Яка гребінець краще для об'єму
  • Чим роблять м'яку покрівлю
  • Чи можна залишати крем для обличчя на ніч
  • Де знаходиться датчик селектора
  • географія нашої діяльності
    вулиця Драгоманова, 27
    вул. Курчатова 1Б
    вул. Міцкевича 130
    вул. Лабунського, 1
    вул. Макарова-Пржевальського
    вул. Толстого 10
    вул. Грушевського 28
    вул. Перший промінь (Черняхівського)
    напишіть нам

    сообщение успешно отправлено
    x