|
|
- using System;
- using UnityEngine;
- using Oculus.Avatar;
-
- public class GazeTarget : MonoBehaviour
- {
- public ovrAvatarGazeTargetType Type;
- private static ovrAvatarGazeTargets RuntimeTargetList;
-
- static GazeTarget()
- {
- // This size has to match the 'MarshalAs' attribute in the ovrAvatarGazeTargets declaration.
- RuntimeTargetList.targets = new ovrAvatarGazeTarget[128];
- RuntimeTargetList.targetCount = 1;
- }
-
- void Start()
- {
- UpdateGazeTarget();
- transform.hasChanged = false;
- }
-
- void Update()
- {
- if (transform.hasChanged)
- {
- transform.hasChanged = false;
- UpdateGazeTarget();
- }
- }
-
- void OnDestroy()
- {
- UInt32[] targetIds = new UInt32[1];
- targetIds[0] = (UInt32) transform.GetInstanceID();
- CAPI.ovrAvatar_RemoveGazeTargets(1, targetIds);
- }
-
- private void UpdateGazeTarget()
- {
- ovrAvatarGazeTarget target = CreateOvrGazeTarget((UInt32) transform.GetInstanceID(), transform.position, Type);
- RuntimeTargetList.targets[0] = target;
- CAPI.ovrAvatar_UpdateGazeTargets(RuntimeTargetList);
- }
-
- private ovrAvatarGazeTarget CreateOvrGazeTarget(UInt32 targetId, Vector3 targetPosition, ovrAvatarGazeTargetType targetType)
- {
- return new ovrAvatarGazeTarget
- {
- id = targetId,
- // Do coordinate system switch.
- worldPosition = new Vector3(targetPosition.x, targetPosition.y, -targetPosition.z),
- type = targetType
- };
- }
- }
|