Розробка мобільної гри на SceneKit (iOS) — під ключ

Ми спеціалізуємося на розробці 3D-ігор для iOS з використанням нативного фреймворку SceneKit. Часто клієнти приходять з готовою ідеєю, але не знають, який технологічний стек обрати між Unity, Unreal та SceneKit. SceneKit — не Unity і не Unreal: немає візуального редактора pipeline, немає Asset Store

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Розробка мобільної гри на SceneKit (iOS) — під ключ
Складний
від 1 тижня до 3 місяців

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Ми спеціалізуємося на розробці 3D-ігор для iOS з використанням нативного фреймворку SceneKit. Часто клієнти приходять з готовою ідеєю, але не знають, який технологічний стек обрати між Unity, Unreal та SceneKit. SceneKit — не Unity і не Unreal: немає візуального редактора pipeline, немає Asset Store, менше готових рішень. Але це й не сирий Metal: фізичний рушій, анімації, shader модифікатори, AR-інтеграція через ARKit — все входить в SDK без сторонніх залежностей. Для iOS-ексклюзивних 3D-ігор середньої складності це цілком робочий варіант, особливо якщо команда глибоко в Swift/Objective-C.

Сцена, ноди, рендеринг

Базова одиниця — SCNNode. Сцена — дерево нодів: корінь SCNScene.rootNode, до нодів прикріплені геометрія (SCNGeometry), світло (SCNLight), камера (SCNCamera), фізичне тіло (SCNPhysicsBody). Відмінність від SpriteKit у тому, що SceneKit працює в 3D-просторі з координатами SCNVector3, а трансформації задаються через simd_float4x4 (або зручні властивості position, eulerAngles, simdTransform).

Завантаження сцени з .scn-файлу (редагується прямо в Xcode Scene Editor):

let scene = SCNScene(named: "GameLevel.scn")! let scnView = SCNView(frame: view.bounds) scnView.scene = scene scnView.allowsCameraControl = false scnView.rendersContinuously = true // важливо для анімацій view.addSubview(scnView) 

rendersContinuously = true — якщо не виставити, SCNView рендерить тільки при зміні сцени. Для ігор з постійним рухом потрібен постійний рендер. Зворотна сторона — споживання батареї. Для меню з рідкісними змінами залишаємо false.

Фізика та колізії в 3D

SCNPhysicsBody трьох типів: .static (нерухомі об'єкти, колайдер не рухається), .dynamic (під керуванням фізики), .kinematic (рухається кодом, ігнорує сили, але бере участь у колізіях). Персонаж гравця зазвичай kinematic — ми рухаємо його через код, але стіни та підлога його зупиняють.

Форма колайдера впливає на продуктивність сильніше, ніж у 2D. Використовуйте капсулу для персонажа, а не складну геометрію:

let capsule = SCNCapsule(capRadius: 0.3, height: 1.8) let physicsShape = SCNPhysicsShape(geometry: capsule, options: nil) player.physicsBody = SCNPhysicsBody(type: .kinematic, shape: physicsShape) 

Колізії обробляються через SCNPhysicsContactDelegate. Налаштовуйте categoryBitMask, collisionBitMask, contactTestBitMask — тільки для потрібних пар, щоб не перевантажувати didBegin.

Анімації: CAAnimation та SCNAnimationPlayer

Скелетна анімація імпортується з .dae (Collada). Перемикання між idle, run, jump робимо з blendInDuration для плавності:

func transition(to key: String, blendDuration: CGFloat = 0.3) { let player = characterNode.animationPlayer(forKey: key)! player.blendInDuration = blendDuration player.play() currentAnimationKey.flatMap { characterNode.animationPlayer(forKey: $0)?.stop(blendOutDuration: blendDuration) } currentAnimationKey = key } 

Без blendInDuration персонаж «стрибає» між позами — це перше, що помічає гравець.

Шейдери та постефекти

SceneKit дозволяє підключати GLSL/Metal шейдери через SCNMaterial.shaderModifiers. Типове застосування — розчинення об'єкта при смерті:

let dissolveShader = """ #pragma transparent #pragma body float threshold = u_dissolveAmount; float noise = ... // шум за координатами if (noise < threshold) discard_fragment(); _output.color.a = smoothstep(threshold - 0.05, threshold, noise); """ material.shaderModifiers = [.fragment: dissolveShader] 

SCNTechnique — для постобробки всього екрану (bloom, outline, depth of field). Конфігурується через plist-словник.

ARKit інтеграція

SceneKit — перший і основний рендерер для ARKit:

let arView = ARSCNView(frame: view.bounds) let config = ARWorldTrackingConfiguration() config.planeDetection = [.horizontal, .vertical] arView.session.run(config) 

ARSCNView автоматично синхронізує SCNScene з AR-координатним простором. Це основа для AR-ігор — ринок ARKit + SceneKit добре закритий прикладами Apple.

Як оптимізувати продуктивність SceneKit?

SCNView за замовчуванням використовує Metal на iOS 9+. Кілька правил, які реально впливають на fps.

Batching: SceneKit автоматично об'єднує draw calls для нодів з однаковим матеріалом. Тому 1000 дерев з одним матеріалом набагато дешевше, ніж 100 дерев з 100 різними матеріалами. Використовуй SCNMaterial інстанси, не створюй новий об'єкт матеріалу для кожного нода.

Level of Detail через SCNLevelOfDetail: для об'єктів на відстані більше 20 метрів можна показувати спрощену геометрію. Це знижує навантаження на GPU.

Occlusion culling: SceneKit робить frustum culling автоматично, але occlusion culling (приховування об'єктів за іншими об'єктами) — ні. Для складних сцен це потрібно робити вручну через isHidden = true за результатами ray cast або логіки рівня.

Інструмент для профілювання: Xcode → Metal System Trace + Render Graph. Ціль — не більше 30–50 draw calls для гри зі стабільними 60 fps на iPhone X. На одному з проектів ми оптимізували рендеринг з 40 до 60 fps, зменшивши кількість draw calls вдвічі за рахунок об'єднання матеріалів.

Коли варто відмовитися від SceneKit?

Мультиплатформа (iOS + Android + PC) — Unity або Godot. Складна фізика тіл з деформацією — Unity з Havok. Масивні відкриті світи — теж Unity/Unreal. SceneKit хороший для iOS-ексклюзиву з помірною 3D-складністю, AR-додатків та ігор, де важлива нативна інтеграція (Game Center, CloudKit).

Процес роботи

  1. Аудит ТЗ: тип гри, чи потрібен AR, цільові пристрої, мінімальна версія iOS, асети.
  2. Прототип ігрової механіки: рух, фізика, базова камера — 1–2 тижні.
  3. Core gameplay: рівні, вороги/перешкоди, UI (SwiftUI поверх SCNView).
  4. Аудіо: AVAudioEngine для 3D-звуку.
  5. Інтеграція Game Center, IAP, ARKit.
  6. Полірування продуктивності, тестування на слабких пристроях.

Що входить в роботу

  • Вихідний код з коментарями
  • Документація по архітектурі та збірці
  • Тестовий білд через TestFlight
  • Публікація в App Store (аккаунт розробника надається клієнтом)
  • Гарантійна підтримка 30 днів після релізу

Орієнтири по термінах

Тип проекту Термін
Прототип / proof of concept 2–3 тижні
Казуальна 3D-гра без AR 1,5–2 місяці
3D-гра з AR + Game Center 2–3 місяці
Складний проект (відкритий світ, мультиплеєр) Обговорюється окремо

Вартість розраховується індивідуально після аналізу ТЗ та наявності готових асетів.

Наш досвід: реалізували більше 10 3D-проектів на SceneKit, включаючи AR-додатки з високою продуктивністю. Всі проекти пройшли модерацію App Store без відхилень.

Пишіть — оцінимо ваш проект за 1 робочий день. Розробка під ключ з нуля до публікації. Офіційна документація Apple по SceneKit.