🧩 Zion XRay
Scanner mode, world markers, GPS objective trails and setup diagnostics for Unity 6.
Objectives & GPS Trail
Zion XRay separates gameplay ownership from visual guidance. Your quest or mission system decides what the player should do next. Zion XRay reads that objective and presents it using highlights, HUD information, world markers, screen-edge indicators and a GPS trail.
Active objective flow
- Your gameplay system chooses an objective transform.
- The objective provider is updated.
- The active highlight target is updated.
- The HUD updates objective name and distance.
- The world marker system updates marker presentation and active-objective styling.
- The GPS trail rebuilds toward the new target.
Demo objective provider
The sample scene uses ZionXRayDemoObjectiveProvider. It exists to make testing easy
and should be replaced or driven by your own quest logic in a production game.
using UnityEngine;
using ZionGames.XRay;
public class ExampleQuestBridge : MonoBehaviour
{
[SerializeField] private ZionXRayDemoObjectiveProvider objectiveProvider;
public void SetCurrentObjective(Transform objective)
{
objectiveProvider.SetActiveObjective(objective);
ZionXRayTargetHighlighter.SetGlobalActiveTarget(objective);
}
}
GPS requirements
- The scene must contain baked NavMesh data.
- The player must be positioned on or close to the NavMesh.
- The target must be on or close to a reachable NavMesh position.
- Ground geometry needs to be marked as walkable before baking.
- Disconnected NavMesh islands cannot create a valid path between each other.
- The GPS arrow prefab must be assigned or generated by the Setup Wizard.
When the trail rebuilds
The GPS trail should rebuild when the active objective changes or when the path becomes invalid. It does not need to generate a new path every frame.
Diagnostics checks
Use the Diagnostics window to confirm that a NavMesh route exists between the player and active objective. The diagnostic report can identify whether the GPS issue is caused by a missing trail component, missing arrow prefab, missing objective provider or invalid NavMesh route.