feat(scripting): add script add-component api

This commit is contained in:
2026-03-27 15:32:37 +08:00
parent 9c94adb4a2
commit f0d6d4f41c
10 changed files with 401 additions and 6 deletions

View File

@@ -0,0 +1,87 @@
using XCEngine;
namespace Gameplay
{
public sealed class AddComponentProbe : MonoBehaviour
{
public bool InitialHasCamera;
public bool InitialHasLight;
public bool InitialHasMeshFilter;
public bool InitialHasMeshRenderer;
public bool AddedTransform;
public bool AddedCamera;
public bool AddedLight;
public bool AddedMeshFilter;
public bool AddedMeshRenderer;
public bool HasCameraAfterAdd;
public bool HasLightAfterAdd;
public bool HasMeshFilterAfterAdd;
public bool HasMeshRendererAfterAdd;
public bool CameraLookupSucceeded;
public bool LightLookupSucceeded;
public bool MeshFilterLookupSucceeded;
public bool MeshRendererLookupSucceeded;
public float ObservedCameraFieldOfView;
public float ObservedLightIntensity;
public string ObservedMeshPath = string.Empty;
public int ObservedMaterialCount;
public string ObservedMaterial0Path = string.Empty;
public int ObservedRenderLayer;
public void Start()
{
InitialHasCamera = HasComponent<Camera>();
InitialHasLight = HasComponent<Light>();
InitialHasMeshFilter = HasComponent<MeshFilter>();
InitialHasMeshRenderer = HasComponent<MeshRenderer>();
AddedTransform = AddComponent<Transform>() != null;
AddedCamera = AddComponent<Camera>() != null;
AddedLight = gameObject.AddComponent<Light>() != null;
AddedMeshFilter = AddComponent<MeshFilter>() != null;
AddedMeshRenderer = gameObject.AddComponent<MeshRenderer>() != null;
gameObject.AddComponent<Camera>();
AddComponent<Light>();
gameObject.AddComponent<MeshFilter>();
AddComponent<MeshRenderer>();
HasCameraAfterAdd = HasComponent<Camera>();
HasLightAfterAdd = HasComponent<Light>();
HasMeshFilterAfterAdd = HasComponent<MeshFilter>();
HasMeshRendererAfterAdd = HasComponent<MeshRenderer>();
CameraLookupSucceeded = TryGetComponent(out Camera camera);
LightLookupSucceeded = TryGetComponent(out Light light);
MeshFilterLookupSucceeded = TryGetComponent(out MeshFilter meshFilter);
MeshRendererLookupSucceeded = TryGetComponent(out MeshRenderer meshRenderer);
if (camera != null)
{
camera.fieldOfView = 82.0f;
ObservedCameraFieldOfView = camera.fieldOfView;
}
if (light != null)
{
light.intensity = 4.5f;
ObservedLightIntensity = light.intensity;
}
if (meshFilter != null)
{
meshFilter.meshPath = "Meshes/added.mesh";
ObservedMeshPath = meshFilter.meshPath;
}
if (meshRenderer != null)
{
meshRenderer.SetMaterialPath(0, "Materials/added.mat");
meshRenderer.renderLayer = 6;
ObservedMaterialCount = meshRenderer.materialCount;
ObservedMaterial0Path = meshRenderer.GetMaterialPath(0);
ObservedRenderLayer = meshRenderer.renderLayer;
}
}
}
}

View File

@@ -0,0 +1,51 @@
using XCEngine;
namespace Gameplay
{
public sealed class MeshRendererEdgeCaseProbe : MonoBehaviour
{
public int ObservedInitialMaterialCount;
public string ObservedNegativeIndexPath = string.Empty;
public string ObservedOutOfRangePathBeforeClear = string.Empty;
public string ObservedMaterial0PathAfterNegativeWrite = string.Empty;
public string ObservedMaterial1PathAfterNegativeWrite = string.Empty;
public int ObservedMaterialCountAfterNegativeWrite;
public int ObservedRenderLayerAfterNegativeWrite;
public int ObservedMaterialCountAfterClear;
public string ObservedMaterial0PathAfterClear = string.Empty;
public string ObservedMaterial3PathAfterClear = string.Empty;
public bool ObservedCastShadowsAfterClear;
public bool ObservedReceiveShadowsAfterClear;
public int ObservedRenderLayerAfterClear;
public void Start()
{
if (!TryGetComponent(out MeshRenderer meshRenderer) || meshRenderer == null)
{
return;
}
ObservedInitialMaterialCount = meshRenderer.materialCount;
ObservedNegativeIndexPath = meshRenderer.GetMaterialPath(-1);
ObservedOutOfRangePathBeforeClear = meshRenderer.GetMaterialPath(3);
meshRenderer.SetMaterialPath(-1, "Materials/ignored.mat");
ObservedMaterial0PathAfterNegativeWrite = meshRenderer.GetMaterialPath(0);
ObservedMaterial1PathAfterNegativeWrite = meshRenderer.GetMaterialPath(1);
ObservedMaterialCountAfterNegativeWrite = meshRenderer.materialCount;
meshRenderer.renderLayer = -5;
ObservedRenderLayerAfterNegativeWrite = meshRenderer.renderLayer;
meshRenderer.ClearMaterials();
ObservedMaterialCountAfterClear = meshRenderer.materialCount;
ObservedMaterial0PathAfterClear = meshRenderer.GetMaterialPath(0);
ObservedMaterial3PathAfterClear = meshRenderer.GetMaterialPath(3);
ObservedCastShadowsAfterClear = meshRenderer.castShadows;
ObservedReceiveShadowsAfterClear = meshRenderer.receiveShadows;
ObservedRenderLayerAfterClear = meshRenderer.renderLayer;
}
}
}