DCS/ruiyiweiUX/Assets/Scripts/Testing/QuickCanvasTest.cs

146 lines
4.8 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 快速Canvas层级测试工具
/// 可以直接添加到场景中进行快速测试
/// </summary>
public class QuickCanvasTest : MonoBehaviour
{
[Header("快速测试")]
[SerializeField] private Button testButton;
[SerializeField] private Text statusText;
private int testCanvasCount = 0;
private MainPanel mainPanel;
void Start()
{
mainPanel = FindObjectOfType<MainPanel>();
if (testButton == null)
{
CreateTestButton();
}
if (testButton != null)
{
testButton.onClick.AddListener(QuickTest);
}
UpdateStatus();
}
void CreateTestButton()
{
// 创建测试按钮
GameObject buttonObj = new GameObject("QuickTestButton");
buttonObj.transform.SetParent(transform, false);
testButton = buttonObj.AddComponent<Button>();
Image buttonImg = buttonObj.AddComponent<Image>();
buttonImg.color = Color.cyan;
RectTransform buttonRect = buttonObj.GetComponent<RectTransform>();
buttonRect.sizeDelta = new Vector2(200, 50);
buttonRect.anchoredPosition = new Vector2(0, 100);
// 添加按钮文字
GameObject textObj = new GameObject("Text");
textObj.transform.SetParent(buttonObj.transform, false);
Text buttonText = textObj.AddComponent<Text>();
buttonText.text = "快速测试覆盖";
buttonText.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
buttonText.fontSize = 16;
buttonText.color = Color.black;
buttonText.alignment = TextAnchor.MiddleCenter;
RectTransform textRect = textObj.GetComponent<RectTransform>();
textRect.anchorMin = Vector2.zero;
textRect.anchorMax = Vector2.one;
textRect.offsetMin = Vector2.zero;
textRect.offsetMax = Vector2.zero;
}
public void QuickTest()
{
testCanvasCount++;
// 创建一个简单的覆盖Canvas
GameObject overlayObj = new GameObject($"QuickTest_{testCanvasCount}");
Canvas overlay = overlayObj.AddComponent<Canvas>();
overlay.renderMode = RenderMode.ScreenSpaceOverlay;
overlay.sortingOrder = 10; // 确保覆盖MainPanel
overlayObj.AddComponent<GraphicRaycaster>();
// 添加半透明背景
GameObject bg = new GameObject("Background");
bg.transform.SetParent(overlayObj.transform, false);
Image bgImg = bg.AddComponent<Image>();
bgImg.color = new Color(1f, 0f, 0f, 0.3f); // 半透明红色
RectTransform bgRect = bg.GetComponent<RectTransform>();
bgRect.anchorMin = Vector2.zero;
bgRect.anchorMax = Vector2.one;
bgRect.offsetMin = Vector2.zero;
bgRect.offsetMax = Vector2.zero;
// 添加提示文字
GameObject label = new GameObject("Label");
label.transform.SetParent(overlayObj.transform, false);
Text labelText = label.AddComponent<Text>();
labelText.text = $"测试覆盖层 {testCanvasCount}\n点击关闭";
labelText.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
labelText.fontSize = 32;
labelText.color = Color.white;
labelText.alignment = TextAnchor.MiddleCenter;
RectTransform labelRect = label.GetComponent<RectTransform>();
labelRect.anchorMin = new Vector2(0.5f, 0.5f);
labelRect.anchorMax = new Vector2(0.5f, 0.5f);
labelRect.sizeDelta = new Vector2(400, 200);
// 添加点击关闭功能
Button closeBtn = bg.AddComponent<Button>();
closeBtn.onClick.AddListener(() => {
Debug.Log($"关闭快速测试Canvas: {overlayObj.name}");
Destroy(overlayObj);
UpdateStatus();
});
Debug.Log($"创建快速测试CanvasSortingOrder: {overlay.sortingOrder}");
UpdateStatus();
}
void UpdateStatus()
{
if (statusText != null)
{
string status = "Canvas测试状态:\n";
if (mainPanel != null && mainPanel.BodyAndOrgans != null)
{
bool visible = mainPanel.BodyAndOrgans.activeInHierarchy;
status += $"模型状态: {(visible ? "" : "")}\n";
}
Canvas[] allCanvas = FindObjectsOfType<Canvas>();
status += $"Canvas总数: {allCanvas.Length}";
statusText.text = status;
}
}
void Update()
{
// 每秒更新状态
if (Time.frameCount % 60 == 0)
{
UpdateStatus();
}
}
}