From 6d803081050006614da46eaf929d1b0b5e0d8a8b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Je=CC=81re=CC=81my=20Lacoche?= <jeremy.lacoche@orange.com>
Date: Sun, 2 Mar 2025 21:38:02 +0100
Subject: [PATCH] add script editor to create AR  scene prefab based on ARF
 Visuals

---
 Assets/Editor/ARSceneCreator.cs      | 46 ++++++++++++++++++++++++++++
 Assets/Editor/ARSceneCreator.cs.meta | 11 +++++++
 Assets/ExtensionsAssets/Editor.meta  |  8 +++++
 3 files changed, 65 insertions(+)
 create mode 100644 Assets/Editor/ARSceneCreator.cs
 create mode 100644 Assets/Editor/ARSceneCreator.cs.meta
 create mode 100644 Assets/ExtensionsAssets/Editor.meta

diff --git a/Assets/Editor/ARSceneCreator.cs b/Assets/Editor/ARSceneCreator.cs
new file mode 100644
index 0000000..0045b31
--- /dev/null
+++ b/Assets/Editor/ARSceneCreator.cs
@@ -0,0 +1,46 @@
+using Unity.VisualScripting;
+using UnityEditor;
+using UnityEngine;
+
+public class ARSceneCreator 
+{
+    
+    [MenuItem("ARF/Create AR Scene")]
+    static void CreateARScene()
+    {
+        GameObject obj = GameObject.Find("ARF Visuals");
+
+        if (obj != null)
+        {
+            GameObject arScene = new GameObject("ARScene");
+            
+            foreach(Transform trackableOrAnchor in obj.transform)
+            {
+                if (trackableOrAnchor.childCount > 2)
+                {
+                    // go through all nodes (trackable or anchor)
+                    GameObject node = new GameObject(trackableOrAnchor.name);
+                    node.transform.parent = arScene.transform ;
+                    AnchorTrackableReferenceNode referenceWA = node.AddComponent<AnchorTrackableReferenceNode>() ;
+                    referenceWA._ARFNodeUUID = trackableOrAnchor.name ;
+                    foreach(Transform asset in trackableOrAnchor)
+                    {
+                        if (asset.gameObject.name != "Axe" && asset.gameObject.name != "Canvas")
+                        {
+                            GameObject copyAsset = GameObject.Instantiate(asset.gameObject);
+                            copyAsset.transform.parent = node.transform ;
+                            copyAsset.transform.localPosition = asset.transform.localPosition; 
+                            copyAsset.transform.localRotation = asset.transform.localRotation;
+                            copyAsset.transform.localScale = asset.transform.localScale; 
+                            asset.gameObject.SetActive(false);
+                        }
+                    }
+                }
+            }
+        }
+        else 
+        {
+            Debug.Log("No ARF Visuals: can't create AR Scene");
+        }
+    }
+}
diff --git a/Assets/Editor/ARSceneCreator.cs.meta b/Assets/Editor/ARSceneCreator.cs.meta
new file mode 100644
index 0000000..3f5ef9a
--- /dev/null
+++ b/Assets/Editor/ARSceneCreator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 18bc366dbbcda4194b629565096e757a
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/ExtensionsAssets/Editor.meta b/Assets/ExtensionsAssets/Editor.meta
new file mode 100644
index 0000000..b3e6dd2
--- /dev/null
+++ b/Assets/ExtensionsAssets/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0109d0ba208a04e3da63874f19011f9b
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
-- 
GitLab