using XCEngine; namespace Gameplay { public sealed class RuntimeGameObjectProbe : MonoBehaviour { public bool MissingBeforeCreate; public bool CreatedRootSucceeded; public bool CreatedChildSucceeded; public bool FoundRootSucceeded; public bool FoundChildSucceeded; public string ObservedFoundRootName = string.Empty; public string ObservedFoundChildParentName = string.Empty; public int ObservedRootChildCountBeforeDestroy; public bool CameraLookupSucceeded; public bool MeshFilterLookupSucceeded; public bool MeshRendererLookupSucceeded; public float ObservedCameraFieldOfView; public string ObservedMeshPath = string.Empty; public int ObservedMaterialCount; public string ObservedMaterial0Path = string.Empty; public int ObservedRenderLayer; public bool MissingChildAfterDestroy; public bool FoundRootAfterDestroySucceeded; public int ObservedRootChildCountAfterDestroy = -1; public void Start() { MissingBeforeCreate = GameObject.Find("RuntimeCreatedRoot") == null; GameObject root = GameObject.Create("RuntimeCreatedRoot"); GameObject child = GameObject.Create("RuntimeCreatedChild", root); CreatedRootSucceeded = root != null; CreatedChildSucceeded = child != null; GameObject foundRoot = GameObject.Find("RuntimeCreatedRoot"); GameObject foundChild = GameObject.Find("RuntimeCreatedChild"); FoundRootSucceeded = foundRoot != null; FoundChildSucceeded = foundChild != null; if (foundRoot != null) { ObservedFoundRootName = foundRoot.name; ObservedRootChildCountBeforeDestroy = foundRoot.transform.childCount; Camera camera = foundRoot.AddComponent(); MeshFilter meshFilter = foundRoot.AddComponent(); MeshRenderer meshRenderer = foundRoot.AddComponent(); CameraLookupSucceeded = camera != null; MeshFilterLookupSucceeded = meshFilter != null; MeshRendererLookupSucceeded = meshRenderer != null; if (camera != null) { camera.fieldOfView = 68.0f; ObservedCameraFieldOfView = camera.fieldOfView; } if (meshFilter != null) { meshFilter.meshPath = "Meshes/runtime_created.mesh"; ObservedMeshPath = meshFilter.meshPath; } if (meshRenderer != null) { meshRenderer.SetMaterialPath(0, "Materials/runtime_created.mat"); meshRenderer.renderLayer = 4; ObservedMaterialCount = meshRenderer.materialCount; ObservedMaterial0Path = meshRenderer.GetMaterialPath(0); ObservedRenderLayer = meshRenderer.renderLayer; } } if (foundChild != null && foundChild.transform.parent != null) { ObservedFoundChildParentName = foundChild.transform.parent.gameObject.name; } if (child != null) { child.Destroy(); } MissingChildAfterDestroy = GameObject.Find("RuntimeCreatedChild") == null; GameObject foundRootAfterDestroy = GameObject.Find("RuntimeCreatedRoot"); FoundRootAfterDestroySucceeded = foundRootAfterDestroy != null; if (foundRootAfterDestroy != null) { ObservedRootChildCountAfterDestroy = foundRootAfterDestroy.transform.childCount; } } } }