Dynamic Photo Camera: in-game photos (UA)
  • DYNAMIC PHOTO CAMERA DOCS 🔰
  • 📷 Сторінка в Unity Asset Store
  • ▶️ Офіційний YouTube плейлист
  • 🤝 Discord підтримка
  • ⚡ Швидкий Посібник
  • ДАНІ
    • Основні компоненти
    • Встановлення і режими
    • Використання
    • Підтримка геймпадів
    • Демо та ідеї
  • Додатково
  • ДОПОМОГА
    • Промптинг & PDF
    • Поширені проблеми
    • Контакти
Powered by GitBook
On this page
  • Текстури, рендеринг, візуальні ефекти
  • UI, канвас, елементи інтерфейсу
  • Система введення
  • Демо сцена
  • Розпізнавання об’єктів
  • Розділений екран
  1. ДОПОМОГА

Поширені проблеми

PreviousПромптинг & PDFNextКонтакти

Last updated 26 days ago

Текстури, рендеринг, візуальні ефекти

⛔ Проблема: Фото не відображає світіння або інші ефекти камери, або не захоплює взагалі нічого. Виникає помилка: “RenderTexture. Create failed: colorFormat & depthStencilFormat cannot both be none”.

✅ Рішення 1: Знайдіть Scripts → PhotoSettings scriptable object та підберіть формат текстури зі списку, наприклад, DefaultHDR для ефекта Glow.

✅ Рішення 2 (через код): Відкрийте PhotoController.cs → MakeScrenshot(). Замініть рядок:

targetTexture = RenderTexture.GetTemporary(photoSettings.resWidth, photoSettings.resHeight);

на:

targetTexture = RenderTexture.GetTemporary(photoSettings.resWidth, photoSettings.resHeight, 24, RenderTextureFormat.DefaultHDR);

UI, канвас, елементи інтерфейсу

⛔ Проблема: Кнопки/фото не реагують на взаємодію. Префаб PhotoController містить свій Canvas з UI-елементами, які можуть накладатися на існуючі або навпаки.

✅ Рішення: Розпакуйте префаб. Перемістіть вміст UICanvas до існуючого Canvas.

Система введення

⛔ Проблема: При використанні нової системи введення може з'явитися помилка: “InvalidOperationException: You are trying to read Input using the UnityEngine…”.

✅ Рішення: Встановіть inputSystemType → New у компоненті InputController. Edit → Project Settings → Player → Active Input Handling у значення "both". Імпортуйте InputSystem в проект через Package Manager. Замініть EventSystem → StandaloneInputModule на InputSystemUIInputModule.

Демо сцена

⛔ Проблема: Матеріали у тестовій сцені не завантажуються належним чином.

✅ Рішення: Усі матеріали та текстури для демо сцени знаходяться у папці Materials і за замовчуванням використовують шейдер "Standard". Для проєктів на основі URP змініть шейдер на "URP/Lit" або будь-який інший сумісний.

Розпізнавання об’єктів

⛔ Проблема: Камера погано розпізнає об’єкти, особливо якщо є дрібні деталі або складні меші, які перекривають об’єкти. Наприклад, з цього ракурсу ключ перекривається мешем стійки.

✅ Рішення 1 (розпізнавати один точніше): Збільшіть trigger collider потрібного об'єкта, щоб він не перекривався іншими і краще розпізнавався. Зменшіть значення Sphere Radius у Photo Settings. Чим менше значення, тим тонший промінь, що підвищить точність розпізнавання об’єктів. Додатково ви можете налаштувати логіку методу RaycastCheck у файлі PhotoController.cs, щоб вона краще відповідала вашим потребам.

✅ Рішення 2 (розпізнавати один точніше): призначте спеціальний Layer об’єктам, що заважають, і вимкніть його з розпізнавання в Raycast Layers у PhotoSettings. Або призначте спеціальний Layer розпізнаваному об’єкту та вимкніть усі інші Layers для розпізнавання.

✅ Рішення 3 (розпізнавати всі і шукати серед них один): Використовуйте режим Multiple Objects в Input Controller, встановіть більші значення Sphere Radius і multiplayerPrecision для точного розпізнавання кожного видимого об'єкта. Перевіряйте, чи фото містить потрібний об'єкт.

Розділений екран

⛔ Проблема: У режимі розділеного екрана, де кожен гравець має власну фотокамеру, знімок може охоплювати лише чверть або половину екрана замість повноцінного зображення з однієї камери. ✅ Рішення: тимчасово встановити viewport поточної камери на повний екран (0,0,1,1) перед зйомкою (можливо, також тимчасово вимкнути всі інші камери на момент знімка), а після цього — повернути попередні налаштування. Приблизно ось так:


private void MakeScreenshot()
{
    // Створіть render texture з цільною роздільною здатністю для фото
    var targetTexture = RenderTexture.GetTemporary(
        photoSettings.resWidth,
        photoSettings.resHeight,
        24,
        photoSettings.renderTextureFormat);
   
    // Збережіть початкові значення цілі камери (target) та області перегляду (viewport rect)
    var originalTarget = currentCamera.targetTexture;
    var originalRect = currentCamera.rect;
   
    // Встановіть камеру так, щоб вона рендерила текстуру
    currentCamera.targetTexture = targetTexture;
   
    // Важливо: для розділеного екрана потрібно тимчасово задати камері рендер повної текстури
    // Це ключове виправлення — встановлюємо камеру на рендер усієї текстури
    currentCamera.rect = new Rect(0, 0, 1, 1);
   
    // Відрендеріть зображення з камери в текстуру
    currentCamera.Render();
   
    // Поверніть початкові налаштування камери
    currentCamera.targetTexture = originalTarget;
    currentCamera.rect = originalRect;
   
    // Продовжіть виконання свого коду для обробки отриманої текстури
    // ...
}

Або підберіть інший формат текстури, що підходить проекту. .

Список усіх можливих