2025-04-22 17:16:40 +08:00

140 lines
4.8 KiB
C#

using NUnit.Framework;
using Unity.HLODSystem.Streaming;
using Unity.HLODSystem.Utils;
using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.TestTools;
namespace Unity.HLODSystem.RuntimeTests
{
[TestFixture]
public class HLODMeshSetterTest : IPrebuildSetup
{
public void Setup()
{
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/TestAssets/Prefabs/MeshSettingMiniTest.prefab");
var prefab2 = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/TestAssets/Prefabs/MeshSettingMiniTest2.prefab");
var prefab3 = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/TestAssets/Prefabs/MeshSettingMiniTest3.prefab");
var prefab4 = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/TestAssets/Prefabs/MeshSettingMiniTest4.prefab");
var instance = GameObject.Instantiate(prefab);
var instance2 = GameObject.Instantiate(prefab2);
var instance3 = GameObject.Instantiate(prefab3);
var instance4 = GameObject.Instantiate(prefab4);
var hlodInstance = GameObject.Instantiate(prefab);
var hlod = hlodInstance.GetComponent<HLOD>();
var coroutine = CoroutineRunner.RunCoroutine(HLODCreator.Create(hlod));
while (coroutine.MoveNext())
{
//Wait until coroutine is finished
}
}
private Camera m_camera;
private DefaultHLODController m_controller;
[OneTimeSetUp]
public void OneTimeSetUp()
{
GameObject cameraGameObject = new GameObject("Camera");
m_camera = cameraGameObject.AddComponent<Camera>();
cameraGameObject.AddComponent<HLODCameraRecognizer>();
var scene = SceneManager.GetSceneAt(0);
var root = scene.GetRootGameObjects();
var hlodGameobject = root[5];
m_controller = hlodGameobject.GetComponent<DefaultHLODController>();
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
var scene = SceneManager.GetSceneAt(0);
var root = scene.GetRootGameObjects();
var instance = root[5];
AssetDatabase.DeleteAsset("Assets/" + instance.name + ".hlod");
}
[Test]
public void MeshRendererExistsTest()
{
var scene = SceneManager.GetSceneAt(0);
var root = scene.GetRootGameObjects();
var instance = root[1];
var instance2 = root[2];
var instance3 = root[3];
var instance4 = root[4];
var renderers = instance.GetComponentsInChildren<MeshRenderer>();
var renderer2 = instance2.GetComponentsInChildren<MeshRenderer>();
var renderer3 = instance3.GetComponentsInChildren<MeshRenderer>();
var renderer4 = instance4.GetComponentsInChildren<MeshRenderer>();
Assert.AreEqual(20, renderers.Length);
Assert.AreEqual(4, renderer2.Length);
Assert.AreEqual(16, renderer3.Length);
Assert.AreEqual(0, renderer4.Length);
}
[Test]
public void MeshSetterTest()
{
m_camera.transform.position = new Vector3(0.0f, 0.0f, -30.0f);
MeshSetterTestHelper(-30.0f, true, true, false, false, false);
MeshSetterTestHelper(-40.0f, true, false, false, false, true);
MeshSetterTestHelper(-45.0f, false, false, false, true, true);
MeshSetterTestHelper(-60.0f, false, false, true, false, false);
}
private void MeshSetterTestHelper(float zpos, bool root1, bool root2, bool hlod1, bool hlod2, bool hlod3)
{
m_camera.transform.position = new Vector3(0.0f, 0.0f, zpos);
//update hlod trees
for (int i = 0; i < 3; ++i)
{
HLODManager.Instance.OnPreCull(m_camera);
}
m_controller.GetHighObject(0, 0, 0.0f, o =>
{
Assert.AreEqual(root1, o.LoadedObject.activeInHierarchy);
});
m_controller.GetHighObject(1, 0, 0.0f, o =>
{
Assert.AreEqual(root2, o.LoadedObject.activeInHierarchy);
});
m_controller.GetLowObject(0, 0, 0.0f, o =>
{
Assert.AreEqual(hlod1, o.LoadedObject.activeInHierarchy);
});
m_controller.GetLowObject(1, 0, 0.0f, o =>
{
Assert.AreEqual(hlod2, o.LoadedObject.activeInHierarchy);
});
m_controller.GetLowObject(2, 0, 0.0f, o =>
{
Assert.AreEqual(hlod3, o.LoadedObject.activeInHierarchy);
});
}
}
}