• [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;
            }
        }
    }
    
  • 相关阅读:
    (16)JavaScript的流程控制(js的循环)
    (15)javaScript入门
    (14)定位布局(子级在父级中自由定位 父级在页面中自由定位)
    (0-1)CSS 标签语法的属性
    ACM/ICPC 之 双向链表_构造列表-模拟祖玛 (TSH OJ-Zuma(祖玛))
    手记-数学分析(高等数学)中有关算法效率的公式列举(O,Θ,Ω)
    2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)
    整数划分问题-解法汇总(暂有DP-递归)
    2014北大研究生推免机试(校内)-垃圾炸弹(基础枚举)
    ACM/ICPC 之 BFS-广搜进阶-八数码(经典)(POJ1077+HDU1043)
  • 原文地址:https://www.cnblogs.com/ZhuSenlin/p/12398419.html
Copyright © 2020-2023  润新知