@atelierai/uco 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -8
- package/package.json +2 -2
- package/vendor/plugin/com.atelierai.unity.copilot/CHANGELOG.md +4 -4
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetConfig.cs +132 -132
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetDependencyResolver.cs +237 -237
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetDownloader.cs +82 -82
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Resource/MenuItems.cs +247 -247
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Resource/ToolGroups.cs +153 -153
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/SystemTool/Skills.Create.SkillBody.cs +155 -155
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Console.GetLogs.cs +95 -95
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Docs.HttpFetcher.cs +139 -139
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Instance.ListAll.cs +72 -72
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/PathReadHelper.cs +106 -106
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Script.Validate.cs +252 -252
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Tests/TestResultCollector.cs +537 -537
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Tests.cs +400 -400
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/ToolGroups.SetEnabled.cs +92 -92
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Branding/ProductInfo.cs +62 -62
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/CopilotServerManager.cs +887 -1034
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Skills/Skill_InitialSetup.cs +197 -197
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Startup.Editor.cs +201 -201
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Startup.cs +67 -67
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/CopilotListWindowBase.cs +393 -393
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/CopilotWindowBase.cs +113 -113
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.Connection.cs +3 -3
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotFeatures.cs +195 -195
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotServer.cs +22 -22
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CreateGUI.cs +354 -354
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.cs +78 -78
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowInitializer.cs +47 -47
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/SerializationCheckWindow.cs +190 -190
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Build.cs +91 -91
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Config.cs +298 -298
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Static.cs +296 -296
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.cs +69 -69
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/PackageUtils.cs +168 -168
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/PrefsKeyMigration.cs +119 -119
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/SafeDefaultsGuard.cs +180 -180
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/ScriptUtils.cs +229 -229
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/ToolGroupRegistry.cs +461 -460
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/ToolsManifestGenerator.cs +200 -200
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityAuthoringAdapters.cs +1467 -1467
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityAuthoringSafetyReloadGuard.cs +65 -65
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityCopilotUpdateProjectSettings.cs +66 -66
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/CopilotPromptsWindow.uss +11 -11
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/CopilotResourcesWindow.uss +16 -16
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/CopilotToolsWindow.uss +36 -36
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/MainWindow.uss +183 -183
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/common/{_mcp-list-window.uss → _copilot-list-window.uss} +18 -18
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/common/_list-view.uss +77 -77
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uxml/CopilotPromptsWindow.uxml +18 -18
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uxml/CopilotResourcesWindow.uxml +18 -18
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uxml/CopilotToolsWindow.uxml +18 -18
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uxml/MainWindow.uxml +115 -115
- package/vendor/plugin/com.atelierai.unity.copilot/Plugins/ReflectorNet.dll +0 -0
- package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.Common.dll +0 -0
- package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.dll +0 -0
- package/vendor/plugin/com.atelierai.unity.copilot/README.md +88 -88
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Converter/Json/Structures/EntityIdConverter.cs +120 -120
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Data/GameObjectMetadata.cs +110 -110
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Data/GameObjectMetadata.pre-Unity.6.5.cs +110 -110
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Unity/Logs/FileLogStorage.cs +547 -547
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Build.cs +243 -243
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Config.cs +3 -3
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.cs +295 -295
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginBuilder.cs +105 -105
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginRuntime.Static.cs +155 -155
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginRuntime.cs +59 -59
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Utils/EnvironmentUtils.cs +11 -11
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AtomicApi/AtomicApiTestFixtures.cs +99 -99
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AtomicApi/TryModifyAtTests.cs +227 -227
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AuthoringSafetyPilotTests.cs +1050 -1050
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetExtractorDevelopmentDependencyTests.cs +148 -148
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetExtractorFlatLayoutTests.cs +166 -166
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetInstallManifestTests.cs +436 -436
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetLegacyMigrationTests.cs +304 -304
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetPackageInstallerStaleVersionCleanupTests.cs +200 -200
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Environment/EnvironmentUtilsTests.cs +2 -2
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/BlacklistTypeTests.cs +416 -416
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataFieldScriptableObjectPopulationTests.cs +172 -172
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataFieldScriptableObjectPopulationTests.pre-Unity.6.5.cs +169 -169
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPopulationTests.cs +182 -182
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPopulationTests.pre-Unity.6.5.cs +179 -179
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyPopulationTests.cs +175 -175
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyPopulationTests.pre-Unity.6.5.cs +174 -174
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyScriptableObjectPopulationTests.cs +171 -171
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyScriptableObjectPopulationTests.pre-Unity.6.5.cs +170 -170
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsCreateFolderTests.cs +243 -243
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsMaterialTests.cs +101 -101
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsPrefabCreateTests.cs +348 -348
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsPrefabCreateTests.pre-Unity.6.5.cs +348 -348
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsShaderTests.cs +194 -194
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/GameObject/TestJsonSchema.cs +199 -199
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/PathBasedToolTests.cs +573 -573
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/PathBasedToolTests.pre-Unity.6.5.cs +513 -513
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotCameraTests.cs +154 -154
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotCameraTests.pre-Unity.6.5.cs +154 -154
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotGameViewTests.cs +164 -164
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotSceneViewTests.cs +155 -155
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolParameterTests.cs +56 -56
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolThreadSafetyTests.cs +651 -651
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolThreadSafetyTests.pre-Unity.6.5.cs +651 -651
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ToolBatchExecutionIntegrationTests.cs +407 -407
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/{McpPluginTests.cs → UcoPluginTests.cs} +105 -105
- package/vendor/plugin/com.atelierai.unity.copilot/package.json +1 -1
- /package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/common/{_mcp-list-window.uss.meta → _copilot-list-window.uss.meta} +0 -0
- /package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/{McpPluginTests.cs.meta → UcoPluginTests.cs.meta} +0 -0
|
@@ -1,154 +1,154 @@
|
|
|
1
|
-
/*
|
|
2
|
-
┌──────────────────────────────────────────────────────────────────┐
|
|
3
|
-
│ Author: Ivan Murzak (https://github.com/IvanMurzak) │
|
|
4
|
-
│ Repository: GitHub (https://github.com/IvanMurzak/Unity-MCP) │
|
|
5
|
-
│ Copyright (c) 2025 Ivan Murzak │
|
|
6
|
-
│ Licensed under the Apache License, Version 2.0. │
|
|
7
|
-
│ See the LICENSE file in the project root for more information. │
|
|
8
|
-
└──────────────────────────────────────────────────────────────────┘
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
#nullable enable
|
|
12
|
-
#if UNITY_6000_5_OR_NEWER
|
|
13
|
-
using System.Text.RegularExpressions;
|
|
14
|
-
using com.AtelierAI.Uco.Framework.Common.Model;
|
|
15
|
-
using com.AtelierAI.Unity.Copilot.Editor.API;
|
|
16
|
-
using AIGD;
|
|
17
|
-
using NUnit.Framework;
|
|
18
|
-
using UnityEngine;
|
|
19
|
-
using UnityEngine.TestTools;
|
|
20
|
-
|
|
21
|
-
namespace com.AtelierAI.Unity.Copilot.Editor.Tests
|
|
22
|
-
{
|
|
23
|
-
public class ScreenshotCameraTests : BaseTest
|
|
24
|
-
{
|
|
25
|
-
[Test]
|
|
26
|
-
public void ScreenshotCamera_WithCameraRef_ReturnsImage()
|
|
27
|
-
{
|
|
28
|
-
// Arrange
|
|
29
|
-
var go = new GameObject("TestCamera");
|
|
30
|
-
go.AddComponent<Camera>();
|
|
31
|
-
var cameraRef = new GameObjectRef { InstanceID = go.GetEntityId() };
|
|
32
|
-
|
|
33
|
-
// Act
|
|
34
|
-
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef, width: 320, height: 240);
|
|
35
|
-
|
|
36
|
-
// Assert
|
|
37
|
-
Assert.IsNotNull(result);
|
|
38
|
-
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed when a valid camera is referenced");
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
[Test]
|
|
42
|
-
public void ScreenshotCamera_DefaultDimensions_ReturnsImage()
|
|
43
|
-
{
|
|
44
|
-
// Arrange
|
|
45
|
-
var go = new GameObject("DefaultDimsCamera");
|
|
46
|
-
go.AddComponent<Camera>();
|
|
47
|
-
var cameraRef = new GameObjectRef { InstanceID = go.GetEntityId() };
|
|
48
|
-
|
|
49
|
-
// Act — uses default 1920×1080
|
|
50
|
-
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef);
|
|
51
|
-
|
|
52
|
-
// Assert
|
|
53
|
-
Assert.IsNotNull(result);
|
|
54
|
-
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed with default (1920×1080) dimensions");
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
[Test]
|
|
58
|
-
public void ScreenshotCamera_CustomDimensions_ReturnsImage()
|
|
59
|
-
{
|
|
60
|
-
// Arrange
|
|
61
|
-
var go = new GameObject("CustomDimsCamera");
|
|
62
|
-
go.AddComponent<Camera>();
|
|
63
|
-
var cameraRef = new GameObjectRef { InstanceID = go.GetEntityId() };
|
|
64
|
-
|
|
65
|
-
// Act
|
|
66
|
-
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef, width: 640, height: 480);
|
|
67
|
-
|
|
68
|
-
// Assert
|
|
69
|
-
Assert.IsNotNull(result);
|
|
70
|
-
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed with custom dimensions");
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
[Test]
|
|
74
|
-
public void ScreenshotCamera_NullCameraRef_UsesFirstAvailableCamera()
|
|
75
|
-
{
|
|
76
|
-
// Arrange: any camera in the scene — no MainCamera tag needed
|
|
77
|
-
var go = new GameObject("AnyCamera");
|
|
78
|
-
go.AddComponent<Camera>();
|
|
79
|
-
|
|
80
|
-
// Act — null ref falls back to Camera.main ?? Camera.allCameras.FirstOrDefault()
|
|
81
|
-
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: null, width: 320, height: 240);
|
|
82
|
-
|
|
83
|
-
// Assert
|
|
84
|
-
Assert.IsNotNull(result);
|
|
85
|
-
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should fall back to the first available camera");
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
[Test]
|
|
89
|
-
public void ScreenshotCamera_MainCameraTag_UsedWhenNoCameraRefProvided()
|
|
90
|
-
{
|
|
91
|
-
// Arrange: camera tagged "MainCamera" — picked up by Camera.main
|
|
92
|
-
var go = new GameObject("MainCameraObject");
|
|
93
|
-
go.tag = "MainCamera";
|
|
94
|
-
go.AddComponent<Camera>();
|
|
95
|
-
|
|
96
|
-
// Act
|
|
97
|
-
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: null, width: 320, height: 240);
|
|
98
|
-
|
|
99
|
-
// Assert
|
|
100
|
-
Assert.IsNotNull(result);
|
|
101
|
-
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should use the MainCamera-tagged camera");
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
[Test]
|
|
105
|
-
public void ScreenshotCamera_NoCameraInScene_ReturnsError()
|
|
106
|
-
{
|
|
107
|
-
// Explicitly remove every scene camera to force the no-camera error path.
|
|
108
|
-
foreach (var cam in Camera.allCameras)
|
|
109
|
-
if (cam != null)
|
|
110
|
-
Object.DestroyImmediate(cam.gameObject);
|
|
111
|
-
|
|
112
|
-
var result = new Tool_Screenshot().ScreenshotCamera(width: 320, height: 240);
|
|
113
|
-
|
|
114
|
-
Assert.IsNotNull(result);
|
|
115
|
-
Assert.AreEqual(ResponseStatus.Error, result.Status,
|
|
116
|
-
"Should return an error response when no camera exists in the scene");
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
[Test]
|
|
120
|
-
public void ScreenshotCamera_ViaRunTool_WithCameraRef_Succeeds()
|
|
121
|
-
{
|
|
122
|
-
// Arrange
|
|
123
|
-
var go = new GameObject("RunToolCamera");
|
|
124
|
-
go.AddComponent<Camera>();
|
|
125
|
-
|
|
126
|
-
// Act — exercises the full
|
|
127
|
-
RunTool("screenshot-camera", $@"{{
|
|
128
|
-
""cameraRef"": {{
|
|
129
|
-
""instanceID"": {go.GetEntityId()}
|
|
130
|
-
}},
|
|
131
|
-
""width"": 320,
|
|
132
|
-
""height"": 240
|
|
133
|
-
}}");
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
[Test]
|
|
137
|
-
public void ScreenshotCamera_ViaRunTool_SmallestDimensions_Succeeds()
|
|
138
|
-
{
|
|
139
|
-
// Arrange
|
|
140
|
-
var go = new GameObject("SmallCamera");
|
|
141
|
-
go.AddComponent<Camera>();
|
|
142
|
-
|
|
143
|
-
// Act — small render texture to keep the test fast
|
|
144
|
-
RunTool("screenshot-camera", $@"{{
|
|
145
|
-
""cameraRef"": {{
|
|
146
|
-
""instanceID"": {go.GetEntityId()}
|
|
147
|
-
}},
|
|
148
|
-
""width"": 16,
|
|
149
|
-
""height"": 16
|
|
150
|
-
}}");
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
#endif
|
|
1
|
+
/*
|
|
2
|
+
┌──────────────────────────────────────────────────────────────────┐
|
|
3
|
+
│ Author: Ivan Murzak (https://github.com/IvanMurzak) │
|
|
4
|
+
│ Repository: GitHub (https://github.com/IvanMurzak/Unity-MCP) │
|
|
5
|
+
│ Copyright (c) 2025 Ivan Murzak │
|
|
6
|
+
│ Licensed under the Apache License, Version 2.0. │
|
|
7
|
+
│ See the LICENSE file in the project root for more information. │
|
|
8
|
+
└──────────────────────────────────────────────────────────────────┘
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#nullable enable
|
|
12
|
+
#if UNITY_6000_5_OR_NEWER
|
|
13
|
+
using System.Text.RegularExpressions;
|
|
14
|
+
using com.AtelierAI.Uco.Framework.Common.Model;
|
|
15
|
+
using com.AtelierAI.Unity.Copilot.Editor.API;
|
|
16
|
+
using AIGD;
|
|
17
|
+
using NUnit.Framework;
|
|
18
|
+
using UnityEngine;
|
|
19
|
+
using UnityEngine.TestTools;
|
|
20
|
+
|
|
21
|
+
namespace com.AtelierAI.Unity.Copilot.Editor.Tests
|
|
22
|
+
{
|
|
23
|
+
public class ScreenshotCameraTests : BaseTest
|
|
24
|
+
{
|
|
25
|
+
[Test]
|
|
26
|
+
public void ScreenshotCamera_WithCameraRef_ReturnsImage()
|
|
27
|
+
{
|
|
28
|
+
// Arrange
|
|
29
|
+
var go = new GameObject("TestCamera");
|
|
30
|
+
go.AddComponent<Camera>();
|
|
31
|
+
var cameraRef = new GameObjectRef { InstanceID = go.GetEntityId() };
|
|
32
|
+
|
|
33
|
+
// Act
|
|
34
|
+
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef, width: 320, height: 240);
|
|
35
|
+
|
|
36
|
+
// Assert
|
|
37
|
+
Assert.IsNotNull(result);
|
|
38
|
+
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed when a valid camera is referenced");
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
[Test]
|
|
42
|
+
public void ScreenshotCamera_DefaultDimensions_ReturnsImage()
|
|
43
|
+
{
|
|
44
|
+
// Arrange
|
|
45
|
+
var go = new GameObject("DefaultDimsCamera");
|
|
46
|
+
go.AddComponent<Camera>();
|
|
47
|
+
var cameraRef = new GameObjectRef { InstanceID = go.GetEntityId() };
|
|
48
|
+
|
|
49
|
+
// Act — uses default 1920×1080
|
|
50
|
+
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef);
|
|
51
|
+
|
|
52
|
+
// Assert
|
|
53
|
+
Assert.IsNotNull(result);
|
|
54
|
+
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed with default (1920×1080) dimensions");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
[Test]
|
|
58
|
+
public void ScreenshotCamera_CustomDimensions_ReturnsImage()
|
|
59
|
+
{
|
|
60
|
+
// Arrange
|
|
61
|
+
var go = new GameObject("CustomDimsCamera");
|
|
62
|
+
go.AddComponent<Camera>();
|
|
63
|
+
var cameraRef = new GameObjectRef { InstanceID = go.GetEntityId() };
|
|
64
|
+
|
|
65
|
+
// Act
|
|
66
|
+
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef, width: 640, height: 480);
|
|
67
|
+
|
|
68
|
+
// Assert
|
|
69
|
+
Assert.IsNotNull(result);
|
|
70
|
+
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed with custom dimensions");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
[Test]
|
|
74
|
+
public void ScreenshotCamera_NullCameraRef_UsesFirstAvailableCamera()
|
|
75
|
+
{
|
|
76
|
+
// Arrange: any camera in the scene — no MainCamera tag needed
|
|
77
|
+
var go = new GameObject("AnyCamera");
|
|
78
|
+
go.AddComponent<Camera>();
|
|
79
|
+
|
|
80
|
+
// Act — null ref falls back to Camera.main ?? Camera.allCameras.FirstOrDefault()
|
|
81
|
+
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: null, width: 320, height: 240);
|
|
82
|
+
|
|
83
|
+
// Assert
|
|
84
|
+
Assert.IsNotNull(result);
|
|
85
|
+
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should fall back to the first available camera");
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
[Test]
|
|
89
|
+
public void ScreenshotCamera_MainCameraTag_UsedWhenNoCameraRefProvided()
|
|
90
|
+
{
|
|
91
|
+
// Arrange: camera tagged "MainCamera" — picked up by Camera.main
|
|
92
|
+
var go = new GameObject("MainCameraObject");
|
|
93
|
+
go.tag = "MainCamera";
|
|
94
|
+
go.AddComponent<Camera>();
|
|
95
|
+
|
|
96
|
+
// Act
|
|
97
|
+
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: null, width: 320, height: 240);
|
|
98
|
+
|
|
99
|
+
// Assert
|
|
100
|
+
Assert.IsNotNull(result);
|
|
101
|
+
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should use the MainCamera-tagged camera");
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
[Test]
|
|
105
|
+
public void ScreenshotCamera_NoCameraInScene_ReturnsError()
|
|
106
|
+
{
|
|
107
|
+
// Explicitly remove every scene camera to force the no-camera error path.
|
|
108
|
+
foreach (var cam in Camera.allCameras)
|
|
109
|
+
if (cam != null)
|
|
110
|
+
Object.DestroyImmediate(cam.gameObject);
|
|
111
|
+
|
|
112
|
+
var result = new Tool_Screenshot().ScreenshotCamera(width: 320, height: 240);
|
|
113
|
+
|
|
114
|
+
Assert.IsNotNull(result);
|
|
115
|
+
Assert.AreEqual(ResponseStatus.Error, result.Status,
|
|
116
|
+
"Should return an error response when no camera exists in the scene");
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
[Test]
|
|
120
|
+
public void ScreenshotCamera_ViaRunTool_WithCameraRef_Succeeds()
|
|
121
|
+
{
|
|
122
|
+
// Arrange
|
|
123
|
+
var go = new GameObject("RunToolCamera");
|
|
124
|
+
go.AddComponent<Camera>();
|
|
125
|
+
|
|
126
|
+
// Act — exercises the full Uco framework path
|
|
127
|
+
RunTool("screenshot-camera", $@"{{
|
|
128
|
+
""cameraRef"": {{
|
|
129
|
+
""instanceID"": {go.GetEntityId()}
|
|
130
|
+
}},
|
|
131
|
+
""width"": 320,
|
|
132
|
+
""height"": 240
|
|
133
|
+
}}");
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
[Test]
|
|
137
|
+
public void ScreenshotCamera_ViaRunTool_SmallestDimensions_Succeeds()
|
|
138
|
+
{
|
|
139
|
+
// Arrange
|
|
140
|
+
var go = new GameObject("SmallCamera");
|
|
141
|
+
go.AddComponent<Camera>();
|
|
142
|
+
|
|
143
|
+
// Act — small render texture to keep the test fast
|
|
144
|
+
RunTool("screenshot-camera", $@"{{
|
|
145
|
+
""cameraRef"": {{
|
|
146
|
+
""instanceID"": {go.GetEntityId()}
|
|
147
|
+
}},
|
|
148
|
+
""width"": 16,
|
|
149
|
+
""height"": 16
|
|
150
|
+
}}");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
#endif
|
|
@@ -1,154 +1,154 @@
|
|
|
1
|
-
/*
|
|
2
|
-
┌──────────────────────────────────────────────────────────────────┐
|
|
3
|
-
│ Author: Ivan Murzak (https://github.com/IvanMurzak) │
|
|
4
|
-
│ Repository: GitHub (https://github.com/IvanMurzak/Unity-MCP) │
|
|
5
|
-
│ Copyright (c) 2025 Ivan Murzak │
|
|
6
|
-
│ Licensed under the Apache License, Version 2.0. │
|
|
7
|
-
│ See the LICENSE file in the project root for more information. │
|
|
8
|
-
└──────────────────────────────────────────────────────────────────┘
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
#nullable enable
|
|
12
|
-
#if !UNITY_6000_5_OR_NEWER
|
|
13
|
-
using System.Text.RegularExpressions;
|
|
14
|
-
using com.AtelierAI.Uco.Framework.Common.Model;
|
|
15
|
-
using com.AtelierAI.Unity.Copilot.Editor.API;
|
|
16
|
-
using AIGD;
|
|
17
|
-
using NUnit.Framework;
|
|
18
|
-
using UnityEngine;
|
|
19
|
-
using UnityEngine.TestTools;
|
|
20
|
-
|
|
21
|
-
namespace com.AtelierAI.Unity.Copilot.Editor.Tests
|
|
22
|
-
{
|
|
23
|
-
public class ScreenshotCameraTests : BaseTest
|
|
24
|
-
{
|
|
25
|
-
[Test]
|
|
26
|
-
public void ScreenshotCamera_WithCameraRef_ReturnsImage()
|
|
27
|
-
{
|
|
28
|
-
// Arrange
|
|
29
|
-
var go = new GameObject("TestCamera");
|
|
30
|
-
go.AddComponent<Camera>();
|
|
31
|
-
var cameraRef = new GameObjectRef { InstanceID = go.GetInstanceID() };
|
|
32
|
-
|
|
33
|
-
// Act
|
|
34
|
-
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef, width: 320, height: 240);
|
|
35
|
-
|
|
36
|
-
// Assert
|
|
37
|
-
Assert.IsNotNull(result);
|
|
38
|
-
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed when a valid camera is referenced");
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
[Test]
|
|
42
|
-
public void ScreenshotCamera_DefaultDimensions_ReturnsImage()
|
|
43
|
-
{
|
|
44
|
-
// Arrange
|
|
45
|
-
var go = new GameObject("DefaultDimsCamera");
|
|
46
|
-
go.AddComponent<Camera>();
|
|
47
|
-
var cameraRef = new GameObjectRef { InstanceID = go.GetInstanceID() };
|
|
48
|
-
|
|
49
|
-
// Act — uses default 1920×1080
|
|
50
|
-
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef);
|
|
51
|
-
|
|
52
|
-
// Assert
|
|
53
|
-
Assert.IsNotNull(result);
|
|
54
|
-
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed with default (1920×1080) dimensions");
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
[Test]
|
|
58
|
-
public void ScreenshotCamera_CustomDimensions_ReturnsImage()
|
|
59
|
-
{
|
|
60
|
-
// Arrange
|
|
61
|
-
var go = new GameObject("CustomDimsCamera");
|
|
62
|
-
go.AddComponent<Camera>();
|
|
63
|
-
var cameraRef = new GameObjectRef { InstanceID = go.GetInstanceID() };
|
|
64
|
-
|
|
65
|
-
// Act
|
|
66
|
-
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef, width: 640, height: 480);
|
|
67
|
-
|
|
68
|
-
// Assert
|
|
69
|
-
Assert.IsNotNull(result);
|
|
70
|
-
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed with custom dimensions");
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
[Test]
|
|
74
|
-
public void ScreenshotCamera_NullCameraRef_UsesFirstAvailableCamera()
|
|
75
|
-
{
|
|
76
|
-
// Arrange: any camera in the scene — no MainCamera tag needed
|
|
77
|
-
var go = new GameObject("AnyCamera");
|
|
78
|
-
go.AddComponent<Camera>();
|
|
79
|
-
|
|
80
|
-
// Act — null ref falls back to Camera.main ?? Camera.allCameras.FirstOrDefault()
|
|
81
|
-
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: null, width: 320, height: 240);
|
|
82
|
-
|
|
83
|
-
// Assert
|
|
84
|
-
Assert.IsNotNull(result);
|
|
85
|
-
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should fall back to the first available camera");
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
[Test]
|
|
89
|
-
public void ScreenshotCamera_MainCameraTag_UsedWhenNoCameraRefProvided()
|
|
90
|
-
{
|
|
91
|
-
// Arrange: camera tagged "MainCamera" — picked up by Camera.main
|
|
92
|
-
var go = new GameObject("MainCameraObject");
|
|
93
|
-
go.tag = "MainCamera";
|
|
94
|
-
go.AddComponent<Camera>();
|
|
95
|
-
|
|
96
|
-
// Act
|
|
97
|
-
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: null, width: 320, height: 240);
|
|
98
|
-
|
|
99
|
-
// Assert
|
|
100
|
-
Assert.IsNotNull(result);
|
|
101
|
-
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should use the MainCamera-tagged camera");
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
[Test]
|
|
105
|
-
public void ScreenshotCamera_NoCameraInScene_ReturnsError()
|
|
106
|
-
{
|
|
107
|
-
// Explicitly remove every scene camera to force the no-camera error path.
|
|
108
|
-
foreach (var cam in Camera.allCameras)
|
|
109
|
-
if (cam != null)
|
|
110
|
-
Object.DestroyImmediate(cam.gameObject);
|
|
111
|
-
|
|
112
|
-
var result = new Tool_Screenshot().ScreenshotCamera(width: 320, height: 240);
|
|
113
|
-
|
|
114
|
-
Assert.IsNotNull(result);
|
|
115
|
-
Assert.AreEqual(ResponseStatus.Error, result.Status,
|
|
116
|
-
"Should return an error response when no camera exists in the scene");
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
[Test]
|
|
120
|
-
public void ScreenshotCamera_ViaRunTool_WithCameraRef_Succeeds()
|
|
121
|
-
{
|
|
122
|
-
// Arrange
|
|
123
|
-
var go = new GameObject("RunToolCamera");
|
|
124
|
-
go.AddComponent<Camera>();
|
|
125
|
-
|
|
126
|
-
// Act — exercises the full
|
|
127
|
-
RunTool("screenshot-camera", $@"{{
|
|
128
|
-
""cameraRef"": {{
|
|
129
|
-
""instanceID"": {go.GetInstanceID()}
|
|
130
|
-
}},
|
|
131
|
-
""width"": 320,
|
|
132
|
-
""height"": 240
|
|
133
|
-
}}");
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
[Test]
|
|
137
|
-
public void ScreenshotCamera_ViaRunTool_SmallestDimensions_Succeeds()
|
|
138
|
-
{
|
|
139
|
-
// Arrange
|
|
140
|
-
var go = new GameObject("SmallCamera");
|
|
141
|
-
go.AddComponent<Camera>();
|
|
142
|
-
|
|
143
|
-
// Act — small render texture to keep the test fast
|
|
144
|
-
RunTool("screenshot-camera", $@"{{
|
|
145
|
-
""cameraRef"": {{
|
|
146
|
-
""instanceID"": {go.GetInstanceID()}
|
|
147
|
-
}},
|
|
148
|
-
""width"": 16,
|
|
149
|
-
""height"": 16
|
|
150
|
-
}}");
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
#endif
|
|
1
|
+
/*
|
|
2
|
+
┌──────────────────────────────────────────────────────────────────┐
|
|
3
|
+
│ Author: Ivan Murzak (https://github.com/IvanMurzak) │
|
|
4
|
+
│ Repository: GitHub (https://github.com/IvanMurzak/Unity-MCP) │
|
|
5
|
+
│ Copyright (c) 2025 Ivan Murzak │
|
|
6
|
+
│ Licensed under the Apache License, Version 2.0. │
|
|
7
|
+
│ See the LICENSE file in the project root for more information. │
|
|
8
|
+
└──────────────────────────────────────────────────────────────────┘
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#nullable enable
|
|
12
|
+
#if !UNITY_6000_5_OR_NEWER
|
|
13
|
+
using System.Text.RegularExpressions;
|
|
14
|
+
using com.AtelierAI.Uco.Framework.Common.Model;
|
|
15
|
+
using com.AtelierAI.Unity.Copilot.Editor.API;
|
|
16
|
+
using AIGD;
|
|
17
|
+
using NUnit.Framework;
|
|
18
|
+
using UnityEngine;
|
|
19
|
+
using UnityEngine.TestTools;
|
|
20
|
+
|
|
21
|
+
namespace com.AtelierAI.Unity.Copilot.Editor.Tests
|
|
22
|
+
{
|
|
23
|
+
public class ScreenshotCameraTests : BaseTest
|
|
24
|
+
{
|
|
25
|
+
[Test]
|
|
26
|
+
public void ScreenshotCamera_WithCameraRef_ReturnsImage()
|
|
27
|
+
{
|
|
28
|
+
// Arrange
|
|
29
|
+
var go = new GameObject("TestCamera");
|
|
30
|
+
go.AddComponent<Camera>();
|
|
31
|
+
var cameraRef = new GameObjectRef { InstanceID = go.GetInstanceID() };
|
|
32
|
+
|
|
33
|
+
// Act
|
|
34
|
+
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef, width: 320, height: 240);
|
|
35
|
+
|
|
36
|
+
// Assert
|
|
37
|
+
Assert.IsNotNull(result);
|
|
38
|
+
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed when a valid camera is referenced");
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
[Test]
|
|
42
|
+
public void ScreenshotCamera_DefaultDimensions_ReturnsImage()
|
|
43
|
+
{
|
|
44
|
+
// Arrange
|
|
45
|
+
var go = new GameObject("DefaultDimsCamera");
|
|
46
|
+
go.AddComponent<Camera>();
|
|
47
|
+
var cameraRef = new GameObjectRef { InstanceID = go.GetInstanceID() };
|
|
48
|
+
|
|
49
|
+
// Act — uses default 1920×1080
|
|
50
|
+
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef);
|
|
51
|
+
|
|
52
|
+
// Assert
|
|
53
|
+
Assert.IsNotNull(result);
|
|
54
|
+
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed with default (1920×1080) dimensions");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
[Test]
|
|
58
|
+
public void ScreenshotCamera_CustomDimensions_ReturnsImage()
|
|
59
|
+
{
|
|
60
|
+
// Arrange
|
|
61
|
+
var go = new GameObject("CustomDimsCamera");
|
|
62
|
+
go.AddComponent<Camera>();
|
|
63
|
+
var cameraRef = new GameObjectRef { InstanceID = go.GetInstanceID() };
|
|
64
|
+
|
|
65
|
+
// Act
|
|
66
|
+
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: cameraRef, width: 640, height: 480);
|
|
67
|
+
|
|
68
|
+
// Assert
|
|
69
|
+
Assert.IsNotNull(result);
|
|
70
|
+
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should succeed with custom dimensions");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
[Test]
|
|
74
|
+
public void ScreenshotCamera_NullCameraRef_UsesFirstAvailableCamera()
|
|
75
|
+
{
|
|
76
|
+
// Arrange: any camera in the scene — no MainCamera tag needed
|
|
77
|
+
var go = new GameObject("AnyCamera");
|
|
78
|
+
go.AddComponent<Camera>();
|
|
79
|
+
|
|
80
|
+
// Act — null ref falls back to Camera.main ?? Camera.allCameras.FirstOrDefault()
|
|
81
|
+
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: null, width: 320, height: 240);
|
|
82
|
+
|
|
83
|
+
// Assert
|
|
84
|
+
Assert.IsNotNull(result);
|
|
85
|
+
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should fall back to the first available camera");
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
[Test]
|
|
89
|
+
public void ScreenshotCamera_MainCameraTag_UsedWhenNoCameraRefProvided()
|
|
90
|
+
{
|
|
91
|
+
// Arrange: camera tagged "MainCamera" — picked up by Camera.main
|
|
92
|
+
var go = new GameObject("MainCameraObject");
|
|
93
|
+
go.tag = "MainCamera";
|
|
94
|
+
go.AddComponent<Camera>();
|
|
95
|
+
|
|
96
|
+
// Act
|
|
97
|
+
var result = new Tool_Screenshot().ScreenshotCamera(cameraRef: null, width: 320, height: 240);
|
|
98
|
+
|
|
99
|
+
// Assert
|
|
100
|
+
Assert.IsNotNull(result);
|
|
101
|
+
Assert.AreNotEqual(ResponseStatus.Error, result.Status, "Should use the MainCamera-tagged camera");
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
[Test]
|
|
105
|
+
public void ScreenshotCamera_NoCameraInScene_ReturnsError()
|
|
106
|
+
{
|
|
107
|
+
// Explicitly remove every scene camera to force the no-camera error path.
|
|
108
|
+
foreach (var cam in Camera.allCameras)
|
|
109
|
+
if (cam != null)
|
|
110
|
+
Object.DestroyImmediate(cam.gameObject);
|
|
111
|
+
|
|
112
|
+
var result = new Tool_Screenshot().ScreenshotCamera(width: 320, height: 240);
|
|
113
|
+
|
|
114
|
+
Assert.IsNotNull(result);
|
|
115
|
+
Assert.AreEqual(ResponseStatus.Error, result.Status,
|
|
116
|
+
"Should return an error response when no camera exists in the scene");
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
[Test]
|
|
120
|
+
public void ScreenshotCamera_ViaRunTool_WithCameraRef_Succeeds()
|
|
121
|
+
{
|
|
122
|
+
// Arrange
|
|
123
|
+
var go = new GameObject("RunToolCamera");
|
|
124
|
+
go.AddComponent<Camera>();
|
|
125
|
+
|
|
126
|
+
// Act — exercises the full Uco framework path
|
|
127
|
+
RunTool("screenshot-camera", $@"{{
|
|
128
|
+
""cameraRef"": {{
|
|
129
|
+
""instanceID"": {go.GetInstanceID()}
|
|
130
|
+
}},
|
|
131
|
+
""width"": 320,
|
|
132
|
+
""height"": 240
|
|
133
|
+
}}");
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
[Test]
|
|
137
|
+
public void ScreenshotCamera_ViaRunTool_SmallestDimensions_Succeeds()
|
|
138
|
+
{
|
|
139
|
+
// Arrange
|
|
140
|
+
var go = new GameObject("SmallCamera");
|
|
141
|
+
go.AddComponent<Camera>();
|
|
142
|
+
|
|
143
|
+
// Act — small render texture to keep the test fast
|
|
144
|
+
RunTool("screenshot-camera", $@"{{
|
|
145
|
+
""cameraRef"": {{
|
|
146
|
+
""instanceID"": {go.GetInstanceID()}
|
|
147
|
+
}},
|
|
148
|
+
""width"": 16,
|
|
149
|
+
""height"": 16
|
|
150
|
+
}}");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
#endif
|