首页 > 其他分享 >Unity 切换鼠标光标图标

Unity 切换鼠标光标图标

时间:2024-10-22 11:03:32浏览次数:8  
标签:状态 cursorHotspot Unity 按下 光标 cursorNormal 左键 图标

在 Unity 中,可以通过检测鼠标左键的按下和弹起事件来切换鼠标光标。这可以通过在 Update 方法中检查 Input.GetMouseButtonDown(0)Input.GetMouseButtonUp(0) 来实现。

以下是一个示例代码,展示如何在左键按下时切换到一个自定义光标,在左键弹起时恢复到另一个光标或默认光标:

示例代码

csharpCopy Code
using UnityEngine;

public class CursorSwitch : MonoBehaviour
{
    public Texture2D cursorNormal; // 正常状态光标
    public Texture2D cursorPressed; // 按下状态光标
    private Vector2 cursorHotspot;

    void Start()
    {
        // 设置光标的热点为光标图像的中心
        cursorHotspot = new Vector2(cursorNormal.width / 2, cursorNormal.height / 2);
        
        // 设置初始光标为正常光标
        Cursor.SetCursor(cursorNormal, cursorHotspot, CursorMode.Auto);
    }

    void Update()
    {
        // 检测左键按下
        if (Input.GetMouseButtonDown(0))
        {
            // 设置为按下状态光标
            Cursor.SetCursor(cursorPressed, cursorHotspot, CursorMode.Auto);
        }
        
        // 检测左键弹起
        if (Input.GetMouseButtonUp(0))
        {
            // 恢复为正常状态光标
            Cursor.SetCursor(cursorNormal, cursorHotspot, CursorMode.Auto);
        }
        transform.poition=Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }

    void OnDisable()
    {
        // 在对象禁用时恢复默认光标
        Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
    }
}

代码解析

  1. 变量定义:

    • cursorNormal: 正常状态的光标图像。
    • cursorPressed: 按下状态的光标图像。
    • cursorHotspot: 光标的热点位置。
  2. Start 方法:

    • 在游戏开始时,初始化光标为正常状态光标。
  3. Update 方法:

    • 每帧检测左键是否按下。如果按下,则切换到按下状态的光标。
    • 检测左键是否弹起,如果弹起,则恢复为正常状态的光标。
  4. OnDisable 方法:

    • 在对象禁用或销毁时,恢复默认光标,确保不会保持自定义状态。

注意事项

  • 确保在 Unity 编辑器的 Inspector 中将 cursorNormal 和 cursorPressed 设置为有效的 Texture2D 图像。
  • 可以根据需求调整光标的尺寸和热点位置,以确保其在游戏中表现良好。

这样,你就可以根据鼠标的按键状态来动态切换光标了!

标签:状态,cursorHotspot,Unity,按下,光标,cursorNormal,左键,图标
From: https://www.cnblogs.com/guangzhiruijie/p/18492142

相关文章

  • Unity Physics.Raycast发射一条射线并检测它与场景中物体的碰撞
    在Unity中,Physics.Raycast是一种非常常用的物理检测方法,用于发射一条射线并检测它与场景中物体的碰撞。这种方法在许多游戏场景中非常重要,例如用于射击、检测地面、触发事件等。1.基本概念射线(Ray):在三维空间中,射线是一个从某一点出发并沿着某个方向延伸的无穷长线。碰撞......
  • Unity 平滑移动
    Vector3.SmoothDamp是Unity中一个非常实用的方法,用于在平滑的方式下将一个向量(如位置)平滑地移动到另一个向量。这对于实现流畅的相机跟随、物体移动等效果非常有用。以下是对Vector3.SmoothDamp的详细讲解。方法签名csharpCopyCodepublicstaticVector3SmoothDamp(......
  • Unity 私有变量在 Inspector 中调整其值
    在Unity中,SerializeField是一个非常有用的特性(Attribute),它主要用于将私有变量公开到Unity编辑器的Inspector界面中。下面是对SerializeField的详细解释及其用途。SerializeField 的用途公开私有变量:通常情况下,类的私有变量不会在Inspector中显示。如果你想保护......
  • 华为鸿蒙开发:掌握应用包名、图标、版本及权限配置
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在华为鸿蒙HarmonyOS的开发过程中,正确......
  • 【Unity】Job System
    JobSystem管理WorkThread,Job是JobSystem队列中元素,最小工作单元Job使用时,为了避免多线程的各种问题,采用复制数据而不是引用数据,使用普通变量记录结果(执行参数),结果会保持原来的值,所以需要使用NativeArray。NativeArray是托管公共内存的容器,将执行参数存储在NativeArray中......
  • 【Unity】协程
    协程在主线程执行,可以利用yield实现类似多线程/异步的操作StartCoroutineStartCoroutine("方法名");//无参数StartCoroutine(fun(a));//有参数StartCoroutine("方法名",argu);//有参数StopCoroutineyieldyieldreturnnull;//暂停等待下一帧继续执行yieldreturn0;//同......
  • 内置免费图标!SymbolGlyphs|鸿蒙动效开发笔记 04|Extras
    这篇笔记将介绍HarmonyOSNEXT应用开发里非常好用的官方内置图标库和原生图标组件。妙用这套组合拳可以解决几乎一切UI设计资源上的问题,并且将开发的App与原生鸿蒙风格完美契合!补充资料:官方图标库网站:HarmonyOSSymbol主题图标库(不全)https://developer.huawei.co......
  • Unity3D c# 使对象物体始终面向摄像机
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassLookAtMainCamera:MonoBehaviour{ //Usethisforinitialization voidStart(){ } //Updateiscalledonceperframe voidUpdate(){......
  • unity .net8 suppot comming
    Helloeveryone,大家好,Withthesummerholidaysuponus,It’sbeenawhilesincemylastupdate,soIwantedtosharesomeprogressonour.NETModernizationeffort.暑假即将来临,自从我上次更新以来已经有一段时间了,所以我想分享我们的.NET现代化工作的一些进展。......
  • Unity AVPro 解决切换视频卡的问题
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingRenderHeads.Media.AVProVideo.Demos.UI;usingRenderHeads.Media.AVProVideo;usingstaticUnityEditor.Experimental.GraphView.GraphView;usingSystem.Numerics;usingSystem;......