שילוב Google VR SDK באפליקציות מובייל
משתמש מרכיב משקפי Cardboard ומפעיל את האפליקציה שלך — ורואה רק תמונה מפוצלת ללא אפקט סטריאוסקופי. נשמע מוכר? שילוב Google VR SDK (כיום Cardboard) דורש כיול מדויק של מעקב ראש, תיקון עיוות עדשות וטיפול בקוד QR. מעקב שגוי גורם לבחילת תנועה, ועדשות לא מכוילות הופכות את התמונה למטושטשת.
עזרנו לעשרות פרויקטים ליישם פונקציונליות VR — מהפעלת וידאו 360° פשוטה ועד סימולטורים אינטראקטיביים מלאים. המהנדסים שלנו מוסמכים על ידי Apple ו-Google, עם ניסיון של למעלה מ-5 שנים ב-VR. בשנים האחרונות השלמנו יותר מ-50 אינטגרציות: זמן החיסכון הממוצע ללקוחותינו הוא 30%, והחזר ההשקעה על השקעות VR יכול להגיע ל-6 חודשים בלבד. תיעוד Google Cardboard SDK ממליץ להתחיל עם פרויקט הדגמה.
למה Cardboard SDK עדיף על Google VR SDK שהוצא משימוש
ה-Google VR SDK המקורי (gvr-android-sdk) הוחלף ב-Google Cardboard SDK בקוד פתוח. אם הפרויקט שלך עדיין משתמש ב-com.google.vr.sdk הישן, אנו ממליצים לבצע הגירה. ה-Cardboard SDK החדש מתוחזק באופן פעיל: הוא מעבד מעקב פי שניים מהר יותר ומציע תיקון עיוות עדשות טוב יותר. בניגוד ל-SDK הישן, Cardboard תומך ב-iOS ויש לו קוד פתוח.
השוואה בין SDK הישן לחדש:
| פרמטר | Google VR SDK (ישן) | Cardboard SDK (חדש) |
|---|---|---|
| סטטוס | הוצא משימוש | מתוחזק באופן פעיל |
| פלטפורמות | Android, Unity | Android, iOS, Unity |
| עיבוד סטריאוסקופי | מובנה | מובנה + אופטימיזציות |
| תיקון עיוות עדשות | קיים | משופר |
| סריקת QR | Android בלבד | iOS ו-Android |
| קוד פתוח | לא | כן |
איך לשלב Cardboard SDK ב-Unity
הדרך הנפוצה ביותר היא דרך Unity Package Manager. בצע את השלבים הבאים:
- פתח את Window > Package Manager.
- הוסף חבילה מכתובת git:
https://github.com/googlevr/cardboard.git#upm. - חבר את רכיב
CardboardCameraלמצלמה הראשית. - הגדר פרמטרי מכשיר (QR או ידני).
ה-SDK מבצע אוטומטית:
- פיצול מסך לעיבוד סטריאוסקופי
- החלת תיקון עיוות עדשות
- קריאת מעקב ראש מה-IMU
- טיפול בכפתור ההפעלה
// Первый запуск: показываем UI для сканирования QR
void Start()
{
if (!CardboardQrCode.IsDeviceParamsSet())
{
Cardboard.SDK.ScanDeviceParams();
}
}
// Recenter по нажатию кнопки
void Update()
{
if (CardboardInput.GetButtonDown())
{
Cardboard.SDK.Recenter();
}
} אינטגרציה מקורית ב-Android (Java/Kotlin)
לאפליקציות מקוריות ללא Unity:
// build.gradle implementation 'com.google.cardboard:sdk:1.21.0' רכיבי SDK מרכזיים:
// Инициализация в Activity
private CardboardHeadTracker headTracker;
private CardboardLensDistortion lensDistortion;
private CardboardDistortionRenderer distortionRenderer;
@Override
protected void onCreate(Bundle savedInstanceState) {
CardboardSdk.initializeOnce(this, "your-app-name");
headTracker = CardboardHeadTracker.create();
// ...
}
// В render loop (вызывается из GLSurfaceView)
@Override
public void onDrawFrame(GL10 gl) {
long monotonic_time_ns = System.nanoTime();
float[] leftEyeViewMatrix = new float[16];
float[] rightEyeViewMatrix = new float[16];
headTracker.getPose(monotonic_time_ns, leftEyeViewMatrix, rightEyeViewMatrix);
distortionRenderer.renderEyeToDisplay(
/* display */ 0,
/* x */ 0,
/* y */ 0,
/* width */ displayWidth,
/* height */ displayHeight,
/* leftEyeParams */ leftEyeParams,
/* rightEyeParams */ rightEyeParams
);
} אינטגרציה מקורית ב-iOS (Swift)
// Podfile или SPM
pod 'GoogleCardboard', '~> 1.21'
import CardboardSDK
class VRViewController: UIViewController {
private var renderer: CardboardRenderer!
override func viewDidLoad() {
super.viewDidLoad()
CardboardQrCode.getSavedDeviceParams { [weak self] params in
if params == nil {
CardboardQrCode.scanQrCodeAndSaveDeviceParams(from: self)
}
self?.initRenderer()
}
}
} מה לעשות כשקוד ה-QR לא נסרק
סורק ה-QR נפתח בהפעלה הראשונה או לפי בקשה מפורשת. בעיות אפשריות:
- המשתמש סירב לסריקה → ה-SDK משתמש בפרמטרי ברירת מחדל של Cardboard v1. תיקון עיוות העדשות יהיה שגוי עבור משקפיים לא סטנדרטיים.
- קוד QR לא קריא (תאורה חלשה, קוד פגום) → ספק כפתור "הזנה ידנית" או "השתמש ב-Cardboard סטנדרטי".
- לאחר החלפת משקפיים → הוסף כפתור "החלף משקפיים" בהגדרות האפליקציה שקורא ל-
// Первый запуск: показываем UI для сканирования QR void Start() { if (!CardboardQrCode.IsDeviceParamsSet()) { Cardboard.SDK.ScanDeviceParams(); } } // Recenter по нажатию кнопки void Update() { if (CardboardInput.GetButtonDown()) { Cardboard.SDK.Recenter(); } }.
מסך מפוצל ומצב מסך מלא
ה-Cardboard SDK מצפה לכיוון לרוחב. ב-iOS, זה אומר לנעול את // build.gradle implementation 'com.google.cardboard:sdk:1.21.0' ל-// Инициализация в Activity private CardboardHeadTracker headTracker; private CardboardLensDistortion lensDistortion; private CardboardDistortionRenderer distortionRenderer; @Override protected void onCreate(Bundle savedInstanceState) { CardboardSdk.initializeOnce(this, "your-app-name"); headTracker = CardboardHeadTracker.create(); // ... } // В render loop (вызывается из GLSurfaceView) @Override public void onDrawFrame(GL10 gl) { long monotonic_time_ns = System.nanoTime(); float[] leftEyeViewMatrix = new float[16]; float[] rightEyeViewMatrix = new float[16]; headTracker.getPose(monotonic_time_ns, leftEyeViewMatrix, rightEyeViewMatrix); distortionRenderer.renderEyeToDisplay( /* display */ 0, /* x */ 0, /* y */ 0, /* width */ displayWidth, /* height */ displayHeight, /* leftEyeParams */ leftEyeParams, /* rightEyeParams */ rightEyeParams ); } . ב-Android, הגדר // Podfile или SPM pod 'GoogleCardboard', '~> 1.21' import CardboardSDK class VRViewController: UIViewController { private var renderer: CardboardRenderer! override func viewDidLoad() { super.viewDidLoad() CardboardQrCode.getSavedDeviceParams { [weak self] params in if params == nil { CardboardQrCode.scanQrCodeAndSaveDeviceParams(from: self) } self?.initRenderer() } } } ב-manifest וטפל ב-CardboardQrCode.scanQrCodeAndSaveDeviceParams() כדי למנוע יצירה מחדש של ה-activity.
חיתוכי מסך (notch, Dynamic Island) במצב לרוחב עלולים להסתיר חלק מתצוגת ה-VR. השתמש ב-UIInterfaceOrientationMask (Android) ו-.landscapeRight (iOS) כדי למקם נכון את אזור העיבוד.
בעיות אינטגרציה אופייניות
android:screenOrientation="landscape" בעת ההפעלה ב-Android — ה-GLSurfaceView לא מוכן כשמאתחלים את Cardboard. פתרון: אתחל ב-callback של onConfigurationChanged, לא ב-WindowInsets.displayCutout.
ה-SDK לא מתקמפל עם ה-NDK העדכני ביותר — Cardboard SDK כולל חלק C++ מקורי, שלעתים דורש safeAreaInsets מפורש ב-gradle.
ב-iOS 17+, IllegalStateException: Surface is not valid דורש surfaceCreated() ב-Info.plist — בלעדיו, האפליקציה קורסת בעת כניסה למצב VR.
מה כלול בעבודה שלנו
- ביקורת על הפרויקט הנוכחי: Unity או מקורי, תלויות, גרסאות מערכת הפעלה יעד
- אינטגרציית Cardboard SDK, הגדרת סריקת QR
- התאמת עיבוד: מסך מפוצל, עיוות עדשות, הקרנה סטריאוסקופית
- יישום אינטראקציית מבט וכפתור Cardboard
- בדיקות על מכשירים אמיתיים מיצרנים שונים (לפחות 5 דגמים)
- תיעוד אינטגרציה ותמיכה ל-30 יום
למה לבחור בנו
יישמנו פונקציונליות VR ביותר מ-50 פרויקטים. המהנדסים שלנו מוסמכים על ידי Apple ו-Google, ואנו מבצעים אינטגרציה במפתח מלא עם אחריות לאיכות. זמן החיסכון הממוצע ללקוחות הוא 30%, וחיסכון ממוצע בתקציב הבדיקות הוא 40%. צור קשר כדי לדון בפרויקט שלך — אנו מציעים הערכה ראשונית.
הערכות זמן
| סוג אינטגרציה | משך זמן |
|---|---|
| אינטגרציית Cardboard SDK בסיסית ב-Unity | מיומיים |
| אינטגרציה מקורית עם renderer מותאם אישית (Android/iOS) | 3 עד 5 ימים |
| אינטגרציה מורכבת עם ממשק מבט ואנליטיקה | מ-7 ימים |
קבל הערכה מדויקת לפרויקט שלך: פנה אלינו, ונעזור לך ליישם VR במהירות וללא טרחה.







