53 lines
1.9 KiB
C#
53 lines
1.9 KiB
C#
![]() |
using UnityEngine;
|
||
|
|
||
|
namespace Utils
|
||
|
{
|
||
|
public static class MousePosition
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 获取鼠标的屏幕位置(以像素为单位)。
|
||
|
/// </summary>
|
||
|
/// <returns>鼠标的屏幕位置 (Vector2)。</returns>
|
||
|
public static Vector2 GetScreenPosition()
|
||
|
{
|
||
|
return Input.mousePosition;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取鼠标的二维世界位置(基于主摄像机的屏幕到世界转换)。
|
||
|
/// </summary>
|
||
|
/// <param name="camera">用于计算的摄像机,默认为主摄像机。</param>
|
||
|
/// <returns>鼠标的二维世界位置 (Vector2)。</returns>
|
||
|
public static Vector2 GetWorldPosition(Camera camera = null)
|
||
|
{
|
||
|
// 如果未指定摄像机,则使用主摄像机
|
||
|
if (!camera)
|
||
|
{
|
||
|
camera = Camera.main;
|
||
|
}
|
||
|
|
||
|
// 获取鼠标屏幕位置
|
||
|
var mouseScreenPosition = Input.mousePosition;
|
||
|
|
||
|
// 将屏幕坐标转换为世界坐标
|
||
|
var worldPosition = camera.ScreenToWorldPoint(mouseScreenPosition);
|
||
|
|
||
|
// 返回二维坐标 (忽略 z 轴)
|
||
|
return new Vector2(worldPosition.x, worldPosition.y);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取鼠标的二维世界位置并进行整数吸附(基于主摄像机的屏幕到世界转换)。
|
||
|
/// </summary>
|
||
|
/// <param name="camera">用于计算的摄像机,默认为主摄像机。</param>
|
||
|
/// <returns>吸附后的二维世界位置 (Vector2Int)。</returns>
|
||
|
public static Vector3Int GetSnappedWorldPosition(Camera camera = null)
|
||
|
{
|
||
|
// 获取世界位置
|
||
|
var worldPosition = GetWorldPosition(camera);
|
||
|
|
||
|
// 对世界位置进行整数吸附
|
||
|
return Vector3Int.RoundToInt(worldPosition);
|
||
|
}
|
||
|
}
|
||
|
}
|