Files
Bachelor-Arbeit-Adrian-Haefner/Library/PackageCache/com.unity.xr.arfoundation@ef86c118adc4/Editor/ARFoundation/XROriginCreateUtil.cs
adriadri6972 d3d9c5f833 upload project
2025-07-31 15:21:08 +02:00

85 lines
3.4 KiB
C#

using System;
using Unity.XR.CoreUtils;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.XR;
using UnityEngine.XR.ARFoundation;
#if !XRI_PRESENT
using UnityEditor.SceneManagement;
#endif
namespace UnityEditor.XR.ARFoundation
{
static class XROriginCreateUtil
{
#if !XRI_PRESENT
[MenuItem("GameObject/XR/XR Origin (Mobile AR)", false, 10)]
static void CreateXROrigin(MenuCommand menuCommand)
{
var context = (menuCommand.context as GameObject);
var parent = context != null ? context.transform : null;
var xrOrigin = CreateXROriginWithParent(parent);
Selection.activeGameObject = xrOrigin.gameObject;
}
#endif
public static XROrigin CreateXROriginWithParent(Transform parent)
{
var originGo = ObjectFactory.CreateGameObject("XR Origin", typeof(XROrigin));
CreateUtils.Place(originGo, parent);
var offsetGo = ObjectFactory.CreateGameObject("Camera Offset");
CreateUtils.Place(offsetGo, originGo.transform);
var arCamera = CreateARMainCamera();
CreateUtils.Place(arCamera.gameObject, offsetGo.transform);
var origin = originGo.GetComponent<XROrigin>();
origin.CameraFloorOffsetObject = offsetGo;
origin.Camera = arCamera;
Undo.RegisterCreatedObjectUndo(originGo, "Create XR Origin");
return origin;
}
static Camera CreateARMainCamera()
{
var mainCam = Camera.main;
if (mainCam != null)
{
Debug.LogWarningFormat(
mainCam.gameObject,
"XR Origin Main Camera requires the \"MainCamera\" Tag, but the current scene contains another enabled Camera tagged \"MainCamera\". For AR to function properly, remove the \"MainCamera\" Tag from \'{0}\' or disable it.",
mainCam.name);
}
var cameraGo = ObjectFactory.CreateGameObject(
"Main Camera",
typeof(Camera),
typeof(AudioListener),
typeof(ARCameraManager),
typeof(ARCameraBackground),
typeof(TrackedPoseDriver));
var camera = cameraGo.GetComponent<Camera>();
Undo.RecordObject(camera, "Configure Camera");
camera.tag = "MainCamera";
camera.clearFlags = CameraClearFlags.Color;
camera.backgroundColor = Color.black;
camera.nearClipPlane = 0.1f;
camera.farClipPlane = 20f;
var trackedPoseDriver = cameraGo.GetComponent<TrackedPoseDriver>();
Undo.RecordObject(trackedPoseDriver, "Configure Tracked Pose Driver");
var positionAction = new InputAction("Position", binding: "<XRHMD>/centerEyePosition", expectedControlType: "Vector3");
positionAction.AddBinding("<HandheldARInputDevice>/devicePosition");
var rotationAction = new InputAction("Rotation", binding: "<XRHMD>/centerEyeRotation", expectedControlType: "Quaternion");
rotationAction.AddBinding("<HandheldARInputDevice>/deviceRotation");
trackedPoseDriver.positionInput = new InputActionProperty(positionAction);
trackedPoseDriver.rotationInput = new InputActionProperty(rotationAction);
return camera;
}
}
}