[Unity][UGUI]鼠标点击更换鼠标图标播放鼠标跟随动画

tech2026-03-17  1

 

鼠标点击更换鼠标图标

            Cursor.SetCursor(cursor, Vector2.zero, cursorMode);  

鼠标点击后播放 鼠标点击的动画

1.先检测鼠标左键 点击,并获得鼠标位于屏幕的位置

2.设置鼠标点击动画的位置,并且播放动画

 

鼠标点击动画状态切换会出现问题。

尤其是以Animator的Trigger为触发媒介。

要调整 播放状态和Idle之间的退出时间。

 

 

鼠标点击播放动画

1.Idle动画状态机切换到Click动画状态机,

切换之间没有退出时间,HasExitTime为False

切换条件Condition为Trigger变量Click,

Cursor.SetCursor(cursor, hotSpot, cursorMode);

cursor_clickAnimator.SetTrigger("Click");

 

2.Click动画状态机切换为Idle动画状态机有退出时间

把退出时间向前调整,缩短退出时间。

 

这样把Idle和Click动画状态之间的切换进行设置,就可以把 动画 设置 触发Click没反应或者延迟的问题解决。

 

在鼠标左键抬起来的时候, cursor_clickAnimator.ResetTrigger("Click");

 

 

using UnityEngine; public class MouseControl : MonoBehaviour { [SerializeField] private Texture2D cursorTexture_Idle; [SerializeField] private Texture2D cursorTexture_Click; /// <summary> /// 鼠标点击播放动画 /// </summary> [SerializeField] private Animator cursor_clickAnimator; private CursorMode cursorMode = CursorMode.Auto; private Vector2 hotSpot = new Vector2(0,-5);//鼠标待命状态的图标,和鼠标点击后的图标 有位移偏差,需要把两个图片 放入 图片编辑里面进行查看。 //Vector2.zero; /// <summary> /// 鼠标点击 时长计时 /// </summary> private float timer = 0; #region 鼠标坐标 //Vector3 screenPosition;//将物体从世界坐标转换为屏幕坐标 Vector3 mousePositionOnScreen;//获取到点击屏幕的屏幕坐标 //Vector3 mousePositionInWorld;//将点击屏幕的屏幕坐标转换为世界坐标 #endregion//鼠标坐标 // Use this for initialization void Start () { setCursor(cursorTexture_Idle,0); } /// <summary> /// 设置当前鼠标图示 /// </summary> /// <param name="cursor">cursor的鼠标图片</param> public void setCursor(Texture2D cursor,int idle) { if (cursor != null&& idle == 0) { Cursor.SetCursor(cursor, Vector2.zero, cursorMode); }// else if (cursor != null && idle == 1) { Cursor.SetCursor(cursor, hotSpot, cursorMode); }// }// /// <summary> /// 鼠标点击播放动画 /// </summary> private void mouseClickAnimation() { if (cursor_clickAnimator != null) { cursor_clickAnimator.SetTrigger("Click"); }// }// /// <summary> /// 重置 鼠标点击图标 /// </summary> private void mouseClickAnimation_reset() { if (cursor_clickAnimator != null) { cursor_clickAnimator.ResetTrigger("Click"); }// }// /// <summary> /// 跟随鼠标点击 的位置 /// </summary> void MouseFollow() { //获取鼠标在相机中(世界中)的位置,转换为屏幕坐标; //screenPosition = Camera.main.WorldToScreenPoint(transform.position); //获取鼠标在场景中坐标 //mousePositionOnScreen = Input.mousePosition; if (cursor_clickAnimator) { mousePositionOnScreen = Input.mousePosition; cursor_clickAnimator.transform.position = mousePositionOnScreen; } else Debug.LogWarning(" 鼠标点击动画 为 NULL "); //让场景中的Z=鼠标坐标的Z //mousePositionOnScreen.z = screenPosition.z; //将相机中的坐标转化为世界坐标 //mousePositionInWorld = Camera.main.ScreenToWorldPoint(mousePositionOnScreen); //物体跟随鼠标移动 //transform.position = mousePositionInWorld; //物体跟随鼠标X轴移动 //transform.position = new Vector3(mousePositionInWorld.x, transform.position.y, transform.position.z); }// void Update() { mouseClickAnimation_reset(); if (Input.GetMouseButton(0)) { setCursor(cursorTexture_Click,1); mouseClickAnimation(); MouseFollow(); timer += Time.deltaTime; //print("鼠标左键按!"); }// else if (Input.GetMouseButtonUp(0) && timer != 0) { mouseClickAnimation(); MouseFollow(); //print("鼠标左键长按" + timer + "秒!"); timer = 0; }// if (Input.GetMouseButton(1)) { timer += Time.deltaTime; //Debug.Log(" 鼠标右键 长按 " + timer + "秒!"); }// if (Input.GetMouseButtonUp(0)) { setCursor(cursorTexture_Idle,0); //print("鼠标左键抬起!"); }// if (Input.GetMouseButtonUp(1)) { //print("鼠标右键抬起!"); }// if (Input.GetMouseButtonUp(2)) { //print("鼠标中键抬起!"); }// if (Input.GetMouseButtonUp(3)) { //print("鼠标侧键抬起!"); }// }// }//

 

更改鼠标样式图片被拉伸,参考资料4

 

 

参考资料:

1.Unity 鼠标点击事件

2.Unity3D各种获取鼠标各种位置的小方法

3.Cursor.SetCursor

4.

 

[Unity][UGUI]更改鼠标样式图片被拉伸

5.

 

 

 

 

最新回复(0)