diff --git a/.editorconfig b/.editorconfig
index f283fbd..b2af3e1 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -267,13 +267,6 @@ resharper_switch_statement_handles_some_known_enum_values_with_default_highlight
# BannedApiAnalyzers
dotnet_diagnostic.RS0030.severity = error
-# Suppress C#8.0+ syntax sugar (for under Unity 2020.2 compatibility)
-# See: https://www.jetbrains.com/help/resharper/Reference__Code_Inspections_CSHARP.html
-resharper_convert_to_using_declaration_highlighting = none
-resharper_convert_to_null_coalescing_compound_assignment_highlighting = none
-resharper_merge_into_logical_pattern_highlighting = none
-resharper_use_negated_pattern_in_is_expression_highlighting = none
-
# Test codes for Unity Test Framework
[Tests/**/*.cs]
diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml
index a506005..cccca02 100644
--- a/.github/workflows/test-integration.yml
+++ b/.github/workflows/test-integration.yml
@@ -22,7 +22,7 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event.inputs.runner }}
cancel-in-progress: true
-permissions: {}
+permissions: { }
defaults:
run:
@@ -40,16 +40,14 @@ jobs:
fail-fast: false
matrix:
unityVersion: # Available versions see: https://game.ci/docs/docker/versions
- - 2019.4.40f1
- - 2020.3.48f1
- - 2021.3.45f1
- - 2022.3.59f1
- - 2023.2.20f1
- - 6000.0.41f1
+ - 6000.0.43f1
+ - 6000.0.44f1 # pin test-framework v1.5.1
+ - 6000.0.59f2 # pin test-framework v1.6.0
+ - 6000.2.7f2
testMode:
- All # run tests in editor
include:
- - unityVersion: 6000.0.41f1
+ - unityVersion: 6000.2.7f2
testMode: Standalone # run tests on player
steps:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index c08470f..f2df688 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -22,7 +22,7 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
-permissions: {}
+permissions: { }
defaults:
run:
@@ -41,18 +41,18 @@ jobs:
fail-fast: false
matrix:
unityVersion: # Available versions see: https://game.ci/docs/docker/versions
- - 2019.4.40f1
- - 2020.3.48f1
- - 2021.3.45f1
- - 2022.3.59f1
- - 2023.2.20f1
- - 6000.0.41f1
+ - 6000.0.43f1
+ - 6000.0.44f1 # pin test-framework v1.5.1
+ - 6000.0.59f2 # pin test-framework v1.6.0
+ - 6000.2.5f1 # pin test-framework v1.5.1
+ - 6000.2.6f1 # pin test-framework v1.6.0
+ - 6000.2.7f2
testMode:
- All # run tests in editor
include:
- - unityVersion: 6000.0.41f1
+ - unityVersion: 6000.2.7f2
octocov: true
- - unityVersion: 6000.0.41f1
+ - unityVersion: 6000.2.7f2
testMode: Standalone # run tests on player
steps:
diff --git a/Assets/APIExamples/Scripts/Editor/AssemblyInfo.cs b/Assets/APIExamples/Scripts/Editor/AssemblyInfo.cs
new file mode 100644
index 0000000..9298f68
--- /dev/null
+++ b/Assets/APIExamples/Scripts/Editor/AssemblyInfo.cs
@@ -0,0 +1,6 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("APIExample.Editor.Tests")]
diff --git a/Assets/APIExamples/Scripts/Editor/AssemblyInfo.cs.meta b/Assets/APIExamples/Scripts/Editor/AssemblyInfo.cs.meta
new file mode 100644
index 0000000..4fe5608
--- /dev/null
+++ b/Assets/APIExamples/Scripts/Editor/AssemblyInfo.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: bc037e1c350f40a3a59332c04c1d04db
+timeCreated: 1754943039
\ No newline at end of file
diff --git a/Assets/APIExamples/Scripts/Runtime/AssemblyInfo.cs b/Assets/APIExamples/Scripts/Runtime/AssemblyInfo.cs
new file mode 100644
index 0000000..11d7d2d
--- /dev/null
+++ b/Assets/APIExamples/Scripts/Runtime/AssemblyInfo.cs
@@ -0,0 +1,8 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("APIExample.Editor")]
+[assembly: InternalsVisibleTo("APIExample.Editor.Tests")]
+[assembly: InternalsVisibleTo("APIExample.Tests")]
diff --git a/Assets/APIExamples/Scripts/Runtime/AssemblyInfo.cs.meta b/Assets/APIExamples/Scripts/Runtime/AssemblyInfo.cs.meta
new file mode 100644
index 0000000..ede76e1
--- /dev/null
+++ b/Assets/APIExamples/Scripts/Runtime/AssemblyInfo.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: e2cc40258a6e456581745f8d7b639e68
+timeCreated: 1754943055
\ No newline at end of file
diff --git a/Assets/APIExamples/Scripts/Runtime/Element.cs b/Assets/APIExamples/Scripts/Runtime/Element.cs
index e2fb6fc..8ff1d70 100644
--- a/Assets/APIExamples/Scripts/Runtime/Element.cs
+++ b/Assets/APIExamples/Scripts/Runtime/Element.cs
@@ -6,11 +6,8 @@
namespace APIExamples
{
///
- /// 元素的な属性.
+ /// 元素的な属性
///
- ///
- /// このenumは BasicExample.Entities.Enums.Element とは異なります(仕様を簡略化しました)
- ///
public enum Element
{
None,
@@ -22,7 +19,7 @@ public enum Element
public static class ElementExtensions
{
///
- /// 属性名を返す.
+ /// 属性名を返す
///
///
///
@@ -44,7 +41,7 @@ public static string GetName(this Element self)
}
///
- /// 属性攻撃を受けたときの被ダメージ倍率を返す.
+ /// 属性攻撃を受けたときの被ダメージ倍率を返す
///
///
/// 攻撃側の属性
diff --git a/Assets/APIExamples/Tests/Editor/APIExamples.Editor.Tests.asmdef b/Assets/APIExamples/Tests/Editor/APIExamples.Editor.Tests.asmdef
index bc9c284..bd148d2 100644
--- a/Assets/APIExamples/Tests/Editor/APIExamples.Editor.Tests.asmdef
+++ b/Assets/APIExamples/Tests/Editor/APIExamples.Editor.Tests.asmdef
@@ -4,7 +4,9 @@
"references": [
"UnityEngine.TestRunner",
"UnityEditor.TestRunner",
- "UniTask"
+ "APIExamples.Tests",
+ "UniTask",
+ "TestHelper"
],
"includePlatforms": [
"Editor"
@@ -19,6 +21,17 @@
"defineConstraints": [
"UNITY_INCLUDE_TESTS"
],
- "versionDefines": [],
+ "versionDefines": [
+ {
+ "name": "com.unity.test-framework",
+ "expression": "1.5",
+ "define": "ENABLE_UTF_1_5"
+ },
+ {
+ "name": "com.unity.test-framework",
+ "expression": "1.6",
+ "define": "ENABLE_UTF_1_6"
+ }
+ ],
"noEngineReferences": false
}
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Editor/AssemblyInfo.cs b/Assets/APIExamples/Tests/Editor/AssemblyInfo.cs
index 13b338d..d26dd20 100644
--- a/Assets/APIExamples/Tests/Editor/AssemblyInfo.cs
+++ b/Assets/APIExamples/Tests/Editor/AssemblyInfo.cs
@@ -1,6 +1,5 @@
-// Copyright (c) 2021-2022 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
-using NUnit.Framework;
-[assembly: Category("APIExamples")]
+
diff --git a/Assets/APIExamples/Tests/Editor/NUnit/AsyncSetupAttributeExample.cs b/Assets/APIExamples/Tests/Editor/NUnit/AsyncSetupAttributeExample.cs
index 02a2f6d..7cf8cfa 100644
--- a/Assets/APIExamples/Tests/Editor/NUnit/AsyncSetupAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Editor/NUnit/AsyncSetupAttributeExample.cs
@@ -1,46 +1,57 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
+using System.Collections;
using System.Threading.Tasks;
using NUnit.Framework;
-using UnityEngine;
-
-#pragma warning disable CS1998
+using UnityEngine.TestTools;
namespace APIExamples.Editor.NUnit
{
///
- /// 非同期のの例(Edit Modeテスト)
- /// はasyncサポートされていない(UTF v1.3時点)
+ /// 非同期のの使用例(Edit Modeテスト)
+ /// はasyncサポートされていない(UTF v1.6.0時点)
+ ///
/// Async SetUp attribute example (in Edit Mode tests)
- /// Async OneTimeSetUp attribute is not yet supported in UTF v1.3
+ /// Async OneTimeSetUp attribute is not yet supported in UTF v1.6.0
///
///
/// Required: Unity Test Framework v1.3 or later
///
+ ///
[TestFixture]
public class AsyncSetupAttributeExample
{
+ private int _setupCount;
+
///
/// 各テストメソッドの前に実行されます
///
[SetUp]
- public async Task SetUp()
+ public async Task SetUpAsync()
{
- await Task.Delay(200);
- Debug.Log($"SetUp, {Time.time}");
+ await Task.Yield();
+ _setupCount++;
}
- [Test]
+ [Test, Order(0)]
public void TestMethod()
{
- Debug.Log($"TestMethod, {Time.time}");
+ Assert.That(_setupCount, Is.EqualTo(1), "最初のテストなのでSetUpは1回実行されている");
+ }
+
+ [Test, Order(1)]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Assert.That(_setupCount, Is.EqualTo(2), "2番目のテストなのでSetUpは2回実行されている");
}
- [Test]
- public void TestMethod2()
+ [UnityTest, Order(2)]
+ public IEnumerator UnityTestMethod()
{
- Debug.Log($"TestMethod2, {Time.time}");
+ yield return null;
+ Assert.That(_setupCount, Is.EqualTo(3), "3番目のテストなのでSetUpは3回実行されている");
}
}
}
diff --git a/Assets/APIExamples/Tests/Editor/NUnit/AsyncTearDownAttributeExample.cs b/Assets/APIExamples/Tests/Editor/NUnit/AsyncTearDownAttributeExample.cs
index 2464845..017c3a8 100644
--- a/Assets/APIExamples/Tests/Editor/NUnit/AsyncTearDownAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Editor/NUnit/AsyncTearDownAttributeExample.cs
@@ -1,23 +1,25 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
+using System.Collections;
using System.Threading.Tasks;
using NUnit.Framework;
using UnityEngine;
-
-#pragma warning disable CS1998
+using UnityEngine.TestTools;
namespace APIExamples.Editor.NUnit
{
///
- /// 非同期のの例(Edit Modeテスト)
- /// はasyncサポートされていない(UTF v1.3時点)
+ /// 非同期のの使用例(Edit Modeテスト)
+ /// はasyncサポートされていない(UTF v1.6.0時点)
+ ///
/// Async TearDown attribute example (in Edit Mode tests)
- /// Async OneTimeTearDown attribute is not yet supported in UTF v1.3
+ /// Async OneTimeTearDown attribute is not yet supported in UTF v1.6.0
///
///
/// Required: Unity Test Framework v1.3 or later
///
+ ///
[TestFixture]
public class AsyncTearDownAttributeExample
{
@@ -25,22 +27,30 @@ public class AsyncTearDownAttributeExample
/// 各テストメソッドの後に実行されます
///
[TearDown]
- public async Task TearDown()
+ public async Task TearDownAsync()
{
- await Task.Delay(200);
- Debug.Log($"TearDown, {Time.time}");
+ await Task.Yield();
+ Debug.Log($"TearDownAsync");
}
[Test]
public void TestMethod()
{
- Debug.Log($"TestMethod, {Time.time}");
+ Debug.Log($"TestMethod");
}
[Test]
- public void TestMethod2()
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Debug.Log($"TestMethodAsync");
+ }
+
+ [UnityTest]
+ public IEnumerator UnityTestMethod()
{
- Debug.Log($"TestMethod2, {Time.time}");
+ yield return null;
+ Debug.Log($"UnityTestMethod");
}
}
}
diff --git a/Assets/APIExamples/Tests/Editor/NUnit/AsyncTestExample.cs b/Assets/APIExamples/Tests/Editor/NUnit/AsyncTestExample.cs
index f41e73c..f24bae7 100644
--- a/Assets/APIExamples/Tests/Editor/NUnit/AsyncTestExample.cs
+++ b/Assets/APIExamples/Tests/Editor/NUnit/AsyncTestExample.cs
@@ -1,4 +1,4 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System;
@@ -8,9 +8,6 @@
using NUnit.Framework;
using UnityEngine;
-#pragma warning disable CS1998
-// ReSharper disable AccessToStaticMemberViaDerivedType
-
namespace APIExamples.Editor.NUnit
{
///
@@ -35,13 +32,13 @@ public class AsyncTestExample
private static async Task Foo(int id)
{
- await Task.Delay(200);
+ await Task.Yield();
Debug.Log($"Foo({id})");
}
private static async Task Bar(int id)
{
- await Task.Delay(200);
+ await Task.Yield();
Debug.Log($"Bar({id})");
return id + 1;
}
@@ -58,13 +55,13 @@ private static async Task Bar(int id)
private static async UniTask UniTaskFoo(int id)
{
- await UniTask.Delay(200);
+ await Task.Yield();
Debug.Log($"UniTaskFoo({id})");
}
private static async UniTask UniTaskBar(int id)
{
- await UniTask.Delay(200);
+ await Task.Yield();
Debug.Log($"UniTaskBar({id})");
return id + 1;
}
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/EditModeTestYieldInstructionExample.cs b/Assets/APIExamples/Tests/Editor/UnityTestFramework/EditModeTestYieldInstructionExample.cs
index bfbbd72..f0f57ac 100644
--- a/Assets/APIExamples/Tests/Editor/UnityTestFramework/EditModeTestYieldInstructionExample.cs
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/EditModeTestYieldInstructionExample.cs
@@ -1,8 +1,9 @@
-// Copyright (c) 2021-2022 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System;
using System.Collections;
+using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Reflection;
using System.Threading.Tasks;
@@ -16,39 +17,59 @@ namespace APIExamples.Editor.UnityTestFramework
///
/// の使用例
///
+ [SuppressMessage("Structure", "NUnit1028:The non-test method is public")]
public class EditModeTestYieldInstructionExample
{
+ private static bool s_wasInitializeOnEnterPlayModeCalled;
+ private static bool s_wasRuntimeInitializeOnLoadMethodCalled;
+ private static bool s_wasOneTimeSetUpCalled;
+ private static bool s_wasUnitySetUpCalled;
+ private static bool s_wasSetUpCalled;
+ private static bool s_wasSetUpAsyncCalled;
+
private const string CsPath = "Assets/CreateFileExample.cs";
private const string DLLSrcPath = "TestData/NativePluginExample.dll";
private const string DLLDstPath = "Assets/NativePluginExample.dll";
+ [InitializeOnEnterPlayMode]
+ public static void InitializeOnEnterPlayMode()
+ {
+ s_wasInitializeOnEnterPlayModeCalled = true;
+ }
+
+ [RuntimeInitializeOnLoadMethod]
+ public static void RuntimeInitializeOnLoadMethod()
+ {
+ s_wasRuntimeInitializeOnLoadMethodCalled = true;
+ }
+
[OneTimeSetUp]
public void OneTimeSetUp()
{
Assume.That(EditorSettings.enterPlayModeOptionsEnabled, Is.False, "Enter Play Mode Options enabled");
// Note: Edit | Project Settings... | Editor | Enter Play Mode Settings が変更されていないことが前提
- Debug.Log("OneTimeSetUpはドメインリロードで再実行されます");
+ s_wasOneTimeSetUpCalled = true;
}
[UnitySetUp]
public IEnumerator UnitySetUp()
{
- Debug.Log("UnitySetUpはドメインリロードで再実行されません");
+ s_wasUnitySetUpCalled = true;
yield break;
}
[SetUp]
public void SetUp()
{
- Debug.Log("SetUpはドメインリロードで再実行されます");
+ s_wasSetUpCalled = true;
}
[SetUp]
public async Task SetUpAsync()
{
- Debug.Log("SetUpAsyncはドメインリロードで再実行されます");
- await Task.Delay(1);
+ s_wasSetUpAsyncCalled = true;
+ await Task.Yield();
}
[TearDown]
@@ -60,15 +81,34 @@ public void TearDown()
}
[UnityTest]
- public IEnumerator EnterPlayModeの使用例()
+ public IEnumerator EnterPlayModeで再生モードに切り替える例()
{
yield return new EnterPlayMode();
+
Assert.That(EditorApplication.isPlaying, Is.True);
// Note: 特に後処理をしなくてもテスト終了後に編集モードに戻ります
}
[UnityTest]
- public IEnumerator ExitPlayModeの使用例()
+ public IEnumerator EnterPlayModeで再生モードに切り替える例_InitializeOnEnterPlayModeが実行される()
+ {
+ yield return new EnterPlayMode();
+ // Note: staticフィールドの値はドメインリロードで初期化されます
+
+ Assert.That(s_wasInitializeOnEnterPlayModeCalled, Is.True);
+ }
+
+ [UnityTest]
+ public IEnumerator EnterPlayModeで再生モードに切り替える例_RuntimeInitializeOnLoadMethodが実行される()
+ {
+ yield return new EnterPlayMode();
+ // Note: staticフィールドの値はドメインリロードで初期化されます
+
+ Assert.That(s_wasRuntimeInitializeOnLoadMethodCalled, Is.True);
+ }
+
+ [UnityTest]
+ public IEnumerator ExitPlayModeで編集モードに切り替える例()
{
yield return new EnterPlayMode();
Assume.That(EditorApplication.isPlaying, Is.True);
@@ -78,7 +118,7 @@ public void TearDown()
}
[UnityTest]
- public IEnumerator RecompileScriptsでリコンパイルされたクラスのメソッドを呼び出す例()
+ public IEnumerator RecompileScriptsでリコンパイルを実行する例_リコンパイルされたクラスのメソッドを呼び出せる()
{
Assume.That(Path.GetFullPath(CsPath), Does.Not.Exist,
"Destination file already exists. please remove and re-run this test.");
@@ -102,7 +142,7 @@ public void TearDown()
}
[UnityTest]
- public IEnumerator WaitForDomainReloadで追加されたアセンブリのメソッドを呼び出す例()
+ public IEnumerator WaitForDomainReloadでドメインリロードを待機する例_追加されたアセンブリのメソッドを呼び出せる()
{
Assume.That(Path.GetFullPath(DLLDstPath), Does.Not.Exist,
"Destination file already exists. please remove and re-run this test.");
@@ -120,5 +160,41 @@ public void TearDown()
Assert.That(actual, Is.True);
}
+
+ [UnityTest]
+ public IEnumerator ドメインリロード発生時にOneTimeSetUpは再実行される()
+ {
+ yield return new EnterPlayMode();
+ // Note: staticフィールドの値はドメインリロードで初期化されます
+
+ Assert.That(s_wasOneTimeSetUpCalled, Is.True);
+ }
+
+ [UnityTest]
+ public IEnumerator ドメインリロード発生時にUnitySetUpは再実行さない()
+ {
+ yield return new EnterPlayMode();
+ // Note: staticフィールドの値はドメインリロードで初期化されます
+
+ Assert.That(s_wasUnitySetUpCalled, Is.False);
+ }
+
+ [UnityTest]
+ public IEnumerator ドメインリロード発生時にSetUpは再実行される()
+ {
+ yield return new EnterPlayMode();
+ // Note: staticフィールドの値はドメインリロードで初期化されます
+
+ Assert.That(s_wasSetUpCalled, Is.True);
+ }
+
+ [UnityTest]
+ public IEnumerator ドメインリロード発生時にSetUpAsyncは再実行される()
+ {
+ yield return new EnterPlayMode();
+ // Note: staticフィールドの値はドメインリロードで初期化されます
+
+ Assert.That(s_wasSetUpAsyncCalled, Is.True);
+ }
}
}
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs
new file mode 100644
index 0000000..ada2be4
--- /dev/null
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs
@@ -0,0 +1,73 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+#if ENABLE_UTF_1_5
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+using System.Threading.Tasks;
+using APIExamples.NUnit;
+using NUnit.Framework;
+using UnityEngine.TestTools;
+using Is = APIExamples.NUnit.Is;
+
+namespace APIExamples.Editor.UnityTestFramework
+{
+ ///
+ /// の使用例
+ ///
+ ///
+ /// Required: Unity Test Framework v1.5 or later
+ ///
+ ///
+ ///
+ [TestFixture]
+ [SuppressMessage("ReSharper", "AccessToStaticMemberViaDerivedType")]
+ public class UnityOneTimeSetupAttributeExample
+ {
+ private int _oneTimeSetupCount;
+ private int _setupCount;
+
+ ///
+ /// テストクラス内の最初のテストの実行前に一度だけ実行されます
+ ///
+ [UnityOneTimeSetUp]
+ public IEnumerator OneTimeSetUp()
+ {
+ yield return null;
+ _oneTimeSetupCount++;
+ }
+
+ ///
+ /// 各テストメソッドの前に実行されます
+ ///
+ [SetUp]
+ public void SetUp()
+ {
+ _setupCount++;
+ }
+
+ [Test, Order(0)]
+ public void TestMethod()
+ {
+ Assert.That(_oneTimeSetupCount, Is.EqualTo(1), "OneTimeSetUpはTestFixtureごとに一度だけ実行される");
+ Assert.That(_setupCount, Is.EqualTo(1), "最初のテストなのでSetUpは1回実行されている");
+ }
+
+ [Test, Order(1)]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Assert.That(_oneTimeSetupCount, Is.EqualTo(1), "OneTimeSetUpはTestFixtureごとに一度だけ実行される");
+ Assert.That(_setupCount, Is.EqualTo(2), "2番目のテストなのでSetUpは2回実行されている");
+ }
+
+ [UnityTest, Order(2)]
+ public IEnumerator UnityTestMethod()
+ {
+ yield return null;
+ Assert.That(_oneTimeSetupCount, Is.EqualTo(1), "OneTimeSetUpはTestFixtureごとに一度だけ実行される");
+ Assert.That(_setupCount, Is.EqualTo(3), "3番目のテストなのでSetUpは3回実行されている");
+ }
+ }
+}
+#endif
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs.meta b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs.meta
new file mode 100644
index 0000000..7f9627c
--- /dev/null
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: dc4b105e00624aac8b90c524c27db1c7
+timeCreated: 1762467282
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs
new file mode 100644
index 0000000..35eb39f
--- /dev/null
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs
@@ -0,0 +1,76 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+#if ENABLE_UTF_1_5
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+using System.Threading.Tasks;
+using APIExamples.NUnit;
+using NUnit.Framework;
+using UnityEngine;
+using UnityEngine.TestTools;
+using Is = APIExamples.NUnit.Is;
+
+namespace APIExamples.Editor.UnityTestFramework
+{
+ ///
+ /// の使用例
+ ///
+ ///
+ /// Required: Unity Test Framework v1.5 or later
+ ///
+ ///
+ ///
+ [TestFixture]
+ [SuppressMessage("ReSharper", "AccessToStaticMemberViaDerivedType")]
+ public class UnityOneTimeTearDownAttributeExample
+ {
+ private int _oneTimeTeardownCount;
+ private int _teardownCount;
+
+ ///
+ /// クラス内の最後のテストの実行後に一度だけ実行されます
+ ///
+ [UnityOneTimeTearDown]
+ public IEnumerator OneTimeTearDown()
+ {
+ yield return null;
+ Debug.Log($"UnityOneTimeTearDown");
+ _oneTimeTeardownCount++;
+
+ Assert.That(_oneTimeTeardownCount, Is.EqualTo(1), "OneTimeTearDownはTestFixtureごとに一度だけ実行される");
+ Assert.That(_teardownCount, Is.EqualTo(3), "3つのテストがあるのでTearDownは3回実行されている");
+ }
+
+ ///
+ /// 各テストメソッドの後に実行されます
+ ///
+ [TearDown]
+ public void TearDown()
+ {
+ Debug.Log($"TearDown");
+ _teardownCount++;
+ }
+
+ [Test]
+ public void TestMethod()
+ {
+ Debug.Log($"TestMethod");
+ }
+
+ [Test]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Debug.Log($"TestMethodAsync");
+ }
+
+ [UnityTest]
+ public IEnumerator UnityTestMethod()
+ {
+ yield return null;
+ Debug.Log($"UnityTestMethod");
+ }
+ }
+}
+#endif
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs.meta b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs.meta
new file mode 100644
index 0000000..46ac3e2
--- /dev/null
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: fff43dc8c86648aead6768826c0ee184
+timeCreated: 1762467282
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnitySetUpAttributeExample.cs b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnitySetUpAttributeExample.cs
new file mode 100644
index 0000000..4d94027
--- /dev/null
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnitySetUpAttributeExample.cs
@@ -0,0 +1,51 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Collections;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using UnityEngine.TestTools;
+
+namespace APIExamples.Editor.UnityTestFramework
+{
+ ///
+ /// の使用例
+ ///
+ ///
+ [TestFixture]
+ public class UnitySetUpAttributeExample
+ {
+ private int _setupCount;
+
+ ///
+ /// SetUpをコルーチン書式で記述できます
+ /// 専用ではなく、通常のTest向けのSetUpとしても使用できます
+ ///
+ [UnitySetUp]
+ public IEnumerator SetUpCoroutine()
+ {
+ yield return null;
+ _setupCount++;
+ }
+
+ [Test, Order(0)]
+ public void TestMethod()
+ {
+ Assert.That(_setupCount, Is.EqualTo(1), "最初のテストなのでSetUpは1回実行されている");
+ }
+
+ [Test, Order(1)]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Assert.That(_setupCount, Is.EqualTo(2), "2番目のテストなのでSetUpは2回実行されている");
+ }
+
+ [UnityTest, Order(2)]
+ public IEnumerator UnityTestMethod()
+ {
+ yield return null;
+ Assert.That(_setupCount, Is.EqualTo(3), "3番目のテストなのでSetUpは3回実行されている");
+ }
+ }
+}
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnitySetUpAttributeExample.cs.meta b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnitySetUpAttributeExample.cs.meta
new file mode 100644
index 0000000..af6b98f
--- /dev/null
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnitySetUpAttributeExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b07d09a814004048af278e139b81f903
+timeCreated: 1762465453
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTearDownAttributeExample.cs b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTearDownAttributeExample.cs
new file mode 100644
index 0000000..4657374
--- /dev/null
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTearDownAttributeExample.cs
@@ -0,0 +1,50 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Collections;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using UnityEngine;
+using UnityEngine.TestTools;
+
+namespace APIExamples.Editor.UnityTestFramework
+{
+ ///
+ /// の使用例
+ ///
+ ///
+ [TestFixture]
+ public class UnityTearDownAttributeExample
+ {
+ ///
+ /// TearDownをコルーチン書式で記述できます
+ /// 専用ではなく、通常のTest向けのTearDownとしても使用できます
+ ///
+ [UnityTearDown]
+ public IEnumerator TearDownCoroutine()
+ {
+ yield return null;
+ Debug.Log($"TearDown");
+ }
+
+ [Test]
+ public void TestMethod()
+ {
+ Debug.Log($"TestMethod");
+ }
+
+ [Test]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Debug.Log($"TestMethodAsync");
+ }
+
+ [UnityTest]
+ public IEnumerator UnityTestMethod()
+ {
+ yield return null;
+ Debug.Log($"UnityTestMethod");
+ }
+ }
+}
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTearDownAttributeExample.cs.meta b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTearDownAttributeExample.cs.meta
new file mode 100644
index 0000000..558afc8
--- /dev/null
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTearDownAttributeExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 3e67f7d46673461fad71d72b4fd1bbf0
+timeCreated: 1762465453
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestAttributeExample.cs b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestAttributeExample.cs
index 0364c89..0c75cb4 100644
--- a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestAttributeExample.cs
@@ -1,4 +1,4 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System;
@@ -12,10 +12,9 @@ namespace APIExamples.Editor.UnityTestFramework
{
///
/// フレームをまたがるテストをで実装する例
- /// UniTaskの使用例を含みます
///
///
- /// Runtime/UnityTestFramework/UnityTestAttributeExampleをベースに、Edit Modeで動くもの
+ /// をベースに、Edit Modeテスト向けに修正したもの
///
[TestFixture]
public class UnityTestAttributeExample
@@ -25,6 +24,7 @@ public class UnityTestAttributeExample
{
var before = Time.frameCount;
yield return null;
+
var actual = Time.frameCount;
Assert.That(actual, Is.EqualTo(before)); // Note: Edit Modeテストではそもそもフレームカウントされない
@@ -37,23 +37,26 @@ public class UnityTestAttributeExample
}
[UnityTest]
- [Explicit("Edit ModeテストではWaitForEndOfFrameがエラーとなるため実行対象から除外")]
- public IEnumerator YieldInstructionの実装クラスはEditMoteテストでは使用できない_実行時エラー()
+ [Explicit("Edit Modeテストでは動作しない")]
+ public IEnumerator YieldInstructionの実装クラス_EditMoteテストでは動作しない()
{
- var before = Time.frameCount;
- yield return new WaitForEndOfFrame();
- var actual = Time.frameCount;
+ var start = Time.time; // The time at the beginning of this frame
+ const float WaitSeconds = 0.5f;
+ yield return new WaitForSeconds(WaitSeconds);
+
+ var actual = Time.time - start;
- Assert.That(actual, Is.EqualTo(before));
+ Assert.That(actual, Is.EqualTo(WaitSeconds).Within(0.1f));
}
[UnityTest]
- [Explicit("Edit ModeテストではWaitForSecondsRealtimeが動作しないため実行対象から除外")]
- public IEnumerator CustomYieldInstructionの実装クラスはEditMoteテストでは使用できない_動作しない()
+ [Explicit("Edit Modeテストでは動作しない")]
+ public IEnumerator CustomYieldInstructionの実装クラス_EditMoteテストでは動作しない()
{
var start = Time.time; // The time at the beginning of this frame
const float WaitSeconds = 0.5f;
yield return new WaitForSecondsRealtime(WaitSeconds);
+
var actual = Time.time - start;
Assert.That(actual, Is.EqualTo(WaitSeconds).Within(0.1f));
@@ -83,6 +86,7 @@ public class UnityTestAttributeExample
public IEnumerator コルーチンを起動してコールバックを受け取る例()
{
var actual = 0;
+
yield return BarCoroutine(i =>
{
actual = i;
@@ -91,11 +95,12 @@ public class UnityTestAttributeExample
Assert.That(actual, Is.EqualTo(1));
}
- [Ignore("Edit Modeテストではテストが終了しないため実行対象から除外/ Freeze in the Edit Mode tests")]
[UnityTest]
+ [Ignore("Edit Modeテストではテストが終了しないため実行対象から除外/ Freeze in the Edit Mode tests")]
public IEnumerator UniTaskでコルーチンを起動してコールバックを受け取る例_EditModeテストではテストが終了しない() => UniTask.ToCoroutine(async () =>
{
var actual = 0;
+
await BarCoroutine(i =>
{
actual = i;
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestFrameworkVersionCheck.cs b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestFrameworkVersionCheck.cs
new file mode 100644
index 0000000..5a4c958
--- /dev/null
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestFrameworkVersionCheck.cs
@@ -0,0 +1,71 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Linq;
+using System.Threading.Tasks;
+using Cysharp.Threading.Tasks;
+using NUnit.Framework;
+using TestHelper.Attributes;
+using UnityEditor.PackageManager;
+
+namespace APIExamples.Editor.UnityTestFramework
+{
+ [TestFixture]
+ public class UnityTestFrameworkVersionCheck
+ {
+ private static async UniTask GetTestFrameworkPackageVersionAsync()
+ {
+ var request = Client.List(false, false);
+ while (!request.IsCompleted)
+ {
+ await UniTask.Yield();
+ }
+
+ Assume.That(request.Status, Is.EqualTo(StatusCode.Success));
+
+ return request.Result.Where(x => x.name == "com.unity.test-framework")
+ .Select(x => x.version)
+ .FirstOrDefault();
+ }
+
+ [Test]
+ [UnityVersion(olderThan: "6000.0.44f1")]
+ public async Task Unity6000_0_43f1まで_TestFrameworkバージョンは任意()
+ {
+ var actual = await GetTestFrameworkPackageVersionAsync();
+ Assert.That(actual, Is.EqualTo("1.4.6"));
+ }
+
+ [Test]
+ [UnityVersion(newerThanOrEqual: "6000.0.44f1", olderThan: "6000.0.59f2")]
+ public async Task Unity6000_0_44f1から58f2まで_TestFrameworkはv1_5_1固定()
+ {
+ var actual = await GetTestFrameworkPackageVersionAsync();
+ Assert.That(actual, Is.EqualTo("1.5.1"));
+ }
+
+ [Test]
+ [UnityVersion(newerThanOrEqual: "6000.0.59f2", olderThan: "6000.1.0f1")]
+ public async Task Unity6000_0_59f2以降_TestFrameworkはv1_6_0固定()
+ {
+ var actual = await GetTestFrameworkPackageVersionAsync();
+ Assert.That(actual, Is.EqualTo("1.6.0"));
+ }
+
+ [Test]
+ [UnityVersion(newerThanOrEqual: "6000.1.0f1", olderThan: "6000.2.6f1")]
+ public async Task Unity6000_1_0f1から6000_2_5f1まで_TestFrameworkはv1_5_1固定()
+ {
+ var actual = await GetTestFrameworkPackageVersionAsync();
+ Assert.That(actual, Is.EqualTo("1.5.1"));
+ }
+
+ [Test]
+ [UnityVersion(newerThanOrEqual: "6000.2.6f1")]
+ public async Task Unity6000_2_6f1以降_TestFrameworkはv1_6_0固定()
+ {
+ var actual = await GetTestFrameworkPackageVersionAsync();
+ Assert.That(actual, Is.EqualTo("1.6.0"));
+ }
+ }
+}
diff --git a/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestFrameworkVersionCheck.cs.meta b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestFrameworkVersionCheck.cs.meta
new file mode 100644
index 0000000..b199776
--- /dev/null
+++ b/Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestFrameworkVersionCheck.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 91e2dca48c4042ac8e1d516baf3e96c5
+timeCreated: 1759567497
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Runtime/APIExamples.Tests.asmdef b/Assets/APIExamples/Tests/Runtime/APIExamples.Tests.asmdef
index 176c69b..fac6e79 100644
--- a/Assets/APIExamples/Tests/Runtime/APIExamples.Tests.asmdef
+++ b/Assets/APIExamples/Tests/Runtime/APIExamples.Tests.asmdef
@@ -5,7 +5,8 @@
"UnityEngine.TestRunner",
"UnityEditor.TestRunner",
"APIExamples",
- "UniTask"
+ "UniTask",
+ "TestHelper"
],
"includePlatforms": [],
"excludePlatforms": [],
@@ -18,6 +19,17 @@
"defineConstraints": [
"UNITY_INCLUDE_TESTS"
],
- "versionDefines": [],
+ "versionDefines": [
+ {
+ "name": "com.unity.test-framework",
+ "expression": "1.5",
+ "define": "ENABLE_UTF_1_5"
+ },
+ {
+ "name": "com.unity.test-framework",
+ "expression": "1.6",
+ "define": "ENABLE_UTF_1_6"
+ }
+ ],
"noEngineReferences": false
}
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Runtime/AssemblyInfo.cs b/Assets/APIExamples/Tests/Runtime/AssemblyInfo.cs
index 13b338d..c863ac1 100644
--- a/Assets/APIExamples/Tests/Runtime/AssemblyInfo.cs
+++ b/Assets/APIExamples/Tests/Runtime/AssemblyInfo.cs
@@ -1,6 +1,6 @@
-// Copyright (c) 2021-2022 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
-using NUnit.Framework;
+using System.Runtime.CompilerServices;
-[assembly: Category("APIExamples")]
+[assembly: InternalsVisibleTo("APIExample.Editor.Tests")]
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/AsyncSetupAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/AsyncSetupAttributeExample.cs
index 8404772..78552e6 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/AsyncSetupAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/AsyncSetupAttributeExample.cs
@@ -1,49 +1,61 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
using NUnit.Framework;
-using UnityEngine;
using UnityEngine.TestTools;
-#pragma warning disable CS1998
-
namespace APIExamples.NUnit
{
///
- /// 非同期のの例
- /// はasyncサポートされていない(UTF v1.3時点)
+ /// 非同期のの使用例
+ /// はasyncサポートされていない(UTF v1.6.0時点)
+ ///
/// Async SetUp attribute example
- /// Async OneTimeSetUp attribute is not yet supported in UTF v1.3
+ /// Async OneTimeSetUp attribute is not yet supported in UTF v1.6.0
///
///
/// Required: Unity Test Framework v1.3 or later
///
+ ///
+ ///
+ ///
[TestFixture]
- [UnityPlatform(exclude = new[] { RuntimePlatform.WebGLPlayer })]
- // WebGLではTask.Delayが終了しない(v1.3.9時点) https://unity3d.atlassian.net/servicedesk/customer/portal/2/IN-28109
+ [SuppressMessage("ReSharper", "AccessToStaticMemberViaDerivedType")]
public class AsyncSetupAttributeExample
{
+ private int _setupCount;
+
///
/// 各テストメソッドの前に実行されます
///
[SetUp]
- public async Task SetUp()
+ public async Task SetUpAsync()
{
- await Task.Delay(200);
- Debug.Log($"SetUp, {Time.time}");
+ await Task.Yield();
+ _setupCount++;
}
- [Test]
+ [Test, Order(0)]
public void TestMethod()
{
- Debug.Log($"TestMethod, {Time.time}");
+ Assert.That(_setupCount, Is.EqualTo(1), "最初のテストなのでSetUpは1回実行されている");
+ }
+
+ [Test, Order(1)]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Assert.That(_setupCount, Is.EqualTo(2), "2番目のテストなのでSetUpは2回実行されている");
}
- [Test]
- public void TestMethod2()
+ [UnityTest, Order(2)]
+ public IEnumerator UnityTestMethod()
{
- Debug.Log($"TestMethod2, {Time.time}");
+ yield return null;
+ Assert.That(_setupCount, Is.EqualTo(3), "3番目のテストなのでSetUpは3回実行されている");
}
}
}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/AsyncTearDownAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/AsyncTearDownAttributeExample.cs
index c119781..4b0719a 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/AsyncTearDownAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/AsyncTearDownAttributeExample.cs
@@ -1,49 +1,58 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
+using System.Collections;
using System.Threading.Tasks;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
-#pragma warning disable CS1998
-
namespace APIExamples.NUnit
{
///
- /// 非同期のの例
- /// はasyncサポートされていない(UTF v1.3時点)
+ /// 非同期のの使用例
+ /// はasyncサポートされていない(UTF v1.6.0時点)
+ ///
/// Async TearDown attribute example
- /// Async OneTimeTearDown attribute is not yet supported in UTF v1.3
+ /// Async OneTimeTearDown attribute is not yet supported in UTF v1.6.0
///
///
/// Required: Unity Test Framework v1.3 or later
///
+ ///
+ ///
+ ///
[TestFixture]
- [UnityPlatform(exclude = new[] { RuntimePlatform.WebGLPlayer })]
- // WebGLではTask.Delayが終了しない(v1.3.9時点) https://unity3d.atlassian.net/servicedesk/customer/portal/2/IN-28109
public class AsyncTearDownAttributeExample
{
///
/// 各テストメソッドの後に実行されます
///
[TearDown]
- public async Task TearDown()
+ public async Task TearDownAsync()
{
- await Task.Delay(200);
- Debug.Log($"TearDown, {Time.time}");
+ await Task.Yield();
+ Debug.Log($"TearDownAsync");
}
[Test]
public void TestMethod()
{
- Debug.Log($"TestMethod, {Time.time}");
+ Debug.Log($"TestMethod");
}
[Test]
- public void TestMethod2()
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Debug.Log($"TestMethodAsync");
+ }
+
+ [UnityTest]
+ public IEnumerator UnityTestMethod()
{
- Debug.Log($"TestMethod2, {Time.time}");
+ yield return null;
+ Debug.Log($"UnityTestMethod");
}
}
}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/AsyncTestExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/AsyncTestExample.cs
index b0491e2..c10197a 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/AsyncTestExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/AsyncTestExample.cs
@@ -1,4 +1,4 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System;
@@ -7,10 +7,6 @@
using Cysharp.Threading.Tasks;
using NUnit.Framework;
using UnityEngine;
-using UnityEngine.TestTools;
-
-#pragma warning disable CS1998
-// ReSharper disable AccessToStaticMemberViaDerivedType
namespace APIExamples.NUnit
{
@@ -26,8 +22,6 @@ public class AsyncTestExample
{
[Test]
[Description("Can await Task")]
- [UnityPlatform(exclude = new[] { RuntimePlatform.WebGLPlayer })]
- // WebGLではTask.Delayが終了しない(v1.3.9時点) https://unity3d.atlassian.net/servicedesk/customer/portal/2/IN-28109
public async Task 非同期テストの例_Taskをawaitできる()
{
await Foo(1);
@@ -38,13 +32,13 @@ public class AsyncTestExample
private static async Task Foo(int id)
{
- await Task.Delay(200);
+ await Task.Yield();
Debug.Log($"Foo({id})");
}
private static async Task Bar(int id)
{
- await Task.Delay(200);
+ await Task.Yield();
Debug.Log($"Bar({id})");
return id + 1;
}
@@ -61,13 +55,13 @@ private static async Task Bar(int id)
private static async UniTask UniTaskFoo(int id)
{
- await UniTask.Delay(200);
+ await Task.Yield();
Debug.Log($"UniTaskFoo({id})");
}
private static async UniTask UniTaskBar(int id)
{
- await UniTask.Delay(200);
+ await Task.Yield();
Debug.Log($"UniTaskBar({id})");
return id + 1;
}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/CategoryAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/CategoryAttributeExample.cs
index 9b04120..b75504a 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/CategoryAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/CategoryAttributeExample.cs
@@ -1,4 +1,4 @@
-// Copyright (c) 2021-2022 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using NUnit.Framework;
@@ -8,20 +8,23 @@ namespace APIExamples.NUnit
///
/// の記述例
///
+ ///
+ /// アセンブリへの配置例は、UGUIExample など統合テスト編サンプルの AssemblyInfo.cs を参照してください。
+ ///
[TestFixture]
- [Category("CategoryExample")]
+ [Category("CategoryFoo")]
public class CategoryAttributeExample
{
[Test]
- [Category("LearningTests")]
- public void CategorizedMethodExample()
+ [Category("CategoryBar")]
+ public void CategorizedMethod()
{
}
[Test]
- [Category("LearningTests")]
- [Category("IgnoreCI")]
- public void MultiCategorizedMethodExample()
+ [Category("CategoryBaz")]
+ [Category("CategoryQux")]
+ public void MultiCategorizedMethodMethod()
{
}
}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/ConstraintExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/ConstraintExample.cs
index f7023ec..d0b043b 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/ConstraintExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/ConstraintExample.cs
@@ -2,7 +2,6 @@
// This software is released under the MIT License.
using System;
-using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
@@ -801,7 +800,7 @@ void GetNotThrow() { }
// But was: Time.time, Is.GreaterThan(start + 2.0f).After(2500)); // ミリ秒しか指定できない模様
+ Assert.That(() => Time.realtimeSinceStartup, Is.GreaterThan(start + 0.2f).After(500));
// 失敗時メッセージ例:
// Expected: greater than 2.33228302f after 2500 millisecond delay
// But was: 0.33228299f
}
-
- [Test]
- [Explicit("Asyncテストでも期待通り動作しないので除外(Unity Test Framework v1.4.0時点)")]
- // https://unity3d.atlassian.net/servicedesk/customer/portal/2/IN-30529
- public async Task DelayedConstraint_AsyncTestでも無効()
- {
- var start = Time.time; // The time at the beginning of this frame
- await Task.Delay(0);
-
- Assert.That(() => Time.time, Is.GreaterThan(start + 2.0f).After(2500)); // ミリ秒しか指定できない模様
- // 失敗時メッセージ例:
- // Expected: greater than 2.33228302f after 2500 millisecond delay
- // But was: 0.33228299f
- }
-
- [UnityTest]
- [Explicit("UnityTest属性のテストでも期待通り動作しないので除外")]
- public IEnumerator DelayedConstraint_UnityTest属性のテストでも無効()
- {
- var start = Time.time; // The time at the beginning of this frame
- yield return null;
-
- Assert.That(() => Time.time, Is.GreaterThan(start + 2.0f).After(2500)); // ミリ秒しか指定できない模様
- // 失敗時メッセージ例:
- // Expected: greater than 2.39063787f after 2500 millisecond delay
- // But was: 0.390637904f
- }
}
}
}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/MaxTimeAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/MaxTimeAttributeExample.cs
index fc802c1..1558af4 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/MaxTimeAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/MaxTimeAttributeExample.cs
@@ -1,12 +1,12 @@
// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
+using System;
using System.Collections;
using System.Threading.Tasks;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
-using Debug = UnityEngine.Debug;
namespace APIExamples.NUnit
{
@@ -25,30 +25,24 @@ public class MaxTimeAttributeExample
[MaxTime(100)]
public void MaxTime属性_指定ミリ秒よりも時間のかかるテストは実行後に失敗()
{
- var loopCount = 50000000;
- var sum = 0f;
- for (var i = 0; i < loopCount; i++)
+ var endTime = DateTime.Now.AddMilliseconds(200);
+ while (DateTime.Now < endTime)
{
- sum += Random.value;
}
-
- Debug.Log("テストは最後まで実行されます");
}
[UnityTest]
[MaxTime(100)]
public IEnumerator MaxTime属性_指定ミリ秒よりも時間のかかるテストは実行後に失敗_UnityTest属性()
{
- yield return new WaitForSeconds(0.5f);
- Debug.Log("テストは最後まで実行されます");
+ yield return new WaitForSeconds(0.2f);
}
[Test]
[MaxTime(100)]
public async Task MaxTime属性_指定ミリ秒よりも時間のかかるテストは実行後に失敗_非同期テスト()
{
- await Task.Delay(500);
- Debug.Log("テストは最後まで実行されます");
+ await Task.Delay(200);
}
}
}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/OneTimeSetupAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/OneTimeSetupAttributeExample.cs
new file mode 100644
index 0000000..22422ef
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/OneTimeSetupAttributeExample.cs
@@ -0,0 +1,66 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using UnityEngine.TestTools;
+
+namespace APIExamples.NUnit
+{
+ ///
+ /// の使用例
+ ///
+ ///
+ ///
+ ///
+ [TestFixture]
+ [SuppressMessage("ReSharper", "AccessToStaticMemberViaDerivedType")]
+ public class OneTimeSetupAttributeExample
+ {
+ private int _oneTimeSetupCount;
+ private int _setupCount;
+
+ ///
+ /// テストクラス内の最初のテストの実行前に一度だけ実行されます
+ ///
+ [OneTimeSetUp]
+ public void OneTimeSetUp()
+ {
+ _oneTimeSetupCount++;
+ }
+
+ ///
+ /// 各テストメソッドの前に実行されます
+ ///
+ [SetUp]
+ public void SetUp()
+ {
+ _setupCount++;
+ }
+
+ [Test, Order(0)]
+ public void TestMethod()
+ {
+ Assert.That(_oneTimeSetupCount, Is.EqualTo(1), "OneTimeSetUpはTestFixtureごとに一度だけ実行される");
+ Assert.That(_setupCount, Is.EqualTo(1), "最初のテストなのでSetUpは1回実行されている");
+ }
+
+ [Test, Order(1)]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Assert.That(_oneTimeSetupCount, Is.EqualTo(1), "OneTimeSetUpはTestFixtureごとに一度だけ実行される");
+ Assert.That(_setupCount, Is.EqualTo(2), "2番目のテストなのでSetUpは2回実行されている");
+ }
+
+ [UnityTest, Order(2)]
+ public IEnumerator UnityTestMethod()
+ {
+ yield return null;
+ Assert.That(_oneTimeSetupCount, Is.EqualTo(1), "OneTimeSetUpはTestFixtureごとに一度だけ実行される");
+ Assert.That(_setupCount, Is.EqualTo(3), "3番目のテストなのでSetUpは3回実行されている");
+ }
+ }
+}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/OneTimeSetupAttributeExample.cs.meta b/Assets/APIExamples/Tests/Runtime/NUnit/OneTimeSetupAttributeExample.cs.meta
new file mode 100644
index 0000000..515f1e2
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/OneTimeSetupAttributeExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f5debcab7d6f405f9755f7e1955426e8
+timeCreated: 1627036574
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/OneTimeTearDownAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/OneTimeTearDownAttributeExample.cs
new file mode 100644
index 0000000..5a12325
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/OneTimeTearDownAttributeExample.cs
@@ -0,0 +1,69 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using UnityEngine;
+using UnityEngine.TestTools;
+
+namespace APIExamples.NUnit
+{
+ ///
+ /// の使用例
+ ///
+ ///
+ ///
+ ///
+ [TestFixture]
+ [SuppressMessage("ReSharper", "AccessToStaticMemberViaDerivedType")]
+ public class OneTimeTearDownAttributeExample
+ {
+ private int _oneTimeTeardownCount;
+ private int _teardownCount;
+
+ ///
+ /// クラス内の最後のテストの実行後に一度だけ実行されます
+ ///
+ [OneTimeTearDown]
+ public void OneTimeTearDown()
+ {
+ Debug.Log($"OneTimeTearDown");
+ _oneTimeTeardownCount++;
+
+ Assert.That(_oneTimeTeardownCount, Is.EqualTo(1), "OneTimeTearDownはTestFixtureごとに一度だけ実行される");
+ Assert.That(_teardownCount, Is.EqualTo(3), "3つのテストがあるのでTearDownは3回実行されている");
+ }
+
+ ///
+ /// 各テストメソッドの後に実行されます
+ ///
+ [TearDown]
+ public void TearDown()
+ {
+ Debug.Log($"TearDown");
+ _teardownCount++;
+ }
+
+ [Test]
+ public void TestMethod()
+ {
+ Debug.Log($"TestMethod");
+ }
+
+ [Test]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Debug.Log($"TestMethodAsync");
+ }
+
+ [UnityTest]
+ public IEnumerator UnityTestMethod()
+ {
+ yield return null;
+ Debug.Log($"UnityTestMethod");
+ }
+ }
+}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/TearDownExample.cs.meta b/Assets/APIExamples/Tests/Runtime/NUnit/OneTimeTearDownAttributeExample.cs.meta
similarity index 100%
rename from Assets/APIExamples/Tests/Runtime/NUnit/TearDownExample.cs.meta
rename to Assets/APIExamples/Tests/Runtime/NUnit/OneTimeTearDownAttributeExample.cs.meta
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/OrderAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/OrderAttributeExample.cs
index e35a717..3c1f37c 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/OrderAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/OrderAttributeExample.cs
@@ -38,7 +38,7 @@ public void OrderedTest3()
public async Task OrderedTest2()
{
Assert.That(++s_count, Is.EqualTo(3));
- await Task.Delay(0);
+ await Task.Yield();
}
[UnityTest]
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/RandomAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/RandomAttributeExample.cs
index 0b77f39..1fae3e2 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/RandomAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/RandomAttributeExample.cs
@@ -33,7 +33,7 @@ public class RandomAttributeExample
[Random(0, 5, 3)] int i,
[Random(5, 10, 3)] int j)
{
- await Task.Delay(0);
+ await Task.Yield();
Assert.That(i + j, Is.InRange((0 + 5), (4 + 9)));
}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/RangeAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/RangeAttributeExample.cs
index 021cd41..455586b 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/RangeAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/RangeAttributeExample.cs
@@ -34,7 +34,7 @@ public class RangeAttributeExample
[Range(0.6f, 0.7f, 0.1f)] float f,
[Range(0.08d, 0.09d, 0.005d)] double d)
{
- await Task.Delay(0);
+ await Task.Yield();
Assert.That(d + f + l + i, Is.InRange(0, 7));
}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/SetupAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/SetupAttributeExample.cs
index 4f79fb9..c26ae0e 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/SetupAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/SetupAttributeExample.cs
@@ -1,25 +1,25 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+using System.Threading.Tasks;
using NUnit.Framework;
-using UnityEngine;
+using UnityEngine.TestTools;
namespace APIExamples.NUnit
{
///
- /// , の例
+ /// の使用例
///
+ ///
+ ///
+ ///
[TestFixture]
+ [SuppressMessage("ReSharper", "AccessToStaticMemberViaDerivedType")]
public class SetupAttributeExample
{
- ///
- /// クラス内の最初のテストの実行前に一度だけ実行されます
- ///
- [OneTimeSetUp]
- public void OneTimeSetUp()
- {
- Debug.Log($"OneTimeSetUp, {Time.time}");
- }
+ private int _setupCount;
///
/// 各テストメソッドの前に実行されます
@@ -27,19 +27,27 @@ public void OneTimeSetUp()
[SetUp]
public void SetUp()
{
- Debug.Log($"SetUp, {Time.time}");
+ _setupCount++;
}
- [Test]
+ [Test, Order(0)]
public void TestMethod()
{
- Debug.Log($"TestMethod, {Time.time}");
+ Assert.That(_setupCount, Is.EqualTo(1), "最初のテストなのでSetUpは1回実行されている");
+ }
+
+ [Test, Order(1)]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Assert.That(_setupCount, Is.EqualTo(2), "2番目のテストなのでSetUpは2回実行されている");
}
- [Test]
- public void TestMethod2()
+ [UnityTest, Order(2)]
+ public IEnumerator UnityTestMethod()
{
- Debug.Log($"TestMethod2, {Time.time}");
+ yield return null;
+ Assert.That(_setupCount, Is.EqualTo(3), "3番目のテストなのでSetUpは3回実行されている");
}
}
}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/SetupAttributeExample.cs.meta b/Assets/APIExamples/Tests/Runtime/NUnit/SetupAttributeExample.cs.meta
index 515f1e2..91ce4e1 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/SetupAttributeExample.cs.meta
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/SetupAttributeExample.cs.meta
@@ -1,3 +1,3 @@
-fileFormatVersion: 2
-guid: f5debcab7d6f405f9755f7e1955426e8
-timeCreated: 1627036574
\ No newline at end of file
+fileFormatVersion: 2
+guid: 2b076d3a9ea94c439e61c97d4cc95168
+timeCreated: 1762465031
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/TearDownAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/TearDownAttributeExample.cs
new file mode 100644
index 0000000..4836d43
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/TearDownAttributeExample.cs
@@ -0,0 +1,52 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using UnityEngine;
+using UnityEngine.TestTools;
+
+namespace APIExamples.NUnit
+{
+ ///
+ /// の使用例
+ ///
+ ///
+ ///
+ ///
+ [TestFixture]
+ [SuppressMessage("ReSharper", "AccessToStaticMemberViaDerivedType")]
+ public class TearDownAttributeExample
+ {
+ ///
+ /// 各テストメソッドの後に実行されます
+ ///
+ [TearDown]
+ public void TearDown()
+ {
+ Debug.Log($"TearDown");
+ }
+
+ [Test]
+ public void TestMethod()
+ {
+ Debug.Log($"TestMethod");
+ }
+
+ [Test]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Debug.Log($"TestMethodAsync");
+ }
+
+ [UnityTest]
+ public IEnumerator UnityTestMethod()
+ {
+ yield return null;
+ Debug.Log($"UnityTestMethod");
+ }
+ }
+}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/TearDownAttributeExample.cs.meta b/Assets/APIExamples/Tests/Runtime/NUnit/TearDownAttributeExample.cs.meta
new file mode 100644
index 0000000..cac434a
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/TearDownAttributeExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: a62310a19258496daea6025cba719003
+timeCreated: 1762465043
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/TearDownExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/TearDownExample.cs
deleted file mode 100644
index 3c63c6e..0000000
--- a/Assets/APIExamples/Tests/Runtime/NUnit/TearDownExample.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
-// This software is released under the MIT License.
-
-using NUnit.Framework;
-using UnityEngine;
-
-namespace APIExamples.NUnit
-{
- ///
- /// , の例
- ///
- [TestFixture]
- public class TearDownExample
- {
- ///
- /// クラス内の最後のテストの実行後に一度だけ実行されます
- ///
- [OneTimeTearDown]
- public void OneTimeTearDown()
- {
- Debug.Log($"OneTimeTearDown, {Time.time}");
- }
-
- ///
- /// 各テストメソッドの後に実行されます
- ///
- [TearDown]
- public void TearDown()
- {
- Debug.Log($"TearDown, {Time.time}");
- }
-
- [Test]
- public void TestMethod()
- {
- Debug.Log($"TestMethod, {Time.time}");
- }
-
- [Test]
- public void TestMethod2()
- {
- Debug.Log($"TestMethod2, {Time.time}");
- }
- }
-}
diff --git a/Assets/APIExamples/Tests/Runtime/NUnit/TimeoutAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/NUnit/TimeoutAttributeExample.cs
index dacc2d6..fe27e9e 100644
--- a/Assets/APIExamples/Tests/Runtime/NUnit/TimeoutAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/NUnit/TimeoutAttributeExample.cs
@@ -1,110 +1,107 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System;
using System.Collections;
-using System.Diagnostics;
using System.Threading.Tasks;
+using Cysharp.Threading.Tasks;
using NUnit.Framework;
+using TestHelper.Attributes;
using UnityEngine;
using UnityEngine.TestTools;
-#pragma warning disable CS0162
-
namespace APIExamples.NUnit
{
///
/// およびデフォルトタイムアウト時間の確認
///
+ ///
+ /// このクラスに書かれている振る舞いは、Unity Test Framework v1.4.6およびv1.6.0のものです。バージョンによって振る舞いが異なりますので注意してください。
+ ///
+ /// 非同期 (async) テストでタイムアウト及びTimeout属性が機能しない問題は、Unity Test Framework v1.3.4で修正されました。
+ ///
+ ///
[TestFixture]
+ [Explicit("Timeout属性によって失敗するテストの例")]
public class TimeoutAttributeExample
{
- private readonly Stopwatch _stopwatch = new Stopwatch();
- private const bool Fail = false; // このフラグをtrueにするとこのクラスのテストはすべて失敗します
-
- [SetUp]
- public void SetUp()
+ [Test]
+ [Timeout(200)]
+ public void Timeout属性_同期テストではタイムアウトで割り込みは発生しないが終了時に指定時間を超えていたらテスト失敗()
{
- _stopwatch.Restart();
+ var endTime = DateTime.Now.AddSeconds(0.5d);
+ while (DateTime.Now < endTime)
+ {
+ }
}
- [TearDown]
- public void TearDown()
+ [UnityTest]
+ [Timeout(200)]
+ public IEnumerator Timeout属性_UnityTest属性でWaitForSeconds_割り込みは発生しないが終了時に指定時間を超えていたらテスト失敗()
{
- UnityEngine.Debug.Log($"{_stopwatch.ElapsedMilliseconds} [ms]");
- Time.timeScale = 1f;
+ yield return new WaitForSeconds(0.5f);
}
- [Explicit("時間がかかるのでExplicit")]
[UnityTest]
- public IEnumerator タイムアウトのデフォルトは3分()
+ public IEnumerator タイムアウトのデフォルトは3分_3分でタイムアウト()
{
- var waitSeconds = 3 * 60 - 1; // タイムアウトのデフォルトは3[min]
- if (Fail)
+ var endTime = DateTime.Now.AddMinutes(3d).AddSeconds(1d);
+ while (DateTime.Now < endTime)
{
- waitSeconds++;
+ yield return null;
}
-
- yield return new WaitForSeconds(waitSeconds);
}
[UnityTest]
- [Timeout(2000)]
- public IEnumerator タイムアウトを2秒に設定()
+ [Timeout(200)]
+ public IEnumerator Timeout属性_UnityTest属性でYieldReturnNull_指定ミリ秒でタイムアウト()
{
- var waitSeconds = 1f;
- if (Fail)
+ var endTime = DateTime.Now.AddSeconds(0.5d);
+ while (DateTime.Now < endTime)
{
- waitSeconds = 10f;
+ yield return null;
}
-
- yield return new WaitForSeconds(waitSeconds);
}
[UnityTest]
- [Timeout(2000)]
- public IEnumerator タイムアウト値はTimeScaleに影響されない()
+ [Timeout(1000)]
+ [TimeScale(10.0f)]
+ public IEnumerator Timeout属性_タイムアウト値はTimeScaleに影響されない_指定ミリ秒でタイムアウト()
{
- var waitSeconds = 1f;
- if (Fail)
+ var endTime = Time.realtimeSinceStartup + 2.0f;
+ while (Time.realtimeSinceStartup < endTime)
{
- waitSeconds = 10f;
+ yield return null;
}
-
- Time.timeScale = 5f;
- yield return new WaitForSecondsRealtime(waitSeconds);
}
- [UnityTest]
- [Timeout(2000)]
- public IEnumerator タイムアウトはWaitForSeconds以外では有効でない_中断されない()
+ [Test]
+ [Timeout(200)]
+ public async Task Timeout属性_非同期テストでDelay_指定ミリ秒でタイムアウト()
{
- var waitSeconds = 1f;
- if (Fail)
- {
- waitSeconds = 10f;
- }
+ await Task.Delay(TimeSpan.FromSeconds(0.5f));
+ }
- var startTime = DateTime.Now;
- while ((DateTime.Now - startTime).Seconds < waitSeconds)
+ [Test]
+ [Timeout(200)]
+ public async Task Timeout属性_非同期テストでYield_指定ミリ秒でタイムアウト()
+ {
+ var endTime = DateTime.Now.AddSeconds(0.5d);
+ while (DateTime.Now < endTime)
{
- yield return null; // Timeout時間を超えてもテストは中断されない。指定時間を超過していれば失敗と判定はされる
+ await Task.Yield();
}
}
[Test]
- [Timeout(2000)]
- // Note: 非同期(async)テストでタイムアウト及びTimeout属性が機能しない問題は、Unity Test Framework v1.3.4で修正された
- // See: https://unity3d.atlassian.net/servicedesk/customer/portal/2/IN-28108
- public async Task 非同期テストでタイムアウトを2秒に設定()
+ [Timeout(200)]
+ public async Task Timeout属性_非同期テストでNextFrame_指定ミリ秒でタイムアウト()
{
- var waitSeconds = 1f;
- if (Fail)
+ var endTime = DateTime.Now.AddSeconds(0.5d);
+ while (DateTime.Now < endTime)
{
- waitSeconds = 10f;
+ await UniTask.NextFrame();
}
-
- await Task.Delay(TimeSpan.FromSeconds(waitSeconds));
}
}
}
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/AllocatingGcMemoryExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/AllocatingGcMemoryExample.cs
index 00bb41a..5736210 100644
--- a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/AllocatingGcMemoryExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/AllocatingGcMemoryExample.cs
@@ -74,7 +74,7 @@ void UseColor()
Assert.That(UseColor, Is.Not.AllocatingGCMemory());
}
- [Ignore("Is.Not.AllocatingGCMemory()をasyncメソッドに使用するとUnityエディターがフリーズ(Unity Test Framework v1.4.0時点)")]
+ [Ignore("Is.Not.AllocatingGCMemory()をasyncメソッドに使用するとUnityエディターがフリーズ(Unity Test Framework v1.6.0時点)")]
[Test]
public async Task プリミティブ型_ヒープアロケーションなしAsync_Unityエディターがフリーズ()
{
@@ -91,7 +91,7 @@ async Task UsePrimitives()
Assert.That(async () => await UsePrimitives(), Is.Not.AllocatingGCMemory());
}
- [Explicit("Is.AllocatingGCMemory()をasyncメソッドに使用しても常に成功してしまう(Unity Test Framework v1.4.0時点)")]
+ [Explicit("Is.AllocatingGCMemory()をasyncメソッドに使用しても常に成功してしまう(Unity Test Framework v1.6.0時点)")]
[Test]
public async Task String型_ヒープアロケーションありAsync_常に成功してしまう()
{
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/LogAssertExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/LogAssertExample.cs
index ce08ed9..a38b88f 100644
--- a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/LogAssertExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/LogAssertExample.cs
@@ -88,7 +88,7 @@ public class LogAssertExample
if (Fail)
{
- await Task.Delay(200);
+ await Task.Yield();
Debug.LogError("expected message"); // フレームが進むとLogAssert.Expectは無効
}
}
@@ -138,7 +138,7 @@ public class LogAssertExample
{
Debug.Log("expected message");
- await Task.Delay(200);
+ await Task.Yield();
LogAssert.Expect(LogType.Log, "expected message");
}
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupAttributeExample.cs
index 0f6bc71..622d56e 100644
--- a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupAttributeExample.cs
@@ -7,13 +7,13 @@
namespace APIExamples.UnityTestFramework
{
///
- /// で指定した実装クラスの`Setup()`メソッドが使用されます
+ /// で指定した 実装クラスの Setup メソッドが使用されます
+ ///
+ /// - 複数のテストに PrebuildSetup 属性が配置されていても、Setup の実行は1回だけです
+ /// - を実装していないクラスを渡した場合、何も起きません(エラーにもなりません)
+ /// - PrebuildSetup 属性は、クラスにもメソッドにも配置できます
+ ///
///
- ///
- /// - 複数のテストに属性が付与されていた場合、`Setup()`の実行は1回だけです
- /// - を実装していないクラスを渡した場合、何も起きません(エラーにもなりません)
- /// - 属性は、クラスにもメソッドにも付与できます
- ///
[PrebuildSetup(typeof(PreBuildSetupExample))]
[PostBuildCleanup(typeof(PreBuildSetupExample))]
public class PreBuildSetupAttributeExample
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupExample.cs
index e22a271..42e6621 100644
--- a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupExample.cs
@@ -2,25 +2,34 @@
// This software is released under the MIT License.
using NUnit.Framework;
+using UnityEngine;
using UnityEngine.TestTools;
namespace APIExamples.UnityTestFramework
{
+ ///
+ /// ビルド前後に処理を挿むための および の実装例
+ ///
public class PreBuildSetupExample : IPrebuildSetup, IPostBuildCleanup
{
///
+ ///
+ /// Unityエディター実行(Edit ModeテストおよびPlay Modeテスト)では、すべてのテストの実行に先立って実行されます。
+ /// プレイヤー実行(Play Modeテスト)では、ビルド前に実行されます。
+ ///
public void Setup()
{
- // Edit ModeテストおよびPlay Modeテスト(Unityエディター実行)では、すべてのテストの実行に先立って実行される
- // Play Modeテスト(プレイヤー実行)では、ビルド前に実行される
- // テスト用のビルドにのみResourcesに含めたいアセットをコピーする使用例は `LoadAssetExample` を参照してください
+ Debug.Log("PreBuildSetupExample.Setup");
}
///
+ ///
+ /// Unityエディター実行(Edit ModeテストおよびPlay Modeテスト)では、すべてのテストの実行終了後に実行されます。
+ /// プレイヤー実行(Play Modeテスト)では、ビルド後に実行されます。
+ ///
public void Cleanup()
{
- // Edit ModeテストおよびPlay Modeテスト(Unityエディター実行)では、すべてのテストの実行終了後に実行される
- // Play Modeテスト(プレイヤー実行)では、ビルド後に実行される
+ Debug.Log("PreBuildSetupExample.Cleanup");
}
[Test]
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataAttributeExample.cs
new file mode 100644
index 0000000..3a04121
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataAttributeExample.cs
@@ -0,0 +1,28 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+#if ENABLE_UTF_1_6
+using NUnit.Framework;
+using UnityEngine.TestTools;
+
+namespace APIExamples.UnityTestFramework
+{
+ ///
+ /// で指定した 実装クラスの Setup メソッドが使用されます
+ ///
+ ///
+ /// Required: Unity Test Framework v1.6 or later
+ ///
+ ///
+ [PrebuildSetupWithTestData(typeof(PreBuildSetupWithTestDataExample))]
+ [PostBuildCleanupWithTestData(typeof(PreBuildSetupWithTestDataExample))]
+ public class PreBuildSetupWithTestDataAttributeExample
+ {
+ [Test]
+ public void PrebuildSetupWithTestDataAttributeを付与したテストの例()
+ {
+ Assert.That(true, Is.True);
+ }
+ }
+}
+#endif
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataAttributeExample.cs.meta b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataAttributeExample.cs.meta
new file mode 100644
index 0000000..a2af8a7
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataAttributeExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 0119066ebb6b49a5a0f8268a2db3ac5a
+timeCreated: 1762468572
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataExample.cs
new file mode 100644
index 0000000..5f73ee3
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataExample.cs
@@ -0,0 +1,51 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+#if ENABLE_UTF_1_6
+using NUnit.Framework;
+using UnityEngine;
+using UnityEngine.TestTools;
+
+namespace APIExamples.UnityTestFramework
+{
+ ///
+ /// ビルド前後に処理を挿むための および の実装例
+ ///
+ ///
+ /// Required: Unity Test Framework v1.6 or later
+ ///
+ ///
+ public class PreBuildSetupWithTestDataExample : IPrebuildSetupWithTestData, IPostbuildCleanupWithTestData
+ {
+ ///
+ ///
+ /// Unityエディター実行(Edit ModeテストおよびPlay Modeテスト)では、すべてのテストの実行に先立って実行されます。
+ /// プレイヤー実行(Play Modeテスト)では、ビルド前に実行されます。
+ ///
+ /// には、テストモード、テストプラットフォーム、実行されるテストのリストが含まれます
+ ///
+ public void Setup(TestData testData)
+ {
+ Debug.Log($"PreBuildSetupWithTestDataExample.Setup; testData: {testData}");
+ }
+
+ ///
+ ///
+ /// Unityエディター実行(Edit ModeテストおよびPlay Modeテスト)では、すべてのテストの実行終了後に実行されます。
+ /// プレイヤー実行(Play Modeテスト)では、ビルド後に実行されます。
+ ///
+ /// には、テストモード、テストプラットフォーム、実行されるテストのリストが含まれます
+ ///
+ public void Cleanup(TestData testData)
+ {
+ Debug.Log($"PreBuildSetupWithTestDataExample.Cleanup; testData: {testData}");
+ }
+
+ [Test]
+ public void IPrebuildSetupWithTestDataを実装したテストの例()
+ {
+ Assert.That(true, Is.True);
+ }
+ }
+}
+#endif
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataExample.cs.meta b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataExample.cs.meta
new file mode 100644
index 0000000..a1b4026
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/PreBuildSetupWithTestDataExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: c99ecd621549428f922e512fc2778c1b
+timeCreated: 1762468080
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs
new file mode 100644
index 0000000..e2711f3
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs
@@ -0,0 +1,75 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+#if ENABLE_UTF_1_5
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+using System.Threading.Tasks;
+using APIExamples.NUnit;
+using NUnit.Framework;
+using UnityEngine.TestTools;
+using Is = APIExamples.NUnit.Is;
+
+namespace APIExamples.UnityTestFramework
+{
+ ///
+ /// の使用例
+ ///
+ ///
+ /// Required: Unity Test Framework v1.5 or later
+ ///
+ ///
+ ///
+ ///
+ ///
+ [TestFixture]
+ [SuppressMessage("ReSharper", "AccessToStaticMemberViaDerivedType")]
+ public class UnityOneTimeSetupAttributeExample
+ {
+ private int _oneTimeSetupCount;
+ private int _setupCount;
+
+ ///
+ /// テストクラス内の最初のテストの実行前に一度だけ実行されます
+ ///
+ [UnityOneTimeSetUp]
+ public IEnumerator OneTimeSetUp()
+ {
+ yield return null;
+ _oneTimeSetupCount++;
+ }
+
+ ///
+ /// 各テストメソッドの前に実行されます
+ ///
+ [SetUp]
+ public void SetUp()
+ {
+ _setupCount++;
+ }
+
+ [Test, Order(0)]
+ public void TestMethod()
+ {
+ Assert.That(_oneTimeSetupCount, Is.EqualTo(1), "OneTimeSetUpはTestFixtureごとに一度だけ実行される");
+ Assert.That(_setupCount, Is.EqualTo(1), "最初のテストなのでSetUpは1回実行されている");
+ }
+
+ [Test, Order(1)]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Assert.That(_oneTimeSetupCount, Is.EqualTo(1), "OneTimeSetUpはTestFixtureごとに一度だけ実行される");
+ Assert.That(_setupCount, Is.EqualTo(2), "2番目のテストなのでSetUpは2回実行されている");
+ }
+
+ [UnityTest, Order(2)]
+ public IEnumerator UnityTestMethod()
+ {
+ yield return null;
+ Assert.That(_oneTimeSetupCount, Is.EqualTo(1), "OneTimeSetUpはTestFixtureごとに一度だけ実行される");
+ Assert.That(_setupCount, Is.EqualTo(3), "3番目のテストなのでSetUpは3回実行されている");
+ }
+ }
+}
+#endif
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs.meta b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs.meta
new file mode 100644
index 0000000..6cd45db
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeSetupAttributeExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 229f96c95185415da79ce61b23f777e0
+timeCreated: 1762466846
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs
new file mode 100644
index 0000000..cdb69ff
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs
@@ -0,0 +1,78 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+#if ENABLE_UTF_1_5
+using System.Collections;
+using System.Diagnostics.CodeAnalysis;
+using System.Threading.Tasks;
+using APIExamples.NUnit;
+using NUnit.Framework;
+using UnityEngine;
+using UnityEngine.TestTools;
+using Is = APIExamples.NUnit.Is;
+
+namespace APIExamples.UnityTestFramework
+{
+ ///
+ /// の使用例
+ ///
+ ///
+ /// Required: Unity Test Framework v1.5 or later
+ ///
+ ///
+ ///
+ ///
+ ///
+ [TestFixture]
+ [SuppressMessage("ReSharper", "AccessToStaticMemberViaDerivedType")]
+ public class UnityOneTimeTearDownAttributeExample
+ {
+ private int _oneTimeTeardownCount;
+ private int _teardownCount;
+
+ ///
+ /// クラス内の最後のテストの実行後に一度だけ実行されます
+ ///
+ [UnityOneTimeTearDown]
+ public IEnumerator OneTimeTearDown()
+ {
+ yield return null;
+ Debug.Log($"UnityOneTimeTearDown");
+ _oneTimeTeardownCount++;
+
+ Assert.That(_oneTimeTeardownCount, Is.EqualTo(1), "OneTimeTearDownはTestFixtureごとに一度だけ実行される");
+ Assert.That(_teardownCount, Is.EqualTo(3), "3つのテストがあるのでTearDownは3回実行されている");
+ }
+
+ ///
+ /// 各テストメソッドの後に実行されます
+ ///
+ [TearDown]
+ public void TearDown()
+ {
+ Debug.Log($"TearDown");
+ _teardownCount++;
+ }
+
+ [Test]
+ public void TestMethod()
+ {
+ Debug.Log($"TestMethod");
+ }
+
+ [Test]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Debug.Log($"TestMethodAsync");
+ }
+
+ [UnityTest]
+ public IEnumerator UnityTestMethod()
+ {
+ yield return null;
+ Debug.Log($"UnityTestMethod");
+ }
+ }
+}
+#endif
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs.meta b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs.meta
new file mode 100644
index 0000000..9442aca
--- /dev/null
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityOneTimeTearDownAttributeExample.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: cfef6d7d5aab42b1a4fa76ec161a29c4
+timeCreated: 1762466846
\ No newline at end of file
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnitySetUpAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnitySetUpAttributeExample.cs
index 0d8a36d..fc06faa 100644
--- a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnitySetUpAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnitySetUpAttributeExample.cs
@@ -1,10 +1,9 @@
-// Copyright (c) 2021 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System.Collections;
+using System.Threading.Tasks;
using NUnit.Framework;
-using UnityEngine;
-using UnityEngine.SceneManagement;
using UnityEngine.TestTools;
namespace APIExamples.UnityTestFramework
@@ -12,36 +11,43 @@ namespace APIExamples.UnityTestFramework
///
/// の使用例
///
+ ///
+ ///
+ ///
[TestFixture]
public class UnitySetUpAttributeExample
{
+ private int _setupCount;
+
///
- /// SetUpをコルーチンで記述できます
+ /// SetUpをコルーチン書式で記述できます
/// 専用ではなく、通常のTest向けのSetUpとしても使用できます
///
[UnitySetUp]
public IEnumerator SetUpCoroutine()
{
- yield return SceneManager.LoadSceneAsync("HelloTesting");
+ yield return null;
+ _setupCount++;
}
- [Test]
- public void Test属性テストメソッド()
+ [Test, Order(0)]
+ public void TestMethod()
{
- var cube = GameObject.Find("Cube");
- Object.DestroyImmediate(cube);
+ Assert.That(_setupCount, Is.EqualTo(1), "最初のテストなのでSetUpは1回実行されている");
+ }
- Assert.That((bool)cube, Is.False);
+ [Test, Order(1)]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Assert.That(_setupCount, Is.EqualTo(2), "2番目のテストなのでSetUpは2回実行されている");
}
- [UnityTest]
- public IEnumerator UnityTest属性テストメソッド()
+ [UnityTest, Order(2)]
+ public IEnumerator UnityTestMethod()
{
- var cube = GameObject.Find("Cube");
- Object.Destroy(cube);
yield return null;
-
- Assert.That((bool)cube, Is.False);
+ Assert.That(_setupCount, Is.EqualTo(3), "3番目のテストなのでSetUpは3回実行されている");
}
}
}
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityTearDownAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityTearDownAttributeExample.cs
index 0c5c278..cdc5559 100644
--- a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityTearDownAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityTearDownAttributeExample.cs
@@ -1,49 +1,52 @@
-// Copyright (c) 2021 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System.Collections;
+using System.Threading.Tasks;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
-using UnityEngine.TestTools.Utils;
namespace APIExamples.UnityTestFramework
{
///
/// の使用例
///
+ ///
+ ///
+ ///
[TestFixture]
public class UnityTearDownAttributeExample
{
- private Object _cube;
-
///
- /// TearDownをコルーチンで記述できます
+ /// TearDownをコルーチン書式で記述できます
/// 専用ではなく、通常のTest向けのTearDownとしても使用できます
///
[UnityTearDown]
public IEnumerator TearDownCoroutine()
{
- Object.Destroy(_cube);
yield return null;
- // Note: WebGLでも動作しているか確認するためにここで`Assert.Fail()`したらfailしたので動いている模様
+ Debug.Log($"TearDown");
}
[Test]
- public void Test属性のテストメソッド()
+ public void TestMethod()
{
- _cube = Utils.CreatePrimitive(PrimitiveType.Cube);
+ Debug.Log($"TestMethod");
+ }
- Assert.That((bool)_cube, Is.True);
+ [Test]
+ public async Task TestMethodAsync()
+ {
+ await Task.Yield();
+ Debug.Log($"TestMethodAsync");
}
[UnityTest]
- public IEnumerator UnityTest属性のテストメソッド()
+ public IEnumerator UnityTestMethod()
{
- _cube = Utils.CreatePrimitive(PrimitiveType.Cube);
yield return null;
-
- Assert.That((bool)_cube, Is.True);
+ Debug.Log($"UnityTestMethod");
}
}
}
diff --git a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityTestAttributeExample.cs b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityTestAttributeExample.cs
index fcd3da9..a656525 100644
--- a/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityTestAttributeExample.cs
+++ b/Assets/APIExamples/Tests/Runtime/UnityTestFramework/UnityTestAttributeExample.cs
@@ -1,4 +1,4 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System;
@@ -13,7 +13,6 @@ namespace APIExamples.UnityTestFramework
{
///
/// フレームをまたがるテストをで実装する例
- /// UniTaskの使用例を含みます
///
[TestFixture]
public class UnityTestAttributeExample
@@ -23,6 +22,7 @@ public class UnityTestAttributeExample
{
var before = Time.frameCount;
yield return null;
+
var actual = Time.frameCount;
Assert.That(actual, Is.EqualTo(before + 1));
@@ -35,15 +35,15 @@ public class UnityTestAttributeExample
}
[UnityTest]
- [Category("IgnoreCI")]
- [Description("CIでは(Linux Editorでは?)フレームが進んでしまう(648 to 41767)のでとりあえず除外")]
public IEnumerator YieldInstructionの実装クラスを使用できる()
{
- var before = Time.frameCount;
- yield return new WaitForEndOfFrame();
- var actual = Time.frameCount;
+ var start = Time.time; // The time at the beginning of this frame
+ const float WaitSeconds = 0.5f;
+ yield return new WaitForSeconds(WaitSeconds);
- Assert.That(actual, Is.EqualTo(before));
+ var actual = Time.time - start;
+
+ Assert.That(actual, Is.EqualTo(WaitSeconds).Within(0.1f));
}
[UnityTest]
@@ -52,6 +52,7 @@ public class UnityTestAttributeExample
var start = Time.time; // The time at the beginning of this frame
const float WaitSeconds = 0.5f;
yield return new WaitForSecondsRealtime(WaitSeconds);
+
var actual = Time.time - start;
Assert.That(actual, Is.EqualTo(WaitSeconds).Within(0.1f));
@@ -60,7 +61,7 @@ public class UnityTestAttributeExample
[UnityTest]
public IEnumerator AsyncOperationの終了を待つテストの例()
{
- yield return SceneManager.LoadSceneAsync("HelloTesting");
+ yield return SceneManager.LoadSceneAsync("ContainScenesInBuild");
var cube = GameObject.Find("Cube");
Assert.That((bool)cube, Is.True);
@@ -69,7 +70,7 @@ public class UnityTestAttributeExample
[UnityTest]
public IEnumerator UniTaskでAsyncメソッドを使用するテストの例() => UniTask.ToCoroutine(async () =>
{
- await SceneManager.LoadSceneAsync("HelloTesting");
+ await SceneManager.LoadSceneAsync("ContainScenesInBuild");
var cube = GameObject.Find("Cube");
Assert.That((bool)cube, Is.True);
@@ -79,6 +80,7 @@ public class UnityTestAttributeExample
public IEnumerator コルーチンを起動してコールバックを受け取る例()
{
var actual = 0;
+
yield return BarCoroutine(i =>
{
actual = i;
@@ -91,6 +93,7 @@ public class UnityTestAttributeExample
public IEnumerator UniTaskでコルーチンを起動してコールバックを受け取る例() => UniTask.ToCoroutine(async () =>
{
var actual = 0;
+
await BarCoroutine(i =>
{
actual = i;
diff --git a/Assets/BasicExample/Scenes/HelloTesting.unity b/Assets/BasicExample/Scenes/HelloTesting.unity
deleted file mode 100644
index 1052144..0000000
--- a/Assets/BasicExample/Scenes/HelloTesting.unity
+++ /dev/null
@@ -1,396 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!29 &1
-OcclusionCullingSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 2
- m_OcclusionBakeSettings:
- smallestOccluder: 5
- smallestHole: 0.25
- backfaceThreshold: 100
- m_SceneGUID: 00000000000000000000000000000000
- m_OcclusionCullingData: {fileID: 0}
---- !u!104 &2
-RenderSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 9
- m_Fog: 0
- m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- m_FogMode: 3
- m_FogDensity: 0.01
- m_LinearFogStart: 0
- m_LinearFogEnd: 300
- m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
- m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
- m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
- m_AmbientIntensity: 1
- m_AmbientMode: 0
- m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
- m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
- m_HaloStrength: 0.5
- m_FlareStrength: 1
- m_FlareFadeSpeed: 3
- m_HaloTexture: {fileID: 0}
- m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
- m_DefaultReflectionMode: 0
- m_DefaultReflectionResolution: 128
- m_ReflectionBounces: 1
- m_ReflectionIntensity: 1
- m_CustomReflection: {fileID: 0}
- m_Sun: {fileID: 0}
- m_IndirectSpecularColor: {r: 0.44657838, g: 0.49641234, b: 0.57481676, a: 1}
- m_UseRadianceAmbientProbe: 0
---- !u!157 &3
-LightmapSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 12
- m_GIWorkflowMode: 1
- m_GISettings:
- serializedVersion: 2
- m_BounceScale: 1
- m_IndirectOutputScale: 1
- m_AlbedoBoost: 1
- m_EnvironmentLightingMode: 0
- m_EnableBakedLightmaps: 1
- m_EnableRealtimeLightmaps: 0
- m_LightmapEditorSettings:
- serializedVersion: 12
- m_Resolution: 2
- m_BakeResolution: 40
- m_AtlasSize: 1024
- m_AO: 0
- m_AOMaxDistance: 1
- m_CompAOExponent: 1
- m_CompAOExponentDirect: 0
- m_ExtractAmbientOcclusion: 0
- m_Padding: 2
- m_LightmapParameters: {fileID: 0}
- m_LightmapsBakeMode: 1
- m_TextureCompression: 1
- m_FinalGather: 0
- m_FinalGatherFiltering: 1
- m_FinalGatherRayCount: 256
- m_ReflectionCompression: 2
- m_MixedBakeMode: 2
- m_BakeBackend: 1
- m_PVRSampling: 1
- m_PVRDirectSampleCount: 32
- m_PVRSampleCount: 512
- m_PVRBounces: 2
- m_PVREnvironmentSampleCount: 256
- m_PVREnvironmentReferencePointCount: 2048
- m_PVRFilteringMode: 1
- m_PVRDenoiserTypeDirect: 1
- m_PVRDenoiserTypeIndirect: 1
- m_PVRDenoiserTypeAO: 1
- m_PVRFilterTypeDirect: 0
- m_PVRFilterTypeIndirect: 0
- m_PVRFilterTypeAO: 0
- m_PVREnvironmentMIS: 1
- m_PVRCulling: 1
- m_PVRFilteringGaussRadiusDirect: 1
- m_PVRFilteringGaussRadiusIndirect: 5
- m_PVRFilteringGaussRadiusAO: 2
- m_PVRFilteringAtrousPositionSigmaDirect: 0.5
- m_PVRFilteringAtrousPositionSigmaIndirect: 2
- m_PVRFilteringAtrousPositionSigmaAO: 1
- m_ExportTrainingData: 0
- m_TrainingDataDestination: TrainingData
- m_LightProbeSampleCountMultiplier: 4
- m_LightingDataAsset: {fileID: 0}
- m_LightingSettings: {fileID: 0}
---- !u!196 &4
-NavMeshSettings:
- serializedVersion: 2
- m_ObjectHideFlags: 0
- m_BuildSettings:
- serializedVersion: 2
- agentTypeID: 0
- agentRadius: 0.5
- agentHeight: 2
- agentSlope: 45
- agentClimb: 0.4
- ledgeDropHeight: 0
- maxJumpAcrossDistance: 0
- minRegionArea: 2
- manualCellSize: 0
- cellSize: 0.16666667
- manualTileSize: 0
- tileSize: 256
- accuratePlacement: 0
- maxJobWorkers: 0
- preserveTilesOutsideBounds: 0
- debug:
- m_Flags: 0
- m_NavMeshData: {fileID: 0}
---- !u!1 &659326155
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 659326159}
- - component: {fileID: 659326158}
- - component: {fileID: 659326157}
- - component: {fileID: 659326156}
- m_Layer: 0
- m_Name: Cube
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!65 &659326156
-BoxCollider:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 659326155}
- m_Material: {fileID: 0}
- m_IsTrigger: 0
- m_Enabled: 1
- serializedVersion: 2
- m_Size: {x: 1, y: 1, z: 1}
- m_Center: {x: 0, y: 0, z: 0}
---- !u!23 &659326157
-MeshRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 659326155}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_DynamicOccludee: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_RayTracingMode: 2
- m_RayTraceProcedural: 0
- m_RenderingLayerMask: 1
- m_RendererPriority: 0
- m_Materials:
- - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_ReceiveGI: 1
- m_PreserveUVs: 0
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_StitchLightmapSeams: 1
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
- m_AdditionalVertexStreams: {fileID: 0}
---- !u!33 &659326158
-MeshFilter:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 659326155}
- m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
---- !u!4 &659326159
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 659326155}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 924.2142, y: 351.34674, z: -17.195045}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 2
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1155269674
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1155269676}
- - component: {fileID: 1155269675}
- m_Layer: 0
- m_Name: Directional Light
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!108 &1155269675
-Light:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1155269674}
- m_Enabled: 1
- serializedVersion: 10
- m_Type: 1
- m_Shape: 0
- m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
- m_Intensity: 1
- m_Range: 10
- m_SpotAngle: 30
- m_InnerSpotAngle: 21.80208
- m_CookieSize: 10
- m_Shadows:
- m_Type: 2
- m_Resolution: -1
- m_CustomResolution: -1
- m_Strength: 1
- m_Bias: 0.05
- m_NormalBias: 0.4
- m_NearPlane: 0.2
- m_CullingMatrixOverride:
- e00: 1
- e01: 0
- e02: 0
- e03: 0
- e10: 0
- e11: 1
- e12: 0
- e13: 0
- e20: 0
- e21: 0
- e22: 1
- e23: 0
- e30: 0
- e31: 0
- e32: 0
- e33: 1
- m_UseCullingMatrixOverride: 0
- m_Cookie: {fileID: 0}
- m_DrawHalo: 0
- m_Flare: {fileID: 0}
- m_RenderMode: 0
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_RenderingLayerMask: 1
- m_Lightmapping: 4
- m_LightShadowCasterMode: 0
- m_AreaSize: {x: 1, y: 1}
- m_BounceIntensity: 1
- m_ColorTemperature: 6570
- m_UseColorTemperature: 0
- m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
- m_UseBoundingSphereOverride: 0
- m_UseViewFrustumForShadowCasterCull: 1
- m_ShadowRadius: 0
- m_ShadowAngle: 0
---- !u!4 &1155269676
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1155269674}
- m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
- m_LocalPosition: {x: 0, y: 3, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
---- !u!1 &1961294089
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1961294092}
- - component: {fileID: 1961294091}
- - component: {fileID: 1961294090}
- m_Layer: 0
- m_Name: Main Camera
- m_TagString: MainCamera
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!81 &1961294090
-AudioListener:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1961294089}
- m_Enabled: 1
---- !u!20 &1961294091
-Camera:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1961294089}
- m_Enabled: 1
- serializedVersion: 2
- m_ClearFlags: 1
- m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
- m_projectionMatrixMode: 1
- m_GateFitMode: 2
- m_FOVAxisMode: 0
- m_SensorSize: {x: 36, y: 24}
- m_LensShift: {x: 0, y: 0}
- m_FocalLength: 50
- m_NormalizedViewPortRect:
- serializedVersion: 2
- x: 0
- y: 0
- width: 1
- height: 1
- near clip plane: 0.3
- far clip plane: 1000
- field of view: 60
- orthographic: 0
- orthographic size: 5
- m_Depth: -1
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_RenderingPath: -1
- m_TargetTexture: {fileID: 0}
- m_TargetDisplay: 0
- m_TargetEye: 3
- m_HDR: 1
- m_AllowMSAA: 1
- m_AllowDynamicResolution: 0
- m_ForceIntoRT: 0
- m_OcclusionCulling: 1
- m_StereoConvergence: 10
- m_StereoSeparation: 0.022
---- !u!4 &1961294092
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1961294089}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 1, z: -10}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/Assets/BasicExample/Scenes/HelloTesting.unity.meta b/Assets/BasicExample/Scenes/HelloTesting.unity.meta
deleted file mode 100644
index 68c3990..0000000
--- a/Assets/BasicExample/Scenes/HelloTesting.unity.meta
+++ /dev/null
@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 6c40ba2f8a021430aa36a5cd247cda1e
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/BasicExample/Scripts/Runtime/Entities/CharacterStatus.cs b/Assets/BasicExample/Scripts/Runtime/Entities/CharacterStatus.cs
index cae15d1..79fed50 100644
--- a/Assets/BasicExample/Scripts/Runtime/Entities/CharacterStatus.cs
+++ b/Assets/BasicExample/Scripts/Runtime/Entities/CharacterStatus.cs
@@ -17,24 +17,24 @@ public class CharacterStatus : IDestructible
[field: SerializeField, Tooltip("属性")]
private Element Element { get; set; }
- [field: SerializeField, Tooltip("最大ヒットポイント")]
- private int MaxHitPoint { get; set; }
-
[field: SerializeField, Tooltip("防御力(buff分を除く)")]
private int Defense { get; set; }
[field: SerializeField, Tooltip("攻撃力(buff分を除く)")]
private int Attack { get; set; }
- public int HitPoint { get; set; }
+ [field: SerializeField, Tooltip("最大ヒットポイント")]
+ private int MaxHitPoint { get; set; }
+
+ internal int HitPoint { get; private set; }
private HitPointGaugeSetting _bounds;
- public CharacterStatus(Element element = Element.None, int hp = 0, int defense = 0, int attack = 0)
+ public CharacterStatus(Element element = Element.None, int defense = 0, int attack = 0, int hp = 0)
{
Element = element;
- MaxHitPoint = hp;
Defense = defense;
Attack = attack;
+ MaxHitPoint = hp;
HitPoint = hp;
_bounds = ScriptableObject.CreateInstance();
}
@@ -53,9 +53,9 @@ public bool IsDestroyed()
}
///
- public bool TakeDamage(Element element, int attackPower)
+ public bool TakeDamage(Element element, int attack)
{
- var attackPowerWithElement = (int)(attackPower * Element.GetDamageMultiplier(element));
+ var attackPowerWithElement = (int)(attack * Element.GetDamageMultiplier(element));
var damage = attackPowerWithElement - Defense;
if (damage <= 0)
{
diff --git a/Assets/BasicExample/Scripts/Runtime/Entities/Enemy.cs b/Assets/BasicExample/Scripts/Runtime/Entities/Enemy.cs
index ebea3e0..9bcce78 100644
--- a/Assets/BasicExample/Scripts/Runtime/Entities/Enemy.cs
+++ b/Assets/BasicExample/Scripts/Runtime/Entities/Enemy.cs
@@ -22,6 +22,6 @@ public class Enemy : MonoBehaviour, IDestructible
public bool IsDestroyed() => race.IsDestroyed();
///
- public bool TakeDamage(Element element, int attackPower) => race.TakeDamage(element, attackPower);
+ public bool TakeDamage(Element element, int attack) => race.TakeDamage(element, attack);
}
}
diff --git a/Assets/BasicExample/Scripts/Runtime/Entities/Enums/Element.cs b/Assets/BasicExample/Scripts/Runtime/Entities/Enums/Element.cs
index baa0144..aba775e 100644
--- a/Assets/BasicExample/Scripts/Runtime/Entities/Enums/Element.cs
+++ b/Assets/BasicExample/Scripts/Runtime/Entities/Enums/Element.cs
@@ -1,4 +1,4 @@
-// Copyright (c) 2021 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System;
@@ -8,17 +8,12 @@ namespace BasicExample.Entities.Enums
///
/// 元素的な属性
///
- ///
- /// 当たり障りなさそうな陰陽五行とします。種類は未来永劫バージョンアップしても増えません(フラグ
- ///
public enum Element
{
None,
- Wood,
Fire,
Water,
- Earth,
- Metal,
+ Wood,
}
public static class ElementExtensions
@@ -34,16 +29,12 @@ public static string GetName(this Element self)
{
case Element.None:
return "無";
- case Element.Wood:
- return "木";
case Element.Fire:
return "火";
case Element.Water:
return "水";
- case Element.Earth:
- return "土";
- case Element.Metal:
- return "金";
+ case Element.Wood:
+ return "木";
default:
throw new ArgumentException($"Unknown Element: {self.ToString()}");
}
@@ -53,61 +44,26 @@ public static string GetName(this Element self)
/// 属性攻撃を受けたときの被ダメージ倍率を返す
///
///
- /// 攻撃の属性
- ///
+ /// 攻撃側の属性
+ /// 被ダメージ倍率
public static float GetDamageMultiplier(this Element self, Element attack)
{
- switch (self)
+ if (self == Element.Wood && attack == Element.Fire)
{
- case Element.Wood:
- switch (attack)
- {
- case Element.Fire:
- return 2.0f;
- case Element.Water:
- return 0.5f;
- default:
- return 1.0f;
- }
- case Element.Fire:
- switch (attack)
- {
- case Element.Water:
- return 2.0f;
- case Element.Wood:
- return 0.5f;
- default:
- return 1.0f;
- }
- case Element.Water:
- switch (attack)
- {
- case Element.Wood:
- return 2.0f;
- case Element.Fire:
- return 0.5f;
- default:
- return 1.0f;
- }
- case Element.Earth:
- switch (attack)
- {
- case Element.Metal:
- return 2.0f;
- default:
- return 0.5f;
- }
- case Element.Metal:
- switch (attack)
- {
- case Element.Earth:
- return 2.0f;
- default:
- return 0.5f;
- }
- default:
- return 1.0f;
+ return 2.0f;
+ }
+
+ if (self == Element.Fire && attack == Element.Water)
+ {
+ return 2.0f;
}
+
+ if (self == Element.Water && attack == Element.Wood)
+ {
+ return 2.0f;
+ }
+
+ return 1.0f;
}
}
}
diff --git a/Assets/BasicExample/Scripts/Runtime/Entities/IDestructible.cs b/Assets/BasicExample/Scripts/Runtime/Entities/IDestructible.cs
index 271b67c..8a8a0d6 100644
--- a/Assets/BasicExample/Scripts/Runtime/Entities/IDestructible.cs
+++ b/Assets/BasicExample/Scripts/Runtime/Entities/IDestructible.cs
@@ -27,8 +27,8 @@ public interface IDestructible
/// 攻撃を与える
///
/// 攻撃の属性
- /// 攻撃力
+ /// 攻撃力
/// true: 1以上のダメージが入った
- bool TakeDamage(Element element, int attackPower);
+ bool TakeDamage(Element element, int attack);
}
}
diff --git a/Assets/BasicExample/Scripts/Runtime/Entities/Player.cs b/Assets/BasicExample/Scripts/Runtime/Entities/Player.cs
index f103d47..00ddf67 100644
--- a/Assets/BasicExample/Scripts/Runtime/Entities/Player.cs
+++ b/Assets/BasicExample/Scripts/Runtime/Entities/Player.cs
@@ -18,6 +18,6 @@ public class Player : MonoBehaviour, IDestructible
public bool IsDestroyed() => status.IsDestroyed();
///
- public bool TakeDamage(Element element, int attackPower) => status.TakeDamage(element, attackPower);
+ public bool TakeDamage(Element element, int attack) => status.TakeDamage(element, attack);
}
}
diff --git a/Assets/BasicExample/Scripts/Runtime/Entities/ScriptableObjects/Race.cs b/Assets/BasicExample/Scripts/Runtime/Entities/ScriptableObjects/Race.cs
index a81ca46..16d9125 100644
--- a/Assets/BasicExample/Scripts/Runtime/Entities/ScriptableObjects/Race.cs
+++ b/Assets/BasicExample/Scripts/Runtime/Entities/ScriptableObjects/Race.cs
@@ -38,6 +38,6 @@ public class Race : ScriptableObject, IDestructible
public bool IsDestroyed() => status.IsDestroyed();
///
- public bool TakeDamage(Element element, int attackPower) => status.TakeDamage(element, attackPower);
+ public bool TakeDamage(Element element, int attack) => status.TakeDamage(element, attack);
}
}
diff --git a/Assets/BasicExample/Tests/Editor/AssetValidators/LevelValidator.cs b/Assets/BasicExample/Tests/Editor/AssetValidators/LevelValidator.cs
deleted file mode 100644
index d76d689..0000000
--- a/Assets/BasicExample/Tests/Editor/AssetValidators/LevelValidator.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2021 Koji Hasegawa.
-// This software is released under the MIT License.
-
-using System.Collections.Generic;
-using System.Linq;
-using BasicExample.Level;
-using NUnit.Framework;
-using UnityEditor;
-using UnityEditor.SceneManagement;
-using UnityEngine;
-
-namespace BasicExample.Editor.AssetValidators
-{
- ///
- /// Scenes/Levels/下のすべてのSceneに対して、次のコンポーネントが設置されていることを検証する
- /// -
- /// -
- ///
- ///
- /// の応用例
- ///
- public class LevelValidator
- {
- private static IEnumerable Levels => AssetDatabase
- .FindAssets("t:SceneAsset", new [] { "Assets/BasicExample/Scenes/Levels" })
- .Select(AssetDatabase.GUIDToAssetPath);
-
- [TestCaseSource(nameof(Levels))]
- public void Levels下のSceneにSpawnPointが設置されていること(string path)
- {
- EditorSceneManager.OpenScene(path);
- var spawnPoints = Object.FindObjectsOfType();
-
- Assert.That(spawnPoints.Any, Is.True);
- }
-
- [TestCaseSource(nameof(Levels))]
- public void Levels下のSceneにExitPointが設置されていること(string path)
- {
- EditorSceneManager.OpenScene(path);
- var exitPoints = Object.FindObjectsOfType();
-
- Assert.That(exitPoints.Length, Is.GreaterThanOrEqualTo(1), "ExitPointは1つ以上設定されている");
-
- foreach (var exitPoint in exitPoints)
- {
- var obj = exitPoint.gameObject;
- var colliders = obj.GetComponents();
- Assert.That(colliders.Length, Is.GreaterThanOrEqualTo(1), $"{obj.name}にはコライダが設定されている");
- }
- }
- }
-}
diff --git a/Assets/BasicExample/Tests/Editor/BasicExample.Editor.Tests.asmdef b/Assets/BasicExample/Tests/Editor/BasicExample.Editor.Tests.asmdef
index cfb51bf..625f125 100644
--- a/Assets/BasicExample/Tests/Editor/BasicExample.Editor.Tests.asmdef
+++ b/Assets/BasicExample/Tests/Editor/BasicExample.Editor.Tests.asmdef
@@ -5,7 +5,8 @@
"UnityEngine.TestRunner",
"UnityEditor.TestRunner",
"BasicExample.Editor",
- "BasicExample"
+ "BasicExample",
+ "BasicExample.Tests"
],
"includePlatforms": [
"Editor"
diff --git a/Assets/BasicExample/Tests/Editor/AssetValidators.meta b/Assets/BasicExample/Tests/Editor/Validators.meta
similarity index 100%
rename from Assets/BasicExample/Tests/Editor/AssetValidators.meta
rename to Assets/BasicExample/Tests/Editor/Validators.meta
diff --git a/Assets/BasicExample/Tests/Editor/Validators/LevelValidator.cs b/Assets/BasicExample/Tests/Editor/Validators/LevelValidator.cs
new file mode 100644
index 0000000..b1831e0
--- /dev/null
+++ b/Assets/BasicExample/Tests/Editor/Validators/LevelValidator.cs
@@ -0,0 +1,58 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using BasicExample.Level;
+using NUnit.Framework;
+using UnityEditor;
+using UnityEditor.SceneManagement;
+using UnityEngine;
+
+namespace BasicExample.Editor.Validators
+{
+ ///
+ /// Scenes/Levels/ 下のすべての Scene に対して、次のコンポーネントが設置されていることを検証する
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// の使用例
+ ///
+ [TestFixture]
+ public class LevelValidator
+ {
+ private static IEnumerable Levels => AssetDatabase
+ .FindAssets("t:SceneAsset", new[] { "Assets/BasicExample/Scenes/Levels" })
+ .Select(AssetDatabase.GUIDToAssetPath)
+ .Select(path => new TestCaseData(path).SetName(Path.GetFileName(path)));
+
+ [TestCaseSource(nameof(Levels))]
+ public void Levels下のSceneにSpawnPointが1つ設置されていること(string path)
+ {
+ EditorSceneManager.OpenScene(path);
+ var spawnPoints = Object.FindObjectsOfType();
+
+ Assert.That(spawnPoints, Has.Length.EqualTo(1));
+ }
+
+ [TestCaseSource(nameof(Levels))]
+ public void Levels下のSceneにExitPointが設置されていること(string path)
+ {
+ EditorSceneManager.OpenScene(path);
+ var exitPoints = Object.FindObjectsOfType();
+
+ Assert.That(exitPoints, Is.Not.Empty, "ExitPointは1つ以上設定されている");
+
+ foreach (var exitPoint in exitPoints)
+ {
+ var obj = exitPoint.gameObject;
+ var colliders = obj.GetComponents();
+ Assert.That(colliders, Is.Not.Empty, $"{obj.name}にはコライダが設定されている");
+ }
+ }
+ }
+}
diff --git a/Assets/BasicExample/Tests/Editor/AssetValidators/LevelValidator.cs.meta b/Assets/BasicExample/Tests/Editor/Validators/LevelValidator.cs.meta
similarity index 100%
rename from Assets/BasicExample/Tests/Editor/AssetValidators/LevelValidator.cs.meta
rename to Assets/BasicExample/Tests/Editor/Validators/LevelValidator.cs.meta
diff --git a/Assets/BasicExample/Tests/Editor/Validators/PrefabValidator.cs b/Assets/BasicExample/Tests/Editor/Validators/PrefabValidator.cs
new file mode 100644
index 0000000..5c4eba6
--- /dev/null
+++ b/Assets/BasicExample/Tests/Editor/Validators/PrefabValidator.cs
@@ -0,0 +1,48 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using NUnit.Framework;
+using UnityEditor;
+using UnityEngine;
+
+namespace BasicExample.Editor.Validators
+{
+ ///
+ /// Assets/ 下のすべての Prefab に対して、missing script がないことを検証する.
+ ///
+ ///
+ /// の使用例
+ ///
+ [TestFixture]
+ public class PrefabValidator
+ {
+ private static IEnumerable Prefabs => AssetDatabase
+ .FindAssets("t:Prefab", new string[] { "Assets/" })
+ .Select(AssetDatabase.GUIDToAssetPath)
+ .Select(path => new TestCaseData(path).SetName(Path.GetFileName(path)));
+
+ private static void AssertMissingScriptRecursive(GameObject gameObject)
+ {
+ var components = gameObject.GetComponents();
+ foreach (var component in components)
+ {
+ Assert.That(component, Is.Not.Null, $"Component in {gameObject.name}");
+ }
+
+ foreach (Transform child in gameObject.transform)
+ {
+ AssertMissingScriptRecursive(child.gameObject);
+ }
+ }
+
+ [TestCaseSource(nameof(Prefabs))]
+ public void MissingScriptがないこと(string path)
+ {
+ var root = AssetDatabase.LoadAssetAtPath(path);
+ AssertMissingScriptRecursive(root);
+ }
+ }
+}
diff --git a/Assets/BasicExample/Tests/Editor/Validators/PrefabValidator.cs.meta b/Assets/BasicExample/Tests/Editor/Validators/PrefabValidator.cs.meta
new file mode 100644
index 0000000..5ce0e64
--- /dev/null
+++ b/Assets/BasicExample/Tests/Editor/Validators/PrefabValidator.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: bf0c636a5e5b4c5cb37c516c23a59ce2
+timeCreated: 1758386625
\ No newline at end of file
diff --git a/Assets/BasicExample/Tests/Editor/AssetValidators/RaceValidator.cs b/Assets/BasicExample/Tests/Editor/Validators/RaceValidator.cs
similarity index 80%
rename from Assets/BasicExample/Tests/Editor/AssetValidators/RaceValidator.cs
rename to Assets/BasicExample/Tests/Editor/Validators/RaceValidator.cs
index 77e9915..be8c9c7 100644
--- a/Assets/BasicExample/Tests/Editor/AssetValidators/RaceValidator.cs
+++ b/Assets/BasicExample/Tests/Editor/Validators/RaceValidator.cs
@@ -11,19 +11,19 @@
using UnityEditor;
using Object = UnityEngine.Object;
-namespace BasicExample.Editor.AssetValidators
+namespace BasicExample.Editor.Validators
{
///
- /// ScriptableObjects/Races/下のすべてのSOに対して、フィールドの設定漏れがないことを検証する
+ /// ScriptableObjects/Races/ 下のすべての ScriptableObject に対して、フィールドの設定漏れがないことを検証する.
///
///
- /// の応用例として書いたものの、フィールドは素直にRace型を使うほうがよさそう
+ /// の応用例として書いたものの、フィールドは素直にRace型を使うほうがよさそう
///
public class RaceValidator
{
// Race型のScriptableObjectを列挙
private static IEnumerable RacePaths => AssetDatabase
- .FindAssets("t:Race", new [] { "Assets/BasicExample/ScriptableObjects/Races" })
+ .FindAssets("t:Race", new[] { "Assets/BasicExample/ScriptableObjects/Races" })
.Select(AssetDatabase.GUIDToAssetPath);
// Race型のフィールドを列挙
diff --git a/Assets/BasicExample/Tests/Editor/AssetValidators/RaceValidator.cs.meta b/Assets/BasicExample/Tests/Editor/Validators/RaceValidator.cs.meta
similarity index 100%
rename from Assets/BasicExample/Tests/Editor/AssetValidators/RaceValidator.cs.meta
rename to Assets/BasicExample/Tests/Editor/Validators/RaceValidator.cs.meta
diff --git a/Assets/BasicExample/Tests/Editor/Validators/SceneValidator.cs b/Assets/BasicExample/Tests/Editor/Validators/SceneValidator.cs
new file mode 100644
index 0000000..07fc90e
--- /dev/null
+++ b/Assets/BasicExample/Tests/Editor/Validators/SceneValidator.cs
@@ -0,0 +1,52 @@
+// Copyright (c) 2021-2025 Koji Hasegawa.
+// This software is released under the MIT License.
+
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using NUnit.Framework;
+using UnityEditor;
+using UnityEditor.SceneManagement;
+using UnityEngine;
+
+namespace BasicExample.Editor.Validators
+{
+ ///
+ /// Assets/ 下のすべての Scene に対して、missing script がないことを検証する.
+ ///
+ ///
+ /// の使用例
+ ///
+ [TestFixture]
+ public class SceneValidator
+ {
+ private static IEnumerable Scenes => AssetDatabase
+ .FindAssets("t:SceneAsset", new string[] { "Assets/" })
+ .Select(AssetDatabase.GUIDToAssetPath)
+ .Select(path => new TestCaseData(path).SetName(Path.GetFileName(path)));
+
+ private static void AssertMissingScriptRecursive(GameObject gameObject)
+ {
+ var components = gameObject.GetComponents();
+ foreach (var component in components)
+ {
+ Assert.That(component, Is.Not.Null, $"Component in {gameObject.name}");
+ }
+
+ foreach (Transform child in gameObject.transform)
+ {
+ AssertMissingScriptRecursive(child.gameObject);
+ }
+ }
+
+ [TestCaseSource(nameof(Scenes))]
+ public void MissingScriptがないこと(string path)
+ {
+ var scene = EditorSceneManager.OpenScene(path);
+ foreach (var root in scene.GetRootGameObjects())
+ {
+ AssertMissingScriptRecursive(root);
+ }
+ }
+ }
+}
diff --git a/Assets/BasicExample/Tests/Editor/Validators/SceneValidator.cs.meta b/Assets/BasicExample/Tests/Editor/Validators/SceneValidator.cs.meta
new file mode 100644
index 0000000..5271dda
--- /dev/null
+++ b/Assets/BasicExample/Tests/Editor/Validators/SceneValidator.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 54b8dccf49f1c435aa18ab1c2cfe1549
\ No newline at end of file
diff --git a/Assets/BasicExample/Tests/Runtime/BasicExample.Tests.asmdef b/Assets/BasicExample/Tests/Runtime/BasicExample.Tests.asmdef
index 4c8f656..8d5a9f0 100644
--- a/Assets/BasicExample/Tests/Runtime/BasicExample.Tests.asmdef
+++ b/Assets/BasicExample/Tests/Runtime/BasicExample.Tests.asmdef
@@ -4,6 +4,8 @@
"references": [
"UnityEngine.TestRunner",
"UnityEditor.TestRunner",
+ "NUnit.Analyzers_Unity",
+ "TestHelper",
"BasicExample"
],
"includePlatforms": [],
diff --git a/Assets/BasicExample/Tests/Runtime/Entities/CharacterStatusTest.cs b/Assets/BasicExample/Tests/Runtime/Entities/CharacterStatusTest.cs
index c76ee4a..68a2ac1 100644
--- a/Assets/BasicExample/Tests/Runtime/Entities/CharacterStatusTest.cs
+++ b/Assets/BasicExample/Tests/Runtime/Entities/CharacterStatusTest.cs
@@ -13,67 +13,81 @@ public class CharacterStatusTest
public void IsDestroyed_まだ生きている()
{
var sut = new CharacterStatus(hp: 1);
+ Assume.That(sut.HitPoint, Is.EqualTo(1));
Assert.That(sut.IsDestroyed(), Is.False);
- Assert.That(sut.HitPoint, Is.EqualTo(1));
}
[Test]
public void IsDestroyed_もう死んでいる()
{
- var sut = new CharacterStatus(hp: 1);
- sut.TakeDamage(Element.None, 1);
+ var sut = new CharacterStatus(hp: 0);
+ Assume.That(sut.HitPoint, Is.EqualTo(0));
Assert.That(sut.IsDestroyed(), Is.True);
}
[Test]
- public void TakeDamage_防御力5に対して攻撃力1_被ダメージなし()
+ public void TakeDamage_防御力3に対して攻撃力1_ダメージなし()
{
- var sut = new CharacterStatus(element: Element.None, hp: 2, defense: 5);
- var damaged = sut.TakeDamage(Element.None, 1);
+ // Setup
+ var sut = new CharacterStatus(Element.None, defense: 3);
+
+ // Exercise
+ var damage = sut.TakeDamage(Element.None, attack: 1);
- Assert.That(damaged, Is.False);
+ // Verify
+ Assert.That(damage, Is.False);
}
[Test]
- public void TakeDamage_防御力5に対して攻撃力1_HP減少なし()
+ public void TakeDamage_防御力3に対して攻撃力1_HP減少なし()
{
- var sut = new CharacterStatus(element: Element.None, hp: 2, defense: 5);
- sut.TakeDamage(Element.None, 1);
+ // Setup
+ var beforeHp = 100;
+ var sut = new CharacterStatus(Element.None, defense: 3, hp: beforeHp);
+
+ // Exercise
+ sut.TakeDamage(Element.None, attack: 1);
- Assert.That(sut.HitPoint, Is.EqualTo(2));
+ // Verify
+ var deltaHp = sut.HitPoint - beforeHp;
+ Assert.That(deltaHp, Is.EqualTo(0));
}
[Test]
- public void TakeDamage_防御力0に対して攻撃力1_被ダメージあり()
+ public void TakeDamage_防御力0に対して攻撃力1_ダメージあり()
{
- var sut = new CharacterStatus(element: Element.None, hp: 2, defense: 0);
- var damaged = sut.TakeDamage(Element.None, 1);
+ var sut = new CharacterStatus(Element.None, defense: 0);
- Assert.That(damaged, Is.True);
+ var damage = sut.TakeDamage(Element.None, attack: 1);
+
+ Assert.That(damage, Is.True);
}
[Test]
public void TakeDamage_防御力2に対して攻撃力3_HPが1減少()
{
- var sut = new CharacterStatus(element: Element.None, hp: 5, defense: 2);
- sut.TakeDamage(element: Element.None, attackPower: 3);
+ var beforeHp = 100;
+ var sut = new CharacterStatus(Element.None, defense: 2, hp: beforeHp);
+
+ sut.TakeDamage(Element.None, attack: 3);
- var actual = sut.HitPoint - 5; // delta HP
- Assert.That(actual, Is.EqualTo(-1));
+ var deltaHp = sut.HitPoint - beforeHp;
+ Assert.That(deltaHp, Is.EqualTo(-1));
}
[TestCase(2, 3, -1)]
[TestCase(5, 7, -2)]
public void TakeDamage_防御力より攻撃力が大きい_HPが差分だけ減少(int defence, int attackPower, int expected)
{
- var beforeHp = 5;
- var sut = new CharacterStatus(element: Element.None, hp: beforeHp, defense: defence);
- sut.TakeDamage(element: Element.None, attackPower: attackPower);
+ var beforeHp = 100;
+ var sut = new CharacterStatus(Element.None, defense: defence, hp: beforeHp);
+
+ sut.TakeDamage(Element.None, attack: attackPower);
- var actual = sut.HitPoint - beforeHp; // delta HP
- Assert.That(actual, Is.EqualTo(expected));
+ var deltaHp = sut.HitPoint - beforeHp;
+ Assert.That(deltaHp, Is.EqualTo(expected));
}
}
}
diff --git a/Assets/BasicExample/Tests/Runtime/Entities/Enums/ElementTest.cs b/Assets/BasicExample/Tests/Runtime/Entities/Enums/ElementTest.cs
index abe16b3..2ed5c88 100644
--- a/Assets/BasicExample/Tests/Runtime/Entities/Enums/ElementTest.cs
+++ b/Assets/BasicExample/Tests/Runtime/Entities/Enums/ElementTest.cs
@@ -18,45 +18,17 @@ public class ElementTest
[TestCase(Element.Wood, Element.Fire)]
[TestCase(Element.Fire, Element.Water)]
[TestCase(Element.Water, Element.Wood)]
- [TestCase(Element.Earth, Element.Metal)]
- [TestCase(Element.Metal, Element.Earth)]
public void GetDamageMultiplier_弱点属性からの攻撃_ダメージ2倍(Element defence, Element attack)
{
var actual = defence.GetDamageMultiplier(attack);
Assert.That(actual, Is.EqualTo(2.0f));
}
- [TestCase(Element.Wood, Element.Water)]
- [TestCase(Element.Fire, Element.Wood)]
- [TestCase(Element.Water, Element.Fire)]
- public void GetDamageMultiplier_得意属性からの攻撃_ダメージ半減(Element defence, Element attack)
- {
- var actual = defence.GetDamageMultiplier(attack);
- Assert.That(actual, Is.EqualTo(0.5f));
- }
-
- [Test]
- [ParametrizedIgnore(Element.Earth, Element.Metal)]
- [ParametrizedIgnore(Element.Metal, Element.Earth)]
- public void GetDamageMultiplier_土金の得意属性_ダメージ半減(
- [Values(Element.Earth, Element.Metal)] Element defence,
- [Values] Element attack)
- {
- var actual = defence.GetDamageMultiplier(attack);
- Assert.That(actual, Is.EqualTo(0.5f));
- }
-
[Test]
[ParametrizedIgnore(Element.Wood, Element.Fire)]
[ParametrizedIgnore(Element.Fire, Element.Water)]
[ParametrizedIgnore(Element.Water, Element.Wood)]
- [ParametrizedIgnore(Element.Wood, Element.Water)]
- [ParametrizedIgnore(Element.Fire, Element.Wood)]
- [ParametrizedIgnore(Element.Water, Element.Fire)]
- public void GetDamageMultiplier_相性なし_ダメージは等倍(
- [Values(Element.None, Element.Wood, Element.Fire, Element.Water)]
- Element defence,
- [Values] Element attack)
+ public void GetDamageMultiplier_相性なし_ダメージは等倍([Values] Element defence, [Values] Element attack)
{
var actual = defence.GetDamageMultiplier(attack);
Assert.That(actual, Is.EqualTo(1.0f));
diff --git a/Assets/BasicExample/Tests/Runtime/Entities/PassiveEffectTest.cs b/Assets/BasicExample/Tests/Runtime/Entities/PassiveEffectTest.cs
index 9b1d82a..74ec1d2 100644
--- a/Assets/BasicExample/Tests/Runtime/Entities/PassiveEffectTest.cs
+++ b/Assets/BasicExample/Tests/Runtime/Entities/PassiveEffectTest.cs
@@ -1,150 +1,143 @@
-// Copyright (c) 2021-2022 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System.Collections;
using BasicExample.Entities.Enums;
using NUnit.Framework;
+using TestHelper.Attributes;
using UnityEngine;
using UnityEngine.TestTools;
-using UnityEngine.TestTools.Utils;
namespace BasicExample.Entities
{
[TestFixture]
public class PassiveEffectTest
{
+ private static PassiveEffect CreatePassiveEffect(bool buff = false, bool debuff = false)
+ {
+ var passiveEffect = new GameObject().AddComponent();
+
+ if (buff)
+ {
+ passiveEffect.Buff();
+ }
+
+ if (debuff)
+ {
+ passiveEffect.DeBuff();
+ }
+
+ return passiveEffect;
+ }
+
[TestFixture]
public class 状態遷移テスト
{
- private static readonly FloatEqualityComparer s_expireTimeComparer = new FloatEqualityComparer(0.1f);
-
[TestFixture]
public class 通常状態からの遷移
{
- private PassiveEffect _sut;
-
- [SetUp]
- public void SetUp()
- {
- _sut = new GameObject().AddComponent(); // 通常状態
- }
-
[Test]
public void デバフ_弱体状態になること()
{
- _sut.DeBuff();
- Assert.That(_sut.State(), Is.EqualTo(PassiveEffectState.Weakening));
+ var sut = CreatePassiveEffect();
+ sut.DeBuff();
+ Assert.That(sut.State(), Is.EqualTo(PassiveEffectState.Weakening));
}
[Test]
public void バフ_強化状態になること()
{
- _sut.Buff();
- Assert.That(_sut.State(), Is.EqualTo(PassiveEffectState.Strengthening));
+ var sut = CreatePassiveEffect();
+ sut.Buff();
+ Assert.That(sut.State(), Is.EqualTo(PassiveEffectState.Strengthening));
}
}
[TestFixture]
public class 弱体状態からの遷移
{
- private PassiveEffect _sut;
-
- [SetUp]
- public void SetUp()
- {
- _sut = new GameObject().AddComponent();
- _sut.DeBuff(); // 弱体状態
- }
-
- [TearDown]
- public void TearDown()
+ [Test]
+ public void バフ_通常状態になること()
{
- Time.timeScale = 1.0f;
+ var sut = CreatePassiveEffect(debuff: true);
+ sut.Buff();
+ Assert.That(sut.State(), Is.EqualTo(PassiveEffectState.Normal));
}
[Test]
public void デバフ_弱体状態が維持されること()
{
- _sut.DeBuff();
- Assert.That(_sut.State(), Is.EqualTo(PassiveEffectState.Weakening));
+ var sut = CreatePassiveEffect(debuff: true);
+ sut.DeBuff();
+ Assert.That(sut.State(), Is.EqualTo(PassiveEffectState.Weakening));
}
[UnityTest]
+ [TimeScale(10.0f)]
public IEnumerator デバフ_持続時間が30秒にリセットされること()
{
- Time.timeScale = 100.0f;
- yield return new WaitForSeconds(10f);
+ var sut = CreatePassiveEffect(debuff: true);
+ yield return new WaitForSeconds(5.0f);
+ Assume.That(sut.State(), Is.EqualTo(PassiveEffectState.Weakening));
+ Assume.That(sut.PassiveEffectExpireTime(), Is.EqualTo(25.0f).Within(0.1f));
- _sut.DeBuff();
- Assert.That(_sut.State(), Is.EqualTo(PassiveEffectState.Weakening));
- Assert.That(_sut.PassiveEffectExpireTime(), Is.EqualTo(30f).Using(s_expireTimeComparer));
- }
+ sut.DeBuff();
- [Test]
- public void バフ_通常状態になること()
- {
- _sut.Buff();
- Assert.That(_sut.State(), Is.EqualTo(PassiveEffectState.Normal));
+ Assert.That(sut.State(), Is.EqualTo(PassiveEffectState.Weakening));
+ Assert.That(sut.PassiveEffectExpireTime(), Is.EqualTo(30.0f).Within(0.1f));
}
[UnityTest]
+ [TimeScale(10.0f)]
public IEnumerator 時間切れ_通常状態になること()
{
- Time.timeScale = 100.0f;
- yield return new WaitForSeconds(30f);
- Assert.That(_sut.State(), Is.EqualTo(PassiveEffectState.Normal));
+ var sut = CreatePassiveEffect(debuff: true);
+ yield return new WaitForSeconds(30.2f);
+ Assert.That(sut.State(), Is.EqualTo(PassiveEffectState.Normal));
}
}
[TestFixture]
public class 強化状態からの遷移
{
- private PassiveEffect _sut;
-
- [SetUp]
- public void SetUp()
- {
- _sut = new GameObject().AddComponent();
- _sut.Buff(); // 強化状態
- }
-
- [TearDown]
- public void TearDown()
- {
- Time.timeScale = 1.0f;
- }
-
[Test]
public void デバフ_通常状態になること()
{
- _sut.DeBuff();
- Assert.That(_sut.State(), Is.EqualTo(PassiveEffectState.Normal));
+ var sut = CreatePassiveEffect(buff: true);
+ sut.DeBuff();
+ Assert.That(sut.State(), Is.EqualTo(PassiveEffectState.Normal));
}
[Test]
public void バフ_強化状態が維持されること()
{
- _sut.Buff();
- Assert.That(_sut.State(), Is.EqualTo(PassiveEffectState.Strengthening));
+ var sut = CreatePassiveEffect(buff: true);
+ sut.Buff();
+ Assert.That(sut.State(), Is.EqualTo(PassiveEffectState.Strengthening));
}
[UnityTest]
+ [TimeScale(10.0f)]
public IEnumerator バフ_持続時間が30秒にリセットされること()
{
- Time.timeScale = 100.0f;
- yield return new WaitForSeconds(10f);
+ var sut = CreatePassiveEffect(buff: true);
+ yield return new WaitForSeconds(5.0f);
+ Assume.That(sut.State(), Is.EqualTo(PassiveEffectState.Strengthening));
+ Assume.That(sut.PassiveEffectExpireTime(), Is.EqualTo(25.0f).Within(0.2f));
+
+ sut.Buff();
- _sut.Buff();
- Assert.That(_sut.State(), Is.EqualTo(PassiveEffectState.Strengthening));
- Assert.That(_sut.PassiveEffectExpireTime(), Is.EqualTo(30f).Using(s_expireTimeComparer));
+ Assert.That(sut.State(), Is.EqualTo(PassiveEffectState.Strengthening));
+ Assert.That(sut.PassiveEffectExpireTime(), Is.EqualTo(30.0f).Within(0.1f));
}
[UnityTest]
+ [TimeScale(10.0f)]
public IEnumerator 時間切れ_通常状態になること()
{
- Time.timeScale = 100.0f;
- yield return new WaitForSeconds(30f);
- Assert.That(_sut.State(), Is.EqualTo(PassiveEffectState.Normal));
+ var sut = CreatePassiveEffect(buff: true);
+ yield return new WaitForSeconds(30.2f);
+ Assert.That(sut.State(), Is.EqualTo(PassiveEffectState.Normal));
}
}
}
diff --git a/Assets/InputSystemExample/Tests/Runtime/MonkeyTest.cs b/Assets/InputSystemExample/Tests/Runtime/MonkeyTest.cs
index 3149f96..8e52372 100644
--- a/Assets/InputSystemExample/Tests/Runtime/MonkeyTest.cs
+++ b/Assets/InputSystemExample/Tests/Runtime/MonkeyTest.cs
@@ -1,4 +1,4 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System.Diagnostics.CodeAnalysis;
@@ -45,7 +45,7 @@ public void TearDown()
[Test]
public async Task MonkeyTesting()
{
- var random = new RandomImpl(); // 擬似乱数生成器
+ var random = new RandomWrapper(); // 擬似乱数生成器
Debug.Log($"Random that monkey uses: {random}"); // シード値をログ出力(再現可能にするため)
await SceneManager.LoadSceneAsync("InputSystemExample");
@@ -57,8 +57,8 @@ public async Task MonkeyTesting()
using (var tokenSource = new CancellationTokenSource())
{
- PressKeys(new RandomImpl(random.Next()), tokenSource.Token).Forget();
- MoveMouse(new RandomImpl(random.Next()), tokenSource.Token).Forget();
+ PressKeys(new RandomWrapper(random.Next()), tokenSource.Token).Forget();
+ MoveMouse(new RandomWrapper(random.Next()), tokenSource.Token).Forget();
var expireTime = Time.time + 10.0f; // 10秒間動作させる(3分以上にする場合はTimeout属性でタイムアウト時間を延長)
while (Time.time < expireTime)
@@ -117,7 +117,7 @@ private async UniTask MoveMouse(IRandom random, CancellationToken token)
while (true)
{
var mouseDelta = random.NextNormalizedVector2(); // マウスの移動量を抽選
- _input.Set(mouse.delta, mouseDelta); // マウス移動
+ _input.Set(mouse.delta, mouseDelta); // マウス移動
await UniTask.NextFrame(cancellationToken: token);
}
diff --git a/Assets/UGUIExample/Tests/Runtime/MonkeyTest.cs b/Assets/UGUIExample/Tests/Runtime/MonkeyTest.cs
index c116947..e37cd5b 100644
--- a/Assets/UGUIExample/Tests/Runtime/MonkeyTest.cs
+++ b/Assets/UGUIExample/Tests/Runtime/MonkeyTest.cs
@@ -1,12 +1,12 @@
-// Copyright (c) 2021-2023 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System;
using System.Threading.Tasks;
using Cysharp.Threading.Tasks;
using NUnit.Framework;
-using TestHelper.Monkey;
using TestHelper.Random;
+using TestHelper.UI;
using UnityEngine;
using UnityEngine.SceneManagement;
@@ -22,7 +22,7 @@ public class MonkeyTest
[Test]
public async Task MonkeyTesting()
{
- var random = new RandomImpl(); // 擬似乱数生成器
+ var random = new RandomWrapper(); // 擬似乱数生成器
Debug.Log($"Random that monkey uses: {random}"); // シード値をログ出力
await SceneManager.LoadSceneAsync("MainMenu");
@@ -30,10 +30,10 @@ public async Task MonkeyTesting()
var config = new MonkeyConfig
{
- Lifetime = TimeSpan.FromSeconds(5), // 5秒間動作(3分以上にする場合はTimeout属性でテスト自体のタイムウトを延ばすこと)
- DelayMillis = 200, // 操作間隔は200ms
+ Lifetime = TimeSpan.FromSeconds(5), // 5秒間動作(3分以上にする場合はTimeout属性でテスト自体のタイムウトを延ばすこと)
+ DelayMillis = 200, // 操作間隔は200ms
SecondsToErrorForNoInteractiveComponent = 5, // 5秒無操作で失敗扱い
- Random = random, // 擬似乱数生成器を指定
+ Random = random, // 擬似乱数生成器を指定
};
await Monkey.Run(config);
diff --git a/Assets/UGUIExample/Tests/Runtime/UGUIExample.Tests.asmdef b/Assets/UGUIExample/Tests/Runtime/UGUIExample.Tests.asmdef
index 8f87f01..a3d3576 100644
--- a/Assets/UGUIExample/Tests/Runtime/UGUIExample.Tests.asmdef
+++ b/Assets/UGUIExample/Tests/Runtime/UGUIExample.Tests.asmdef
@@ -1,13 +1,14 @@
{
"name": "UGUIExample.Tests",
+ "rootNamespace": "",
"references": [
"UnityEngine.TestRunner",
"UnityEditor.TestRunner",
"UGUIExample",
"UniTask",
"TestHelper",
- "TestHelper.Monkey",
- "TestHelper.Random"
+ "TestHelper.Random",
+ "TestHelper.UI"
],
"includePlatforms": [],
"excludePlatforms": [],
diff --git a/Assets/VisualRegressionExample/Tests/Runtime/ImageAssertTest.cs b/Assets/VisualRegressionExample/Tests/Runtime/ImageAssertTest.cs
index 974647a..031d8c0 100644
--- a/Assets/VisualRegressionExample/Tests/Runtime/ImageAssertTest.cs
+++ b/Assets/VisualRegressionExample/Tests/Runtime/ImageAssertTest.cs
@@ -1,6 +1,7 @@
// Copyright (c) 2021-2023 Koji Hasegawa.
// This software is released under the MIT License.
+#if ENABLE_GRAPHICS_TEST_FRAMEWORK
using System.Collections;
using System.IO;
using System.Threading.Tasks;
@@ -125,3 +126,4 @@ private class CoroutineRunner : MonoBehaviour
}
}
}
+#endif
diff --git a/Assets/VisualRegressionExample/Tests/Runtime/VisualRegressionExample.Tests.asmdef b/Assets/VisualRegressionExample/Tests/Runtime/VisualRegressionExample.Tests.asmdef
index 2bc2317..b9f18ce 100644
--- a/Assets/VisualRegressionExample/Tests/Runtime/VisualRegressionExample.Tests.asmdef
+++ b/Assets/VisualRegressionExample/Tests/Runtime/VisualRegressionExample.Tests.asmdef
@@ -19,6 +19,12 @@
"defineConstraints": [
"UNITY_INCLUDE_TESTS"
],
- "versionDefines": [],
+ "versionDefines": [
+ {
+ "name": "com.unity.testframework.graphics",
+ "expression": "",
+ "define": "ENABLE_GRAPHICS_TEST_FRAMEWORK"
+ }
+ ],
"noEngineReferences": false
}
\ No newline at end of file
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor.meta b/LocalPackages/com.nowsprinting.local-package-sample/Editor.meta
similarity index 100%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor.meta
rename to LocalPackages/com.nowsprinting.local-package-sample/Editor.meta
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/ExampleForCoverage.cs b/LocalPackages/com.nowsprinting.local-package-sample/Editor/ExampleForCoverage.cs
similarity index 99%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/ExampleForCoverage.cs
rename to LocalPackages/com.nowsprinting.local-package-sample/Editor/ExampleForCoverage.cs
index e8b8e09..49cc0a9 100644
--- a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/ExampleForCoverage.cs
+++ b/LocalPackages/com.nowsprinting.local-package-sample/Editor/ExampleForCoverage.cs
@@ -2,6 +2,7 @@
// This software is released under the MIT License.
// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
+
namespace LocalPackageSample.Editor
{
public static class ExampleForCoverage
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/ExampleForCoverage.cs.meta b/LocalPackages/com.nowsprinting.local-package-sample/Editor/ExampleForCoverage.cs.meta
similarity index 100%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/ExampleForCoverage.cs.meta
rename to LocalPackages/com.nowsprinting.local-package-sample/Editor/ExampleForCoverage.cs.meta
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/LocalPackageSample.Editor.asmdef b/LocalPackages/com.nowsprinting.local-package-sample/Editor/LocalPackageSample.Editor.asmdef
similarity index 100%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/LocalPackageSample.Editor.asmdef
rename to LocalPackages/com.nowsprinting.local-package-sample/Editor/LocalPackageSample.Editor.asmdef
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/LocalPackageSample.Editor.asmdef.meta b/LocalPackages/com.nowsprinting.local-package-sample/Editor/LocalPackageSample.Editor.asmdef.meta
similarity index 100%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/LocalPackageSample.Editor.asmdef.meta
rename to LocalPackages/com.nowsprinting.local-package-sample/Editor/LocalPackageSample.Editor.asmdef.meta
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime.meta b/LocalPackages/com.nowsprinting.local-package-sample/Runtime.meta
similarity index 100%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime.meta
rename to LocalPackages/com.nowsprinting.local-package-sample/Runtime.meta
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime/ExampleForCoverage.cs b/LocalPackages/com.nowsprinting.local-package-sample/Runtime/ExampleForCoverage.cs
similarity index 99%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime/ExampleForCoverage.cs
rename to LocalPackages/com.nowsprinting.local-package-sample/Runtime/ExampleForCoverage.cs
index 69e4eac..bce28d6 100644
--- a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime/ExampleForCoverage.cs
+++ b/LocalPackages/com.nowsprinting.local-package-sample/Runtime/ExampleForCoverage.cs
@@ -2,6 +2,7 @@
// This software is released under the MIT License.
// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
+
namespace LocalPackageSample
{
public static class ExampleForCoverage
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime/ExampleForCoverage.cs.meta b/LocalPackages/com.nowsprinting.local-package-sample/Runtime/ExampleForCoverage.cs.meta
similarity index 100%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime/ExampleForCoverage.cs.meta
rename to LocalPackages/com.nowsprinting.local-package-sample/Runtime/ExampleForCoverage.cs.meta
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime/LocalPackageSample.asmdef b/LocalPackages/com.nowsprinting.local-package-sample/Runtime/LocalPackageSample.asmdef
similarity index 100%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime/LocalPackageSample.asmdef
rename to LocalPackages/com.nowsprinting.local-package-sample/Runtime/LocalPackageSample.asmdef
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime/LocalPackageSample.asmdef.meta b/LocalPackages/com.nowsprinting.local-package-sample/Runtime/LocalPackageSample.asmdef.meta
similarity index 100%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scripts/Runtime/LocalPackageSample.asmdef.meta
rename to LocalPackages/com.nowsprinting.local-package-sample/Runtime/LocalPackageSample.asmdef.meta
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scenes/SceneInPackage.unity b/LocalPackages/com.nowsprinting.local-package-sample/Scenes/SceneInLocalPackage.unity
similarity index 90%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scenes/SceneInPackage.unity
rename to LocalPackages/com.nowsprinting.local-package-sample/Scenes/SceneInLocalPackage.unity
index 28d9b9d..64ed80f 100644
--- a/LocalPackages/com.nowsprinting.local-package-sample/Scenes/SceneInPackage.unity
+++ b/LocalPackages/com.nowsprinting.local-package-sample/Scenes/SceneInLocalPackage.unity
@@ -13,7 +13,7 @@ OcclusionCullingSettings:
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
- serializedVersion: 9
+ serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
@@ -38,13 +38,12 @@ RenderSettings:
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
- m_IndirectSpecularColor: {r: 0.44657838, g: 0.49641234, b: 0.57481676, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
- serializedVersion: 12
- m_GIWorkflowMode: 1
+ serializedVersion: 13
+ m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
@@ -67,9 +66,6 @@ LightmapSettings:
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
- m_FinalGather: 0
- m_FinalGatherFiltering: 1
- m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
@@ -104,7 +100,7 @@ NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
- serializedVersion: 2
+ serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
@@ -117,7 +113,7 @@ NavMeshSettings:
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
- accuratePlacement: 0
+ buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
@@ -150,8 +146,17 @@ CapsuleCollider:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 551686857}
m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_IsTrigger: 0
+ m_ProvidesContacts: 0
m_Enabled: 1
+ serializedVersion: 2
m_Radius: 0.5000001
m_Height: 2
m_Direction: 1
@@ -167,11 +172,15 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -212,12 +221,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 551686857}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 924.2142, y: 351.34674, z: -17.195045}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
- m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &854170358
GameObject:
@@ -244,9 +254,8 @@ Light:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 854170358}
m_Enabled: 1
- serializedVersion: 10
+ serializedVersion: 11
m_Type: 1
- m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
@@ -296,8 +305,12 @@ Light:
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
+ m_ForceVisible: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
+ m_LightUnit: 1
+ m_LuxAtDistance: 1
+ m_EnableSpotReflector: 1
--- !u!4 &854170360
Transform:
m_ObjectHideFlags: 0
@@ -305,12 +318,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 854170358}
+ serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
- m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &2006839994
GameObject:
@@ -352,9 +366,17 @@ Camera:
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
- m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
@@ -388,10 +410,18 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2006839994}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
- m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 2006839997}
+ - {fileID: 854170360}
+ - {fileID: 551686861}
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scenes/SceneInPackage.unity.meta b/LocalPackages/com.nowsprinting.local-package-sample/Scenes/SceneInLocalPackage.unity.meta
similarity index 100%
rename from LocalPackages/com.nowsprinting.local-package-sample/Scenes/SceneInPackage.unity.meta
rename to LocalPackages/com.nowsprinting.local-package-sample/Scenes/SceneInLocalPackage.unity.meta
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts.meta b/LocalPackages/com.nowsprinting.local-package-sample/Scripts.meta
deleted file mode 100644
index e8ca509..0000000
--- a/LocalPackages/com.nowsprinting.local-package-sample/Scripts.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 3c48a046ace8d442c8fd1836d056e41c
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs b/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs
deleted file mode 100644
index 51e5740..0000000
--- a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2021 Koji Hasegawa.
-// This software is released under the MIT License.
-
-using System.Collections.Generic;
-using System.Linq;
-using LocalPackageSample.Editor;
-using UnityEditor;
-using UnityEditor.TestTools;
-
-[assembly: TestPlayerBuildModifier(typeof(BuildAllScenesForTestPlayer))]
-
-// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
-namespace LocalPackageSample.Editor
-{
- ///
- /// プレイヤーでのテスト実行前のビルドで、"Scenes in Build"に指定されていないSceneを一時的にビルドに含めます。
- /// これによって、テスト内で を使用してSceneをロードできるようになります。
- ///
- ///
- /// このスクリプトの利用には、Unity Test Frameworkパッケージ v1.1.13以上が必要です。
- /// 詳細は フォーラムの報告 を参照してください。
- ///
- public class BuildAllScenesForTestPlayer : ITestPlayerBuildModifier
- {
- public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions)
- {
- var buildSceneList = new List(playerOptions.scenes);
- foreach (var scene in AssetDatabase
- .FindAssets("t:SceneAsset", new string[] { "Packages/com.nowsprinting.local-package-sample" })
- .Select(AssetDatabase.GUIDToAssetPath))
- {
- if (!buildSceneList.Contains(scene))
- {
- buildSceneList.Add(scene);
- }
- }
- // 引数で渡される `playerOptions.scenes` に入っているSceneの順序を変えると、テストが起動しないことがあります。
- // そのため、不足しているSceneだけを後ろに追加しています。
-
- playerOptions.scenes = buildSceneList.ToArray();
-
- return playerOptions;
- }
- }
-}
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs.meta b/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs.meta
deleted file mode 100644
index 3ba9f06..0000000
--- a/LocalPackages/com.nowsprinting.local-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: b925ede2abfa84db59cdd3cae92c072e
-timeCreated: 1622685134
\ No newline at end of file
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Editor/EditorSceneManagerTest.cs b/LocalPackages/com.nowsprinting.local-package-sample/Tests/Editor/EditorSceneManagerTest.cs
index 6cd729d..1aa3fab 100644
--- a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Editor/EditorSceneManagerTest.cs
+++ b/LocalPackages/com.nowsprinting.local-package-sample/Tests/Editor/EditorSceneManagerTest.cs
@@ -1,11 +1,10 @@
-// Copyright (c) 2021 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using NUnit.Framework;
using UnityEditor.SceneManagement;
using UnityEngine;
-// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
namespace LocalPackageSample.Editor
{
[TestFixture]
@@ -14,7 +13,8 @@ public class EditorSceneManagerTest
[Test]
public void OpenScene_Sceneファイルをロードしてテストを実行する例()
{
- EditorSceneManager.OpenScene("Packages/com.nowsprinting.local-package-sample/Scenes/SceneInPackage.unity");
+ EditorSceneManager.OpenScene(
+ "Packages/com.nowsprinting.local-package-sample/Scenes/SceneInLocalPackage.unity");
// パスはProjectウィンドウに表示されるパスで指定。ただしパッケージ名の部分は `displayName` でなく `name` を使用。
var cylinder = GameObject.Find("Cylinder");
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/LocalPackageSample.Tests.asmdef b/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/LocalPackageSample.Tests.asmdef
index 8b38027..656c0c0 100644
--- a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/LocalPackageSample.Tests.asmdef
+++ b/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/LocalPackageSample.Tests.asmdef
@@ -4,6 +4,7 @@
"references": [
"UnityEngine.TestRunner",
"UnityEditor.TestRunner",
+ "TestHelper",
"LocalPackageSample"
],
"includePlatforms": [],
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/SceneManagerTest.cs b/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/SceneManagerTest.cs
index 4b0d051..0a49f64 100644
--- a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/SceneManagerTest.cs
+++ b/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/SceneManagerTest.cs
@@ -1,23 +1,22 @@
-// Copyright (c) 2021 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System.Collections;
using NUnit.Framework;
-using LocalPackageSample.Utils;
+using TestHelper.Attributes;
using UnityEngine;
using UnityEngine.TestTools;
-// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
namespace LocalPackageSample
{
[TestFixture]
public class SceneManagerTest
{
[UnityTest]
+ [LoadScene("../../Scenes/SceneInLocalPackage.unity")]
public IEnumerator LoadSceneAsync_ScenesInBuildに含まれていないSceneをロードする例()
{
- yield return TestSceneLoader.LoadSceneAsync("Packages/com.nowsprinting.local-package-sample/Scenes/SceneInPackage.unity");
- // パスはProjectウィンドウに表示されるパスで指定。ただしパッケージ名の部分は `displayName` でなく `name` を使用。
+ yield return null;
var cylinder = GameObject.Find("Cylinder");
Assert.That(cylinder, Is.Not.Null);
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/Utils.meta b/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/Utils.meta
deleted file mode 100644
index 088b90c..0000000
--- a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/Utils.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: cc53feb1308604ddeb5461135729714f
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs b/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs
deleted file mode 100644
index d9ba585..0000000
--- a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2021 Koji Hasegawa.
-// This software is released under the MIT License.
-
-using System.Collections;
-using UnityEngine;
-using UnityEngine.SceneManagement;
-
-// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
-namespace LocalPackageSample.Utils
-{
- public static class TestSceneLoader
- {
- ///
- /// Play Modeテスト内でSceneをロードする
- ///
- ///
- /// エディター実行では でロード。
- /// プレイヤー実行では を使用して
- /// 一時的にビルド対象に含めている前提で でロードしています。
- ///
- /// Packages/〜.unityまでのパスで指定
- ///
- public static IEnumerator LoadSceneAsync(string path)
- {
- AsyncOperation loadSceneAsync = null;
-#if UNITY_EDITOR
- // Use EditorSceneManager at run on Unity-editor
- loadSceneAsync = UnityEditor.SceneManagement.EditorSceneManager.LoadSceneAsyncInPlayMode(
- path,
- new LoadSceneParameters(LoadSceneMode.Single));
-#else
- // Use ITestPlayerBuildModifier to change the "Scenes in Build" list before run on player
- // see: Editor/BuildAllScenesForTestPlayer.cs
- loadSceneAsync = SceneManager.LoadSceneAsync(path);
-#endif
- yield return loadSceneAsync;
- }
- }
-}
diff --git a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs.meta b/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs.meta
deleted file mode 100644
index 1b93d12..0000000
--- a/LocalPackages/com.nowsprinting.local-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: fbd3c4354ca3f43888ce0d331ea0099d
-timeCreated: 1622684487
\ No newline at end of file
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor.meta b/Packages/com.nowsprinting.embedded-package-sample/Editor.meta
similarity index 100%
rename from Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor.meta
rename to Packages/com.nowsprinting.embedded-package-sample/Editor.meta
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/EmbeddedPackageSample.Editor.asmdef b/Packages/com.nowsprinting.embedded-package-sample/Editor/EmbeddedPackageSample.Editor.asmdef
similarity index 100%
rename from Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/EmbeddedPackageSample.Editor.asmdef
rename to Packages/com.nowsprinting.embedded-package-sample/Editor/EmbeddedPackageSample.Editor.asmdef
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/EmbeddedPackageSample.Editor.asmdef.meta b/Packages/com.nowsprinting.embedded-package-sample/Editor/EmbeddedPackageSample.Editor.asmdef.meta
similarity index 100%
rename from Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/EmbeddedPackageSample.Editor.asmdef.meta
rename to Packages/com.nowsprinting.embedded-package-sample/Editor/EmbeddedPackageSample.Editor.asmdef.meta
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/ExampleForCoverage.cs b/Packages/com.nowsprinting.embedded-package-sample/Editor/ExampleForCoverage.cs
similarity index 99%
rename from Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/ExampleForCoverage.cs
rename to Packages/com.nowsprinting.embedded-package-sample/Editor/ExampleForCoverage.cs
index a0e0d5a..c2a9290 100644
--- a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/ExampleForCoverage.cs
+++ b/Packages/com.nowsprinting.embedded-package-sample/Editor/ExampleForCoverage.cs
@@ -2,6 +2,7 @@
// This software is released under the MIT License.
// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
+
namespace EmbeddedPackageSample.Editor
{
public static class ExampleForCoverage
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/ExampleForCoverage.cs.meta b/Packages/com.nowsprinting.embedded-package-sample/Editor/ExampleForCoverage.cs.meta
similarity index 100%
rename from Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/ExampleForCoverage.cs.meta
rename to Packages/com.nowsprinting.embedded-package-sample/Editor/ExampleForCoverage.cs.meta
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime.meta b/Packages/com.nowsprinting.embedded-package-sample/Runtime.meta
similarity index 100%
rename from Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime.meta
rename to Packages/com.nowsprinting.embedded-package-sample/Runtime.meta
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime/EmbeddedPackageSample.asmdef b/Packages/com.nowsprinting.embedded-package-sample/Runtime/EmbeddedPackageSample.asmdef
similarity index 100%
rename from Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime/EmbeddedPackageSample.asmdef
rename to Packages/com.nowsprinting.embedded-package-sample/Runtime/EmbeddedPackageSample.asmdef
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime/EmbeddedPackageSample.asmdef.meta b/Packages/com.nowsprinting.embedded-package-sample/Runtime/EmbeddedPackageSample.asmdef.meta
similarity index 100%
rename from Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime/EmbeddedPackageSample.asmdef.meta
rename to Packages/com.nowsprinting.embedded-package-sample/Runtime/EmbeddedPackageSample.asmdef.meta
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime/ExampleForCoverage.cs b/Packages/com.nowsprinting.embedded-package-sample/Runtime/ExampleForCoverage.cs
similarity index 99%
rename from Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime/ExampleForCoverage.cs
rename to Packages/com.nowsprinting.embedded-package-sample/Runtime/ExampleForCoverage.cs
index d19405b..2a06411 100644
--- a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime/ExampleForCoverage.cs
+++ b/Packages/com.nowsprinting.embedded-package-sample/Runtime/ExampleForCoverage.cs
@@ -2,6 +2,7 @@
// This software is released under the MIT License.
// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
+
namespace EmbeddedPackageSample
{
public static class ExampleForCoverage
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime/ExampleForCoverage.cs.meta b/Packages/com.nowsprinting.embedded-package-sample/Runtime/ExampleForCoverage.cs.meta
similarity index 100%
rename from Packages/com.nowsprinting.embedded-package-sample/Scripts/Runtime/ExampleForCoverage.cs.meta
rename to Packages/com.nowsprinting.embedded-package-sample/Runtime/ExampleForCoverage.cs.meta
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInPackage.unity b/Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInEmbeddedPackage.unity
similarity index 90%
rename from Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInPackage.unity
rename to Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInEmbeddedPackage.unity
index e207df4..0f47e54 100644
--- a/Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInPackage.unity
+++ b/Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInEmbeddedPackage.unity
@@ -13,7 +13,7 @@ OcclusionCullingSettings:
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
- serializedVersion: 9
+ serializedVersion: 10
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
@@ -38,13 +38,12 @@ RenderSettings:
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
- m_IndirectSpecularColor: {r: 0.44657838, g: 0.49641234, b: 0.57481676, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
- serializedVersion: 12
- m_GIWorkflowMode: 1
+ serializedVersion: 13
+ m_BakeOnSceneLoad: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
@@ -67,9 +66,6 @@ LightmapSettings:
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
- m_FinalGather: 0
- m_FinalGatherFiltering: 1
- m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
@@ -104,7 +100,7 @@ NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
- serializedVersion: 2
+ serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
@@ -117,7 +113,7 @@ NavMeshSettings:
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
- accuratePlacement: 0
+ buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
@@ -150,8 +146,17 @@ CapsuleCollider:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 340338593}
m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_IsTrigger: 0
+ m_ProvidesContacts: 0
m_Enabled: 1
+ serializedVersion: 2
m_Radius: 0.5
m_Height: 2
m_Direction: 1
@@ -167,11 +172,15 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
@@ -212,12 +221,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 340338593}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 924.2142, y: 351.34674, z: -17.195045}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
- m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &854170358
GameObject:
@@ -244,9 +254,8 @@ Light:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 854170358}
m_Enabled: 1
- serializedVersion: 10
+ serializedVersion: 11
m_Type: 1
- m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
@@ -296,8 +305,12 @@ Light:
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
+ m_ForceVisible: 0
m_ShadowRadius: 0
m_ShadowAngle: 0
+ m_LightUnit: 1
+ m_LuxAtDistance: 1
+ m_EnableSpotReflector: 1
--- !u!4 &854170360
Transform:
m_ObjectHideFlags: 0
@@ -305,12 +318,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 854170358}
+ serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
- m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &2006839994
GameObject:
@@ -352,9 +366,17 @@ Camera:
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
- m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
@@ -388,10 +410,18 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2006839994}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
- m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 2006839997}
+ - {fileID: 854170360}
+ - {fileID: 340338597}
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInPackage.unity.meta b/Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInEmbeddedPackage.unity.meta
similarity index 100%
rename from Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInPackage.unity.meta
rename to Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInEmbeddedPackage.unity.meta
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts.meta b/Packages/com.nowsprinting.embedded-package-sample/Scripts.meta
deleted file mode 100644
index 1de877f..0000000
--- a/Packages/com.nowsprinting.embedded-package-sample/Scripts.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 22670d83d504b4ab1918d0d4765056a3
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs b/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs
deleted file mode 100644
index cbcc3bd..0000000
--- a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2021 Koji Hasegawa.
-// This software is released under the MIT License.
-
-using System.Collections.Generic;
-using System.Linq;
-using EmbeddedPackageSample.Editor;
-using UnityEditor;
-using UnityEditor.TestTools;
-
-[assembly: TestPlayerBuildModifier(typeof(BuildAllScenesForTestPlayer))]
-
-// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
-namespace EmbeddedPackageSample.Editor
-{
- ///
- /// プレイヤーでのテスト実行前のビルドで、"Scenes in Build"に指定されていないSceneを一時的にビルドに含めます。
- /// これによって、テスト内で を使用してSceneをロードできるようになります。
- ///
- ///
- /// このスクリプトの利用には、Unity Test Frameworkパッケージ v1.1.13以上が必要です。
- /// 詳細は フォーラムの報告 を参照してください。
- ///
- public class BuildAllScenesForTestPlayer : ITestPlayerBuildModifier
- {
- public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions)
- {
- var buildSceneList = new List(playerOptions.scenes);
- foreach (var scene in AssetDatabase
- .FindAssets("t:SceneAsset", new [] { "Packages/com.nowsprinting.embedded-package-sample" })
- .Select(AssetDatabase.GUIDToAssetPath))
- {
- if (!buildSceneList.Contains(scene))
- {
- buildSceneList.Add(scene);
- }
- }
- // 引数で渡される `playerOptions.scenes` に入っているSceneの順序を変えると、テストが起動しないことがあります。
- // そのため、不足しているSceneだけを後ろに追加しています。
-
- playerOptions.scenes = buildSceneList.ToArray();
-
- return playerOptions;
- }
- }
-}
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs.meta b/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs.meta
deleted file mode 100644
index 2f38e5c..0000000
--- a/Packages/com.nowsprinting.embedded-package-sample/Scripts/Editor/BuildAllScenesForTestPlayer.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 6cd4b04aeeb6c48e0a272ed129f0ebb8
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Tests/Editor/EditorSceneManagerTest.cs b/Packages/com.nowsprinting.embedded-package-sample/Tests/Editor/EditorSceneManagerTest.cs
index 43c2e70..bcfaf95 100644
--- a/Packages/com.nowsprinting.embedded-package-sample/Tests/Editor/EditorSceneManagerTest.cs
+++ b/Packages/com.nowsprinting.embedded-package-sample/Tests/Editor/EditorSceneManagerTest.cs
@@ -1,11 +1,10 @@
-// Copyright (c) 2021 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using NUnit.Framework;
using UnityEditor.SceneManagement;
using UnityEngine;
-// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
namespace EmbeddedPackageSample.Editor
{
[TestFixture]
@@ -14,7 +13,8 @@ public class EditorSceneManagerTest
[Test]
public void OpenScene_Sceneファイルをロードしてテストを実行する例()
{
- EditorSceneManager.OpenScene("Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInPackage.unity");
+ EditorSceneManager.OpenScene(
+ "Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInEmbeddedPackage.unity");
// パスはProjectウィンドウに表示されるパスで指定。ただしパッケージ名の部分は `displayName` でなく `name` を使用。
var capsule = GameObject.Find("Capsule");
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/EmbeddedPackageSample.Tests.asmdef b/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/EmbeddedPackageSample.Tests.asmdef
index 52774ef..dd965bc 100644
--- a/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/EmbeddedPackageSample.Tests.asmdef
+++ b/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/EmbeddedPackageSample.Tests.asmdef
@@ -4,6 +4,7 @@
"references": [
"UnityEngine.TestRunner",
"UnityEditor.TestRunner",
+ "TestHelper",
"EmbeddedPackageSample"
],
"includePlatforms": [],
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/SceneManagerTest.cs b/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/SceneManagerTest.cs
index 2869353..9e6b45f 100644
--- a/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/SceneManagerTest.cs
+++ b/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/SceneManagerTest.cs
@@ -1,23 +1,22 @@
-// Copyright (c) 2021 Koji Hasegawa.
+// Copyright (c) 2021-2025 Koji Hasegawa.
// This software is released under the MIT License.
using System.Collections;
using NUnit.Framework;
-using EmbeddedPackageSample.Utils;
+using TestHelper.Attributes;
using UnityEngine;
using UnityEngine.TestTools;
-// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
namespace EmbeddedPackageSample
{
[TestFixture]
public class SceneManagerTest
{
[UnityTest]
+ [LoadScene("../../Scenes/SceneInEmbeddedPackage.unity")]
public IEnumerator LoadSceneAsync_ScenesInBuildに含まれていないSceneをロードする例()
{
- yield return TestSceneLoader.LoadSceneAsync("Packages/com.nowsprinting.embedded-package-sample/Scenes/SceneInPackage.unity");
- // パスはProjectウィンドウに表示されるパスで指定。ただしパッケージ名の部分は `displayName` でなく `name` を使用。
+ yield return null;
var capsule = GameObject.Find("Capsule");
Assert.That(capsule, Is.Not.Null);
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/Utils.meta b/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/Utils.meta
deleted file mode 100644
index 22f1b24..0000000
--- a/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/Utils.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 3d0e241336b74cdf8c8522920f18335c
-timeCreated: 1624820735
\ No newline at end of file
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs b/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs
deleted file mode 100644
index e7be62b..0000000
--- a/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2021 Koji Hasegawa.
-// This software is released under the MIT License.
-
-using System.Collections;
-using UnityEngine;
-using UnityEngine.SceneManagement;
-
-// ReSharper disable once CheckNamespace (rootNamespace not work in Unity 2019)
-namespace EmbeddedPackageSample.Utils
-{
- public static class TestSceneLoader
- {
- ///
- /// Play Modeテスト内でSceneをロードする
- ///
- ///
- /// エディター実行では でロード。
- /// プレイヤー実行では を使用して
- /// 一時的にビルド対象に含めている前提で でロードしています。
- ///
- /// Packages/〜.unityまでのパスで指定
- ///
- public static IEnumerator LoadSceneAsync(string path)
- {
- AsyncOperation loadSceneAsync = null;
-#if UNITY_EDITOR
- // Use EditorSceneManager at run on Unity-editor
- loadSceneAsync = UnityEditor.SceneManagement.EditorSceneManager.LoadSceneAsyncInPlayMode(
- path,
- new LoadSceneParameters(LoadSceneMode.Single));
-#else
- // Use ITestPlayerBuildModifier to change the "Scenes in Build" list before run on player
- // see: Editor/BuildAllScenesForTestPlayer.cs
- loadSceneAsync = SceneManager.LoadSceneAsync(path);
-#endif
- yield return loadSceneAsync;
- }
- }
-}
diff --git a/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs.meta b/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs.meta
deleted file mode 100644
index edca484..0000000
--- a/Packages/com.nowsprinting.embedded-package-sample/Tests/Runtime/Utils/TestSceneLoader.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: bc4f3762b438406bbcd3ee6f6d41f32e
-timeCreated: 1624820745
\ No newline at end of file
diff --git a/Packages/manifest.json b/Packages/manifest.json
index 6f8ac7f..b752cf8 100644
--- a/Packages/manifest.json
+++ b/Packages/manifest.json
@@ -1,23 +1,24 @@
{
"dependencies": {
"com.cysharp.unitask": "2.5.0",
- "com.nowsprinting.create-script-folders-with-tests": "1.2.1",
+ "com.nowsprinting.create-script-folders-with-tests": "1.2.3",
"com.nowsprinting.local-package-sample": "file:../LocalPackages/com.nowsprinting.local-package-sample",
- "com.nowsprinting.test-helper": "0.3.0",
- "com.nowsprinting.test-helper.input": "1.0.0",
- "com.nowsprinting.test-helper.monkey": "0.5.1",
- "com.nowsprinting.test-helper.random": "0.2.0",
- "com.unity.collab-proxy": "1.14.18",
+ "com.nowsprinting.test-helper": "1.2.3",
+ "com.nowsprinting.test-helper.input": "1.0.1",
+ "com.nowsprinting.test-helper.random": "1.0.0",
+ "com.nowsprinting.test-helper.ui": "1.0.1",
+ "com.unity.ai.navigation": "2.0.6",
+ "com.unity.collab-proxy": "2.7.1",
"com.unity.ide.rider": "3.0.34",
"com.unity.ide.visualstudio": "2.0.22",
- "com.unity.inputsystem": "1.7.0",
+ "com.unity.inputsystem": "1.13.1",
+ "com.unity.multiplayer.center": "1.0.0",
"com.unity.test-framework": "1.4.6",
- "com.unity.testframework.graphics": "7.17.0-exp.1",
- "com.unity.testtools.codecoverage": "1.2.4",
- "com.unity.textmeshpro": "2.1.6",
- "com.unity.timeline": "1.2.18",
- "com.unity.ugui": "1.0.0",
+ "com.unity.testtools.codecoverage": "1.2.6",
+ "com.unity.timeline": "1.8.7",
+ "com.unity.ugui": "2.0.0",
"net.tnrd.nsubstitute": "4.2.2",
+ "com.unity.modules.accessibility": "1.0.0",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",
diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json
index 7423698..e76d9c8 100644
--- a/Packages/packages-lock.json
+++ b/Packages/packages-lock.json
@@ -8,7 +8,7 @@
"url": "https://package.openupm.com"
},
"com.nowsprinting.create-script-folders-with-tests": {
- "version": "1.2.1",
+ "version": "1.2.3",
"depth": 0,
"source": "registry",
"dependencies": {},
@@ -27,8 +27,8 @@
"dependencies": {}
},
"com.nowsprinting.test-helper": {
- "version": "0.4.2",
- "depth": 1,
+ "version": "1.2.3",
+ "depth": 0,
"source": "registry",
"dependencies": {
"com.unity.test-framework": "1.3.4"
@@ -36,68 +36,54 @@
"url": "https://package.openupm.com"
},
"com.nowsprinting.test-helper.input": {
+ "version": "1.0.1",
+ "depth": 0,
+ "source": "registry",
+ "dependencies": {},
+ "url": "https://package.openupm.com"
+ },
+ "com.nowsprinting.test-helper.random": {
"version": "1.0.0",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://package.openupm.com"
},
- "com.nowsprinting.test-helper.monkey": {
- "version": "0.5.1",
+ "com.nowsprinting.test-helper.ui": {
+ "version": "1.0.1",
"depth": 0,
"source": "registry",
"dependencies": {
"com.cysharp.unitask": "2.3.3",
- "com.nowsprinting.test-helper": "0.4.2",
- "com.nowsprinting.test-helper.random": "0.2.0",
+ "com.nowsprinting.test-helper": "1.1.1",
+ "com.nowsprinting.test-helper.random": "1.0.0",
"com.unity.ugui": "1.0.0"
},
"url": "https://package.openupm.com"
},
- "com.nowsprinting.test-helper.random": {
- "version": "0.2.0",
+ "com.unity.ai.navigation": {
+ "version": "2.0.6",
"depth": 0,
"source": "registry",
- "dependencies": {},
- "url": "https://package.openupm.com"
- },
- "com.unity.addressables": {
- "version": "1.17.15",
- "depth": 1,
- "source": "registry",
"dependencies": {
- "com.unity.modules.assetbundle": "1.0.0",
- "com.unity.modules.jsonserialize": "1.0.0",
- "com.unity.modules.imageconversion": "1.0.0",
- "com.unity.modules.unitywebrequest": "1.0.0",
- "com.unity.scriptablebuildpipeline": "1.17.0",
- "com.unity.modules.unitywebrequestassetbundle": "1.0.0"
+ "com.unity.modules.ai": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.collab-proxy": {
- "version": "1.14.18",
+ "version": "2.7.1",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.ext.nunit": {
- "version": "2.0.3",
+ "version": "2.0.5",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
- "com.unity.external.test-protocol": {
- "version": "1.0.0-preview",
- "depth": 1,
- "source": "registry",
- "dependencies": {
- "com.unity.nuget.newtonsoft-json": "2.0.0-preview"
- },
- "url": "https://packages.unity.com"
- },
"com.unity.ide.rider": {
"version": "3.0.34",
"depth": 0,
@@ -117,7 +103,7 @@
"url": "https://packages.unity.com"
},
"com.unity.inputsystem": {
- "version": "1.7.0",
+ "version": "1.13.1",
"depth": 0,
"source": "registry",
"dependencies": {
@@ -125,34 +111,21 @@
},
"url": "https://packages.unity.com"
},
- "com.unity.nuget.newtonsoft-json": {
- "version": "2.0.0",
- "depth": 1,
- "source": "registry",
- "dependencies": {},
- "url": "https://packages.unity.com"
- },
- "com.unity.scriptablebuildpipeline": {
- "version": "1.17.0",
- "depth": 2,
- "source": "registry",
- "dependencies": {},
- "url": "https://packages.unity.com"
+ "com.unity.multiplayer.center": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {
+ "com.unity.modules.uielements": "1.0.0"
+ }
},
"com.unity.settings-manager": {
- "version": "1.0.1",
+ "version": "2.0.1",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
- "com.unity.subsystemregistration": {
- "version": "1.0.6",
- "depth": 2,
- "source": "registry",
- "dependencies": {},
- "url": "https://packages.unity.com"
- },
"com.unity.test-framework": {
"version": "1.4.6",
"depth": 0,
@@ -164,25 +137,8 @@
},
"url": "https://packages.unity.com"
},
- "com.unity.testframework.graphics": {
- "version": "7.17.0-exp.1",
- "depth": 0,
- "source": "registry",
- "dependencies": {
- "com.unity.modules.vr": "1.0.0",
- "com.unity.modules.xr": "1.0.0",
- "com.unity.addressables": "1.17.15",
- "com.unity.xr.management": "4.0.5",
- "com.unity.nuget.newtonsoft-json": "2.0.0",
- "com.unity.xr.legacyinputhelpers": "2.1.8",
- "com.unity.external.test-protocol": "1.0.0-preview",
- "com.unity.testtools.codecoverage": "1.2.0",
- "com.unity.modules.imageconversion": "1.0.0"
- },
- "url": "https://packages.unity.com"
- },
"com.unity.testtools.codecoverage": {
- "version": "1.2.4",
+ "version": "1.2.6",
"depth": 0,
"source": "registry",
"dependencies": {
@@ -191,17 +147,8 @@
},
"url": "https://packages.unity.com"
},
- "com.unity.textmeshpro": {
- "version": "2.1.6",
- "depth": 0,
- "source": "registry",
- "dependencies": {
- "com.unity.ugui": "1.0.0"
- },
- "url": "https://packages.unity.com"
- },
"com.unity.timeline": {
- "version": "1.2.18",
+ "version": "1.8.7",
"depth": 0,
"source": "registry",
"dependencies": {
@@ -213,7 +160,7 @@
"url": "https://packages.unity.com"
},
"com.unity.ugui": {
- "version": "1.0.0",
+ "version": "2.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
@@ -221,29 +168,6 @@
"com.unity.modules.imgui": "1.0.0"
}
},
- "com.unity.xr.legacyinputhelpers": {
- "version": "2.1.9",
- "depth": 1,
- "source": "registry",
- "dependencies": {
- "com.unity.modules.vr": "1.0.0",
- "com.unity.modules.xr": "1.0.0"
- },
- "url": "https://packages.unity.com"
- },
- "com.unity.xr.management": {
- "version": "4.0.5",
- "depth": 1,
- "source": "registry",
- "dependencies": {
- "com.unity.modules.vr": "1.0.0",
- "com.unity.modules.xr": "1.0.0",
- "com.unity.modules.subsystems": "1.0.0",
- "com.unity.subsystemregistration": "1.0.6",
- "com.unity.xr.legacyinputhelpers": "2.1.7"
- },
- "url": "https://packages.unity.com"
- },
"net.tnrd.nsubstitute": {
"version": "4.2.2",
"depth": 0,
@@ -251,6 +175,12 @@
"dependencies": {},
"url": "https://package.openupm.com"
},
+ "com.unity.modules.accessibility": {
+ "version": "1.0.0",
+ "depth": 0,
+ "source": "builtin",
+ "dependencies": {}
+ },
"com.unity.modules.ai": {
"version": "1.0.0",
"depth": 0,
@@ -298,6 +228,12 @@
"com.unity.modules.animation": "1.0.0"
}
},
+ "com.unity.modules.hierarchycore": {
+ "version": "1.0.0",
+ "depth": 1,
+ "source": "builtin",
+ "dependencies": {}
+ },
"com.unity.modules.imageconversion": {
"version": "1.0.0",
"depth": 0,
@@ -384,8 +320,10 @@
"depth": 0,
"source": "builtin",
"dependencies": {
+ "com.unity.modules.ui": "1.0.0",
"com.unity.modules.imgui": "1.0.0",
- "com.unity.modules.jsonserialize": "1.0.0"
+ "com.unity.modules.jsonserialize": "1.0.0",
+ "com.unity.modules.hierarchycore": "1.0.0"
}
},
"com.unity.modules.umbra": {
diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset
index 6c643e9..06220e9 100644
--- a/ProjectSettings/EditorBuildSettings.asset
+++ b/ProjectSettings/EditorBuildSettings.asset
@@ -5,9 +5,6 @@ EditorBuildSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Scenes:
- - enabled: 1
- path: Assets/BasicExample/Scenes/HelloTesting.unity
- guid: 6c40ba2f8a021430aa36a5cd247cda1e
- enabled: 1
path: Assets/UGUIExample/Scenes/Login.unity
guid: e961a5fcab8254ba686099f605955a02
@@ -27,3 +24,4 @@ EditorBuildSettings:
path: Assets/InputSystemExample/Scenes/InputSystemExample.unity
guid: 780082c79f65c4193aeff19ec9b21382
m_configObjects: {}
+ m_UseUCBPForAssetBundles: 0
diff --git a/ProjectSettings/MemorySettings.asset b/ProjectSettings/MemorySettings.asset
new file mode 100644
index 0000000..5b5face
--- /dev/null
+++ b/ProjectSettings/MemorySettings.asset
@@ -0,0 +1,35 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!387306366 &1
+MemorySettings:
+ m_ObjectHideFlags: 0
+ m_EditorMemorySettings:
+ m_MainAllocatorBlockSize: -1
+ m_ThreadAllocatorBlockSize: -1
+ m_MainGfxBlockSize: -1
+ m_ThreadGfxBlockSize: -1
+ m_CacheBlockSize: -1
+ m_TypetreeBlockSize: -1
+ m_ProfilerBlockSize: -1
+ m_ProfilerEditorBlockSize: -1
+ m_BucketAllocatorGranularity: -1
+ m_BucketAllocatorBucketsCount: -1
+ m_BucketAllocatorBlockSize: -1
+ m_BucketAllocatorBlockCount: -1
+ m_ProfilerBucketAllocatorGranularity: -1
+ m_ProfilerBucketAllocatorBucketsCount: -1
+ m_ProfilerBucketAllocatorBlockSize: -1
+ m_ProfilerBucketAllocatorBlockCount: -1
+ m_TempAllocatorSizeMain: -1
+ m_JobTempAllocatorBlockSize: -1
+ m_BackgroundJobTempAllocatorBlockSize: -1
+ m_JobTempAllocatorReducedBlockSize: -1
+ m_TempAllocatorSizeGIBakingWorker: -1
+ m_TempAllocatorSizeNavMeshWorker: -1
+ m_TempAllocatorSizeAudioWorker: -1
+ m_TempAllocatorSizeCloudWorker: -1
+ m_TempAllocatorSizeGfx: -1
+ m_TempAllocatorSizeJobWorker: -1
+ m_TempAllocatorSizeBackgroundWorker: -1
+ m_TempAllocatorSizePreloadManager: -1
+ m_PlatformMemorySettings: {}
diff --git a/ProjectSettings/MultiplayerManager.asset b/ProjectSettings/MultiplayerManager.asset
new file mode 100644
index 0000000..2a93664
--- /dev/null
+++ b/ProjectSettings/MultiplayerManager.asset
@@ -0,0 +1,7 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!655991488 &1
+MultiplayerManager:
+ m_ObjectHideFlags: 0
+ m_EnableMultiplayerRoles: 0
+ m_StrippingTypes: {}
diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset
index abe1834..9688fdf 100644
--- a/ProjectSettings/PackageManagerSettings.asset
+++ b/ProjectSettings/PackageManagerSettings.asset
@@ -12,15 +12,22 @@ MonoBehaviour:
m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
+ m_EnablePreReleasePackages: 0
+ m_AdvancedSettingsExpanded: 1
m_ScopedRegistriesSettingsExpanded: 1
+ m_SeeAllPackageVersions: 0
+ m_DismissPreviewPackagesInUse: 0
oneTimeWarningShown: 0
+ oneTimeDeprecatedPopUpShown: 0
m_Registries:
- m_Id: main
m_Name:
m_Url: https://packages.unity.com
m_Scopes: []
m_IsDefault: 1
- - m_Id: scoped:package.openupm.com
+ m_Capabilities: 7
+ m_ConfigSource: 0
+ - m_Id: scoped:project:package.openupm.com
m_Name: package.openupm.com
m_Url: https://package.openupm.com
m_Scopes:
@@ -29,26 +36,13 @@ MonoBehaviour:
- com.openupm
- net.tnrd.nsubstitute
m_IsDefault: 0
- m_UserSelectedRegistryName:
+ m_Capabilities: 0
+ m_ConfigSource: 4
+ m_UserSelectedRegistryName: package.openupm.com
m_UserAddingNewScopedRegistry: 0
m_RegistryInfoDraft:
- m_ErrorMessage:
- m_Original:
- m_Id: scoped:package.openupm.com
- m_Name: package.openupm.com
- m_Url: https://package.openupm.com
- m_Scopes:
- - com.cysharp
- - com.nowsprinting
- - com.openupm
- - net.tnrd.nsubstitute
- m_IsDefault: 0
m_Modified: 0
- m_Name: package.openupm.com
- m_Url: https://package.openupm.com
- m_Scopes:
- - com.cysharp
- - com.nowsprinting
- - com.openupm
- - net.tnrd.nsubstitute
- m_SelectedScopeIndex: 0
+ m_ErrorMessage:
+ m_UserModificationsInstanceId: -870
+ m_OriginalInstanceId: -874
+ m_LoadAssets: 0
diff --git a/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json b/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json
index ad11087..3c7b4c1 100644
--- a/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json
+++ b/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json
@@ -1,6 +1,4 @@
{
- "m_Name": "Settings",
- "m_Path": "ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json",
"m_Dictionary": {
"m_DictionaryValues": []
}
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
index 549aad2..798cd3e 100644
--- a/ProjectSettings/ProjectSettings.asset
+++ b/ProjectSettings/ProjectSettings.asset
@@ -275,7 +275,196 @@ PlayerSettings:
AndroidValidateAppBundleSize: 1
AndroidAppBundleSizeToValidate: 150
m_BuildTargetIcons: []
- m_BuildTargetPlatformIcons: []
+ m_BuildTargetPlatformIcons:
+ - m_BuildTarget: iPhone
+ m_Icons:
+ - m_Textures: []
+ m_Width: 180
+ m_Height: 180
+ m_Kind: 0
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 120
+ m_Height: 120
+ m_Kind: 0
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 167
+ m_Height: 167
+ m_Kind: 0
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 152
+ m_Height: 152
+ m_Kind: 0
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 76
+ m_Height: 76
+ m_Kind: 0
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 120
+ m_Height: 120
+ m_Kind: 3
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 80
+ m_Height: 80
+ m_Kind: 3
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 80
+ m_Height: 80
+ m_Kind: 3
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 40
+ m_Height: 40
+ m_Kind: 3
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 87
+ m_Height: 87
+ m_Kind: 1
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 58
+ m_Height: 58
+ m_Kind: 1
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 29
+ m_Height: 29
+ m_Kind: 1
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 58
+ m_Height: 58
+ m_Kind: 1
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 29
+ m_Height: 29
+ m_Kind: 1
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 60
+ m_Height: 60
+ m_Kind: 2
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 40
+ m_Height: 40
+ m_Kind: 2
+ m_SubKind: iPhone
+ - m_Textures: []
+ m_Width: 40
+ m_Height: 40
+ m_Kind: 2
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 20
+ m_Height: 20
+ m_Kind: 2
+ m_SubKind: iPad
+ - m_Textures: []
+ m_Width: 1024
+ m_Height: 1024
+ m_Kind: 4
+ m_SubKind: App Store
+ - m_BuildTarget: Android
+ m_Icons:
+ - m_Textures: []
+ m_Width: 432
+ m_Height: 432
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 324
+ m_Height: 324
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 216
+ m_Height: 216
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 162
+ m_Height: 162
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 108
+ m_Height: 108
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 81
+ m_Height: 81
+ m_Kind: 2
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 192
+ m_Height: 192
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 144
+ m_Height: 144
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 96
+ m_Height: 96
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 72
+ m_Height: 72
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 48
+ m_Height: 48
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 36
+ m_Height: 36
+ m_Kind: 1
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 192
+ m_Height: 192
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 144
+ m_Height: 144
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 96
+ m_Height: 96
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 72
+ m_Height: 72
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 48
+ m_Height: 48
+ m_Kind: 0
+ m_SubKind:
+ - m_Textures: []
+ m_Width: 36
+ m_Height: 36
+ m_Kind: 0
+ m_SubKind:
m_BuildTargetBatching:
- m_BuildTarget: Standalone
m_StaticBatching: 1
diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt
index 4c19129..355f111 100644
--- a/ProjectSettings/ProjectVersion.txt
+++ b/ProjectSettings/ProjectVersion.txt
@@ -1,2 +1,2 @@
-m_EditorVersion: 2019.4.40f1
-m_EditorVersionWithRevision: 2019.4.40f1 (ffc62b691db5)
+m_EditorVersion: 6000.0.43f1
+m_EditorVersionWithRevision: 6000.0.43f1 (97272b72f107)
diff --git a/README.md b/README.md
index c8de54a..badcaae 100644
--- a/README.md
+++ b/README.md
@@ -75,8 +75,8 @@ Assets
│ └── (snip)
└── Tests
├── Editor
- │ └── AssetValidators
- │ ├── LevelValidator.cs
+ │ └── AssetValidators // 「8.4 ValueSource」「10.1 Edit ModeテストでのSceneの使用」
+ │ ├── LevelValidator.cs
│ └── RaceValidator.cs
└── Runtime
└── Entities
@@ -110,18 +110,18 @@ Assets
第11章 UPM パッケージのテスト
-#### 埋め込みパッケージ
+#### ローカルパッケージ
```
-Packages
-└── com.nowsprinting.embedded-package-sample
+LocalPackages
+└── com.nowsprinting.local-package-sample
```
-#### ローカルパッケージ
+#### 埋め込みパッケージ
```
-LocalPackages
-└── com.nowsprinting.local-package-sample
+Packages
+└── com.nowsprinting.embedded-package-sample
```
### UGUIExample
@@ -160,6 +160,10 @@ Assets
└── VisualRegressionExample
```
+> [!TIP]
+> このテストを実行するには
+> [Graphics Test Framework](https://docs.unity3d.com/Packages/com.unity.testframework.graphics@latest)
+> パッケージをインストールする必要があります。
## 備考