Поширені проблеми
Текстури, рендеринг, візуальні ефекти

⛔ Проблема: Фото не відображає світіння або інші ефекти камери, або не захоплює взагалі нічого. Виникає помилка: “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;
// Продовжіть виконання свого коду для обробки отриманої текстури
// ...
}
Last updated