Quick Start (Unity)
Supported Environment
The recommended Unity editor version is
2019.x
.Minimum supported Android API level is
23
.Target Android API level is
30
.Minimum supported iOS Version is
11.0
.Minimum Xcode version is
13.3
.Camera permission
,Network permission
andNetwork connected environment
are required.Build target to REAL DEVICE
during the development process.
SeeSo SDK uses the front camera of the device
- For best performance, must check target architectures
ARM64
(Android/iOS) and select Scripting Backend toIL2CPP
(Android only).
Sample Project
Please go to the sample project page for the purpose of using it rather than implementing it.
Environment Set-ups
- Check the Development key.
- Check the SeeSo Unity package.
- Check the unity editor has recommended version.
- Check the Android Build Support module installation.
- Check the iOS Build Support module installation.
Sample App Implementation
Create the new unity project from unity editor.
Import the SeeSo Unity package to the project.
Implement
initGazeTracker
function in theStart()
function to initializeGazeTracker
immediately when the application is launched.The first factor of the
initGazeTracker
function is the development key generated from the SeeSo Console.The second factor of the
initGazeTracker
function is theinitializationCallback.onInitialized
delegate, to check the initialization result.// Start is called before the first frame update
void Start()
{
GazeTracker.initGazeTracker("YOUR_DEVELOPMENT_LICENSE_KEY", onInitialized);
}
void onInitialized(InitializationErrorType error)
{
if (error == InitializationErrorType.ERROR_NONE)
{
// Now GazeTracker is initialized
Debug.Log("onInitialized Success");
}
else
{
// GazeTracker is not initialized
Debug.Log("onInitialized Fail with reason : " + error);
}
}
Define
GazeCallback.onGaze
delegates, then callsetGazeCallback
function to register theGazeCallback.onGaze
delegates.void Start()
{
GazeTracker.initGazeTracker("YOUR_DEVELOPMENT_LICENSE_KEY", onInitialized);
}
void onInitialized(InitializationErrorType error)
{
if (error == InitializationErrorType.ERROR_NONE)
{
// Now GazeTracker is initialized
Debug.Log("onInitialized Success");
// Set GazeCallback to GazeTrakcer
GazeTracker.setGazeCallback(onGaze);
}
else
{
// GazeTracker is not initialized
Debug.Log("onInitialized Fail with reason : " + error);
}
}
void onGaze(GazeInfo gazeInfo)
{
Debug.Log("onGaze " + gazeInfo.timestamp + "," + gazeInfo.x + "," + gazeInfo.y + "," + gazeInfo.trackingState + "," + gazeInfo.eyeMovementState + "," + gazeInfo.screenState);
}Implement
startTracking
to start theGazeTracker
.void Start()
{
GazeTracker.initGazeTracker("YOUR_DEVELOPMENT_LICENSE_KEY", onInitialized);
}
void onInitialized(InitializationErrorType error)
{
if (error == InitializationErrorType.ERROR_NONE)
{
// Now GazeTracker is initialized
Debug.Log("onInitialized Success");
// Set GazeCallback to GazeTrakcer
GazeTracker.setGazeCallback(onGaze);
// Start Tracking
GazeTracker.startTracking();
}
else
{
// GazeTracker is not initialized
Debug.Log("onInitialized Fail with reason : " + error);
}
}
void onGaze(GazeInfo gazeInfo)
{
Debug.Log("onGaze " + gazeInfo.timestamp + "," + gazeInfo.x + "," + gazeInfo.y + "," + gazeInfo.trackingState + "," + gazeInfo.eyeMovementState + "," + gazeInfo.screenState);
}startTracking
will be executed async. To get the correct execution result of thestartTracking
function, you should defineStatusCallback.onStarted
andStatusCallback.onStopped
, then callsetStatusCallback
to register them to theGazeTracker
.void Start()
{
GazeTracker.initGazeTracker("YOUR_DEVELOPMENT_LICENSE_KEY", onInitialized);
}
void onInitialized(InitializationErrorType error)
{
if (error == InitializationErrorType.ERROR_NONE){
// Now GazeTracker is initialized
Debug.Log("onInitialized Success");
// Set StatusCallback to GazeTrakcer
GazeTracker.setStatusCallback(onStarted, onStopped);
// Set GazeCallback to GazeTrakcer
GazeTracker.setGazeCallback(onGaze);
// Start Tracking
GazeTracker.startTracking();
}
else
{
// GazeTracker is not initialized
Debug.Log("onInitialized Fail with reason : " + error);
}
}
void onStarted()
{
Debug.Log("Tracking is started");
}
void onStopped(StatusErrorType error)
{
Debug.Log("Tracking is stopped with reason : " + error);
}
void onGaze(GazeInfo gazeInfo)
{
Debug.Log("onGaze " + gazeInfo.timestamp + "," + gazeInfo.x + "," + gazeInfo.y + "," + gazeInfo.trackingState + "," + gazeInfo.eyeMovementState + "," + gazeInfo.screenState);
}At last, SeeSo Unity application requires camera permission. Initialize the
GazeTracker
with theinitGazeTracker
function after camera permission is allowed.#if UNITY_ANDROID
using UnityEngine.Android;
#elif UNITY_IOS
using System.Runtime.InteropServices;
#endif
#if UNITY_IOS
[DllImport("__Internal")]
private static extern bool hasiOSCameraPermission();
[DllImport("__Internal")]
private static extern void requestiOSCameraPermission();
#endif
void Start()
{
#if UNITY_ANDROID
if (HasCameraPermission())
{
GazeTracker.initGazeTracker("YOUR_DEVELOPMENT_LICENSE_KEY", onInitialized);
}
else
{
RequestCameraPermission();
}
#endif
}
bool HasCameraPermission()
{
#if UNITY_ANDROID
return Permission.HasUserAuthorizedPermission(Permission.Camera);
#elif UNITY_IOS
return hasCameraPermission();
#endif
}
void RequestCameraPermission()
{
#if UNITY_ANDROID
Permission.RequestUserPermission(Permission.Camera);
#elif UNITY_IOS
requestCameraPermission();
#endif
}
void OnApplicationFocus(bool focus)
{
if (HasCameraPermission())
{
GazeTracker.initGazeTracker("YOUR_DEVELOPMENT_LICENSE_KEY", onInitialized);
}
else
{
requestPermission();
}
}
Run
Android
- Select the platform of Unity editor as Android.
Build Setting > Platform > Android > Switch platform to Android)
- Set the Android Minimum API Level as
23
.
(Project Setting > Player > Other Setting > Identification > Minimum API Level 23)
- Set the Android Target API Level as
30
.
(Project Setting > Player > Other Setting > Identification > Target API Level 30)
- To get the log from the SDK, activate the development build.
(Build Setting > Platform > Android > Development Build)
- Don't forget that select Scripting Backend to
IL2CPP
and check target architecturesARM64
.
(Project Setting > Player > Other Setting > Scripting Backend > IL2CPP)
(Project Setting > Player > Other Setting > Target Architectures > ARM64)
Connect the android device to PC.
Build & Run.
(Build Setting > Build And Run)
- After the run, the Unity editor will display the gaze tracking data logs. 🎉
iOS
- Select the platform of Unity editor as iOS.
(Build Setting > Platform > iOS > Switch platform to iOS)
- Anything must be included in the camera permission description field.
(Project Setting > Player > Other Setting > Camera Usage Description)
- Set the iOS Target SDK as
Device
.
(Project Setting > Player > Other Setting > Target SDK > Device SDK)
- Set the iOS Target Minimum iOS version as
11.0
.
(Project Setting > Player > Other Setting > Target Minimum OS version 11.0)
- To get the log from the SDK, activate the development build.
(Build Setting > Platform > iOS > Development Build)
- Don't forget that Check target architectures
ARM64
.
(Project Setting > Player > Other Setting > Architecture > ARM64)
Connect the iOS device to PC.
Build.
(Build Setting > Build)
After the build, Xcode Project will be created. This project only can be used by signing in Xcode.
Open and
Build and then run the current scheme
the xcode project.After the run, the Xcode editor will display the gaze tracking data logs 🎉
Preview for Android
The camera preview used by the Android SDK is TextureView, which only works when hardware acceleration is enabled.
By default, Unity does not use hardware acceleration, so it must export Android Project to modify Android Menifest.
Modify the hardwareAccelerated attribute of activity tag to true in AndroidManifest.xml of unityLibrary module
To build and run the app, press arrow button