72 lines
1.8 KiB
C#
72 lines
1.8 KiB
C#
using System.Collections.Generic;
|
|
using AibisDream.Framework;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class CursorManager : MonoBehaviour
|
|
{
|
|
[Header("指针图片")] public Sprite defaultCursor;
|
|
public Sprite nextTalk, talking, interactive, holding, disable, eye;
|
|
|
|
private Image _cursor;
|
|
private RectTransform _cursorCanvas;
|
|
|
|
// 卸载时注销事件
|
|
private List<IUnRegister> _eventUnRegisters = new();
|
|
|
|
public void Awake()
|
|
{
|
|
InitRefs();
|
|
InitCursor();
|
|
}
|
|
|
|
private void InitCursor()
|
|
{
|
|
SwitchCursorImage(defaultCursor);
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
RegisterEvent();
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
// 注销所有事件
|
|
foreach (var eventUnRegister in _eventUnRegisters)
|
|
{
|
|
eventUnRegister.UnRegister();
|
|
}
|
|
|
|
_eventUnRegisters.Clear();
|
|
}
|
|
|
|
private void InitRefs()
|
|
{
|
|
_cursor = transform.Find("Cursor").GetComponent<Image>();
|
|
_cursorCanvas = GetComponent<RectTransform>();
|
|
}
|
|
|
|
private void RegisterEvent()
|
|
{
|
|
// 此处监听所有可能对鼠标状态产生影响的事件
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
var mousePos = Input.mousePosition;
|
|
// 获取鼠标指针在UI Camera上的位置
|
|
RectTransformUtility.ScreenPointToLocalPointInRectangle(_cursorCanvas, mousePos,
|
|
CameraKit.Instance.uiCamera, out var worldPos);
|
|
|
|
_cursor.transform.localPosition = worldPos;
|
|
}
|
|
|
|
private void SwitchCursorImage(Sprite sprite)
|
|
{
|
|
_cursor.sprite = sprite;
|
|
}
|
|
}
|
|
} |