[Unity] Unity Cursor 设置和API解析

一直以来使用Unity没有系统的使用 Unity Cursor 样式等的修改,其实也就几个变量和函数。现在做项目正好总结

CursorLockMode 枚举,赋值变量:Cursor.lockState

  • CursorLockMode.None:无限制状态(相对与后面两个枚举量)
  • CursorLockMode.Locked :锁定后,光标将放置在视图的中心,并且无法移动。不管Cursor.visible的值如何,在此状态下,光标都是不可见的。按ESC键时,光标会暂时切换到None,当点击鼠标时,又自动回到Locked模式。
  • CursorLockMode.Confined :当被限制时,除了被限制在视图之外,光标的行为正常。(即窗口模式下,鼠标无法出现在窗口外)
if (m_cursorLockMode == CursorLockMode.Locked)         //Pointer处于Locked状态
    Cursor.lockState = m_cursorLockMode = CursorLockMode.Confined;

注意:上述代码亲测,发现当执行进入if将状态从Locked改为Confined时,Pointer虽然可见,但仍旧被锁在屏幕中心。移动鼠标Pointer也不会移动。因此,建议Pointer显隐用“Locked <---> None”两者转换。

CursorMode 枚举,用于作为SetCursor函数的参数

  • auto: 在支持的平台上使用硬件渲染来渲染鼠标光标。
  • ForceSoftware:强制使用软件游标。

Cursor.visible Bool

鼠标的可见性

Cursor.SetCursor( Texture2D,Vector2, CursorMode )

  • Texture2D:鼠标更改的贴图
  • Vector2:用贴图左上角坐标起始点。一般设为Vector2.zero
  • CursorMode:该cursorMode参数允许您在支持的平台上使用硬件光标,或强制对光标进行软件渲染

若要更改整个项目的默认鼠标样式可以在Edit->Project Setting->Player->Default Cursor中设置,将更改好的图片拖拽赋值即可

我项目中的代码示例:

  • 文件名:FPS_Cursor.cs
  • 有些变量已经在其他地方封装(例如:input)
/*
*  编写时间:2020.3.2
*  脚本内容:关于光标(Cursor)
*  修改记录:
*              
*/
public class FPS_Cursor : MonoBehaviour
{
    [Header("光标贴图")]
    public Texture2D m_cursorTex;

    [Header("光标状态")]
    public CursorLockMode m_cursorLockMode;

    [Header("设置光标贴图时使用")]
    public CursorMode m_cursorMode;

    //输入模块
    private FPS_Input input;

    private void Start()
    {
        //初始化变量
        input = GameObject
                .FindGameObjectWithTag(Tags.GameController)
                .GetComponent<FPS_Input>();

        Cursor.lockState = m_cursorLockMode;        //设置Point模式,默认锁定
        Cursor.SetCursor(m_cursorTex, Vector2.zero, m_cursorMode); //设置Point样式,
    }

    private void Update()
    {
        if(input.GetButtonDown(ConstString.ShowOrHideCursor))
        {
            if (m_cursorLockMode == CursorLockMode.Locked) //Point处于Locked状态
                Cursor.lockState = m_cursorLockMode = CursorLockMode.None;
            else if (m_cursorLockMode == CursorLockMode.None) //Point处于Confined状态
                Cursor.lockState = m_cursorLockMode = CursorLockMode.Locked;
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/ZhuSenlin/p/12398419.html