Unity关于OnMouseEnter()和OnMouseExit()事件的坑

Unity关于OnMouseEnter()和OnMouseExit()事件的坑

今天突然想要更改一下鼠标的图片,然后就用到了OnMouseEnter()和OnMouseExit()这两个函数,然后我的这两个事件一直触发不了,然后百度了很多也没有解决,后来我自己各种尝试终于解决了,下面先来介绍一下这两种事件一般的触发条件。

对于该类事件 OnMouseEnter,OnMouseExit,OnMouseDown,OnMouseUp ……
OnMouseEnter()这个方法就是他需要通过鼠标的射线检测来判断你鼠标当前位置是否是你想触碰的物体.
最容易忽略的一点是 :这个脚本一定要挂在你所要检测的物体身上(我就是没挂然后各种没反应)

1、触发组件
这些事件在一般情况下需要配合触发组件发才能生效,触发组件可以是碰撞器 Collider或者刚体Rigidbody 。
如果在一个GameObject下同时存在这两种组件,则触发时会遇到不可预知的触发状态,因此使用时需要分开处理比较合适。

2、触发层
当前附带(碰撞器 Collider或者刚体Rigidbody)触发组件的 GameObject 物体并不在摄像机可见层 Layer 时,鼠标操作是无法被侦测到的。

下面附上我的测试代码:

// An highlighted block
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChangeMouseTexture : MonoBehaviour {

    // Use this for initialization
    public Texture2D cursorTexture;
    public Vector2 hotSpot = Vector2.zero;
    public CursorMode cursorMode = CursorMode.Auto;
	void Start () {
        //Cursor.SetCursor(cursorTexture, hotSpot, cursorMode);
	}
	
	// Update is called once per frame
	void Update () {
		
	}
    void OnMouseEnter()
    {
        print("进入");
        //检测到物体时更改鼠标图标并且更改物体颜色
        Cursor.SetCursor(cursorTexture, hotSpot, cursorMode);
        this.GetComponent<MeshRenderer>().material.color = Color.yellow;

    }

    void OnMouseExit()
    {
        //离开时恢复成默认
        Cursor.SetCursor(null, Vector2.zero, cursorMode);
        this.GetComponent<MeshRenderer>().material.color = Color.white;

    }

}

参考: [link]https://blog.csdn.net/kenshako/article/details/8937906

onmouseenter是一个JavaScript事件,当鼠标指针进入元素时触发。与onmouseover事件不同的是,onmouseenter事件不会冒泡到父级元素或其他祖先元素。\[2\]这意味着当鼠标进入元素的子元素时,不会触发onmouseenter事件。\[1\]要使用onmouseenter事件,可以将其绑定到元素的事件处理程序上,例如使用addEventListener方法。当鼠标进入元素时,绑定的事件处理程序将被调用。\[3\]在事件处理程序中,可以通过event对象的target属性来确定触发事件的元素。\[3\]通过这种方式,可以准确地找到事件触发的元素并执行相应的操作。 #### 引用[.reference_title] - *1* [鼠标事件 onmouseover、onmouseenter、onmouseleaveonmouseout](https://blog.csdn.net/qq_24917475/article/details/109080203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [浅析onmouseover与onmouseenter的区别](https://blog.csdn.net/weixin_41072247/article/details/79315402)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值