Note inspector调整,Static Window可开关,Log可复制清空

This commit is contained in:
SoulliesOfficial
2025-02-24 15:20:54 -05:00
parent 935cbbb029
commit 1b4637ae95
39 changed files with 2556 additions and 121 deletions

View File

@@ -1,3 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
@@ -14,12 +15,13 @@ namespace Ichni.Editor
public bool isSceneCameraActive;
public SceneCamera sceneCamera;
public float sceneCameraMoveSpeed;
public float sceneCameraRotateSpeed;
public GameCamera gameCamera;
public bool haveGameCamera => gameCamera != null;
public BaseElement_BM matchedBM { get; set; }
public void SwitchCamera()
{
if (!haveGameCamera)

View File

@@ -2,47 +2,82 @@ using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.InputSystem;
using UnityEngine.UI;
namespace Ichni.Editor
{
public class InputListener : MonoBehaviour
public partial class InputListener : MonoBehaviour
{
private PointerEventData pointerEventData;
public EventSystem eventSystem;
public List<GraphicRaycaster> graphicRaycasters;
private void Update()
{
if (EditorManager.instance.cameraManager.isSceneCameraActive)
if (EditorManager.instance.cameraManager.isSceneCameraActive ||
!Keyboard.current.leftCtrlKey.isPressed) // 场景相机的移动和旋转
{
float cameraSpeed = EditorManager.instance.cameraManager.sceneCameraMoveSpeed * Time.deltaTime;
float cameraMoveSpeed = EditorManager.instance.cameraManager.sceneCameraMoveSpeed * Time.deltaTime;
Transform sceneCameraTransform = EditorManager.instance.cameraManager.sceneCamera.transform;
if (Keyboard.current.wKey.isPressed)
{
sceneCameraTransform.position += sceneCameraTransform.forward * cameraSpeed;
sceneCameraTransform.position += sceneCameraTransform.forward * cameraMoveSpeed;
}
if (Keyboard.current.sKey.isPressed)
{
sceneCameraTransform.position -= sceneCameraTransform.forward * cameraSpeed;
sceneCameraTransform.position -= sceneCameraTransform.forward * cameraMoveSpeed;
}
if (Keyboard.current.dKey.isPressed)
{
sceneCameraTransform.position += sceneCameraTransform.right * cameraSpeed;
sceneCameraTransform.position += sceneCameraTransform.right * cameraMoveSpeed;
}
if (Keyboard.current.aKey.isPressed)
{
sceneCameraTransform.position -= sceneCameraTransform.right * cameraSpeed;
sceneCameraTransform.position -= sceneCameraTransform.right * cameraMoveSpeed;
}
if (Keyboard.current.spaceKey.isPressed)
if (Keyboard.current.eKey.isPressed)
{
sceneCameraTransform.position += sceneCameraTransform.up * cameraSpeed;
sceneCameraTransform.position += sceneCameraTransform.up * cameraMoveSpeed;
}
if (Keyboard.current.leftShiftKey.isPressed)
if (Keyboard.current.qKey.isPressed)
{
sceneCameraTransform.position -= sceneCameraTransform.up * cameraSpeed;
sceneCameraTransform.position -= sceneCameraTransform.up * cameraMoveSpeed;
}
bool isPointerOverUI = IsPointerOverUI(out GameObject hoveredUI);
if (Mouse.current.rightButton.isPressed && !isPointerOverUI)
{
float cameraRotateSpeed = EditorManager.instance.cameraManager.sceneCameraRotateSpeed * Time.deltaTime;
Vector2 mouseDelta = Mouse.current.delta.ReadValue();
sceneCameraTransform.Rotate(Vector3.up, -mouseDelta.x * cameraRotateSpeed, Space.World);
sceneCameraTransform.Rotate(sceneCameraTransform.right, mouseDelta.y * cameraRotateSpeed, Space.World);
}
else if (isPointerOverUI)
{
}
}
if (eventSystem.currentSelectedGameObject == null &&
Keyboard.current.enterKey.wasPressedThisFrame) // 播放或暂停音乐
{
if (!EditorManager.instance.uiManager.timeline.musicPlayer.isPlaying)
{
EditorManager.instance.uiManager.timeline.musicPlayer.PlayMusic();
}
else
{
EditorManager.instance.uiManager.timeline.musicPlayer.PauseMusic();
}
}
if (Keyboard.current.leftCtrlKey.isPressed)
if (Keyboard.current.leftCtrlKey.isPressed) // 快捷键
{
// 保存和导出
if (Keyboard.current.sKey.wasPressedThisFrame)
{
EditorManager.instance.projectManager.saveManager.Save();
@@ -52,6 +87,7 @@ namespace Ichni.Editor
EditorManager.instance.projectManager.exportManager.Export();
}
// 复制粘贴删除
if (Keyboard.current.cKey.wasPressedThisFrame)
{
EditorManager.instance.operationManager.CopyPasteDeleteModule.CopyElement(EditorManager.instance.operationManager.currentSelectedElement);
@@ -60,7 +96,12 @@ namespace Ichni.Editor
{
EditorManager.instance.operationManager.CopyPasteDeleteModule.PasteElement(EditorManager.instance.operationManager.currentSelectedElement);
}
else if (Keyboard.current.dKey.wasPressedThisFrame)
{
EditorManager.instance.operationManager.currentSelectedElement.Delete();
}
// 开关移动设备分辨率提示
if (Keyboard.current.digit1Key.wasPressedThisFrame)
{
EditorManager.instance.uiManager.mainPage.resolutionHints.SetPhoneFrame();
@@ -76,4 +117,39 @@ namespace Ichni.Editor
}
}
}
public partial class InputListener
{
public bool IsPointerOverUI(out GameObject hoveredUI)
{
hoveredUI = null;
if (eventSystem == null || graphicRaycasters.Count == 0)
return false;
pointerEventData = new PointerEventData(eventSystem)
{
position = Mouse.current.position.ReadValue()
};
List<RaycastResult> allResults = new List<RaycastResult>();
// 遍历所有 Canvas 上的 GraphicRaycaster
foreach (var raycaster in graphicRaycasters)
{
List<RaycastResult> results = new List<RaycastResult>();
raycaster.Raycast(pointerEventData, results);
allResults.AddRange(results);
}
if (allResults.Count > 0)
{
// 按照 sortingOrder 获取最前面的 UI 物体
allResults.Sort((a, b) => b.sortingOrder.CompareTo(a.sortingOrder));
hoveredUI = allResults[0].gameObject;
return true;
}
return false;
}
}
}

View File

@@ -30,11 +30,12 @@ namespace Ichni
LoadThemeBundle("departure_to_multiverse");
}
public ThemeBundle GetThemeBundle(string themeBundleName)
public bool TryGetThemeBundle(string themeBundleName, out ThemeBundle themeBundle)
{
return loadedThemeBundleList.Find(bundle => bundle.themeBundleName == themeBundleName);
themeBundle = loadedThemeBundleList.Find(bundle => bundle.themeBundleName == themeBundleName);
return themeBundle != null;
}
public T GetObject<T>(string themeBundleName, string objectName) where T : class
{
return loadedThemeBundleList.Find(bundle => bundle.themeBundleName == themeBundleName)?.GetObject<T>(objectName);