精华内容
下载资源
问答
  • Unity 鼠标点击事件

    千次阅读 2020-07-24 16:47:24
    鼠标事件,都是当鼠标和GUI或者碰撞体(Collider)交互的时候触发的。 需要注意的是,drag 其实就是鼠标 Down 后到 Up 之前持续每帧都会发送此消息。 常见的鼠标事件: OnMouseDown:当鼠标上的按钮被按下时触发的...

    鼠标事件
    鼠标事件,都是当鼠标和GUI或者碰撞体(Collider)交互的时候触发的。
    需要注意的是,drag 其实就是鼠标 Down 后到 Up 之前持续每帧都会发送此消息。
    常见的鼠标事件:
    OnMouseDown:当鼠标上的按钮被按下时触发的事件
    OnMouseDrag:当用户鼠标拖拽GUI元素或碰撞体时调用
    OnMouseEnter:当鼠标进入物体范围时被调用
    OnMouseExit:当鼠标退出时被调用
    OnMouseOver:当鼠标移动到某对象的上方时触发的事件
    OnMouseUp:当鼠标按键被松开时触发的事件
    按下事件:Input.GetMouseButtonDown()
    当鼠标某一个按键按下时,便会返回 True,但是即使玩家一直按着鼠标按键,也仅仅只会返回一次 True。

    void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                print("鼠标左键被按下!");
            }
            if (Input.GetMouseButtonDown(1))
            {
                print("鼠标右键被按下!");
            }
            if (Input.GetMouseButtonDown(2))
            {
                print("鼠标中键被按下!");
            }
            if (Input.GetMouseButtonDown(3))
            {
                print("鼠标侧键被按下!");
            }
        }
    

    这个方法只有一个参数,其中:0 表示鼠标左键,1表示鼠标右键,2表示鼠标中键,3和4分别表示鼠标的两个侧键。

    触发结果:
    在这里插入图片描述
    抬起事件:Input.GetMouseButtonUp()

    void Update()
        {
            if (Input.GetMouseButtonUp(0))
            {
                print("鼠标左键抬起!");
            }
            if (Input.GetMouseButtonUp(1))
            {
                print("鼠标右键抬起!");
            }
            if (Input.GetMouseButtonUp(2))
            {
                print("鼠标中键抬起!");
            }
            if (Input.GetMouseButtonUp(3))
            {
                print("鼠标侧键抬起!");
            }
        }
    

    与按下事件相同,也只有一个参数,其中:0 表示鼠标左键,1表示鼠标右键,2表示鼠标中键,3和4分别表示鼠标的两个侧键。

    触发结果
     在这里插入图片描述
    长按事件:Input.GetMouseButton()
    检测鼠标按键中某个按键一直按下的状态或者是获得按下的按键,如果一直按着鼠标按键,便会多次返回 True。

    private float timer = 0;
    
        void Update()
        {
            if (Input.GetMouseButton(0))
            {
                timer += Time.deltaTime;
            }
            else if (Input.GetMouseButtonUp(0) && timer != 0)
            {
                print("鼠标左键长按" + timer + "秒!");
                timer = 0;
            }
            if (Input.GetMouseButton(1))
            {
                timer += Time.deltaTime;
            }
            else if (Input.GetMouseButtonUp(1) && timer != 0)
            {
                print("鼠标右键长按" + timer + "秒!");
                timer = 0;
            }
        }
    

    和之前的两个事件一样,只有一个参数,其中:0 表示鼠标左键,1表示鼠标右键,2表示鼠标中键,3和4分别表示鼠标的两个侧键。

    触发结果:
    在这里插入图片描述

    展开全文
  • 对于UI,很容易能够实现鼠标点击,从而触发事件,但是对于游戏中的物体,则需要多进行一些操作。 原理很简单,就是由鼠标点击处发射线,与游戏物体发生碰撞,碰撞到的物体,就是你点击到的物体。具体操作如下: 对...

    对于UI,很容易能够实现鼠标点击,从而触发事件,但是对于游戏中的物体,则需要多进行一些操作。

    原理很简单,就是由鼠标点击处发射线,与游戏物体发生碰撞,碰撞到的物体,就是你点击到的物体。具体操作如下:

    1. 对你的Camera (摄像机),添加 Physics Raycaster 组件。
    2. 创建 C# 脚本,添加如下代码,并将脚本拖到你要点击的物体上。注:该物体必须要有 Collider 组件,如果没有,自行添加,否则无法触发。
    using UnityEngine;
    using UnityEngine.EventSystems;
    
    public class ObjectOnClick : MonoBehaviour, IPointerDownHandler
    {
        //当鼠标点击,即鼠标按下与松开均在该物体上时,触发以下函数
        public void OnPointerClick(PointerEventData eventData)
        {
        	//你要触发的代码
        }
        
    	//当检测到鼠标在该物体上,按下操作时,触发以下函数
        public void OnPointerDown(PointerEventData eventData)
        {
        	//你要触发的代码
        }
    }
    

    如果你的游戏对象(GameObject)被UI遮挡了(如一个 Panel 或 Button ),则不会再触发该物体上的事件。

    如何使鼠标点击渗透,传递下去,点我查看教程

    展开全文
  • unity3d 触发guitexture 鼠标点击事件

    万次阅读 2014-08-19 10:06:58
    unity3d创建了guitexture后,如何响应鼠标点击事件, 1、为maincamera添加guilayer(一般不用自己添加,在添加maincamera时会自动创建对应的guilayer) 2、在脚本代码中读取对应的guilayer 3、检测鼠标或...

    在unity3d创建了guitexture后,如何响应鼠标点击事件,

    1、为maincamera添加guilayer(一般不用自己添加,在添加maincamera时会自动创建对应的guilayer)

    2、在脚本代码中读取对应的guilayer

    3、检测鼠标或触摸屏单击事件,使用HitTest检测是否被点击

    4、根据名称执行对应的函数



    private GUILayer test;//定义
    
     void Start()
            {
                test = Camera.main.GetComponent<GUILayer>();//获取主摄像机对应的guilayer
    	}
    
    void Update()
            {
                if (Input.touchCount > 0 ||
                    Input.GetMouseButtonDown(0))//鼠标或触摸事件
                {                
    
                    if (test.HitTest(Input.mousePosition) != null)//点击检测到guitexture
                        Debug.Log(test.HitTest(Input.mousePosition).name);//调试输出guitexture的名称
    
                }
            }

    官方文档:

    GUILayer.HitTest

    GUIElement HitTest(Vector3 screenPosition);
    Description

    Get the GUI element at a specific screen position.

    Returns the GUIElement at a specific point on screen. If screenPosition is inside some GUIElement,that element is returned. Returns null if the position is not inside any GUI element.GUI elements that belong to Ignore Raycast layer will be ignored, as if they would not exist.

    screenPosition is measured in screen coordinates, like the values returned by Input.mousePosition property.

    Note: GUILayer.HitTest only finds old-school GUI components(made up of the classes GUIElement, GUITexture, GUIText, GUILayer),and will not work with the "new" one (referred to as "UnityGUI" andmade up of all the other GUIAnything classes, and the OnGUI() call).
    So if you're using UnityGUI, HitTest won't find anything.

    See Also: GUIElement.HitTest, Input.mousePosition.
    using UnityEngine;
    using System.Collections;
    
    public class Example : MonoBehaviour {
        private GUILayer test;
        void Update() {
            if (test.HitTest(Input.mousePosition) != null)
                Debug.Log(test.HitTest(Input.mousePosition).name);
            
        }
        void Example() {
            test = Camera.main.GetComponent<GUILayer>();
        }
    }
    

    展开全文
  • Unity中,当UI与游戏对象(GameObject)相互重叠的时候,鼠标点击,则优先响应UI,并且响应最前面的UI,默认状态下,后面的UI和 GameObject 不触发事件。 如果想把鼠标点击事件一直往后传递,进行如下操作: 在你...

    在Unity中,当UI与游戏对象(GameObject)相互重叠的时候,鼠标点击,则优先响应UI,并且响应最前面的UI,默认状态下,后面的UI和 GameObject 不触发事件。

    如果想把鼠标点击事件一直往后传递,就在你想要穿透的UI对象上,添加脚本组件(C# Script),命名(可更改)为PassMouseEvent:

    using UnityEngine;
    using System.Collections;
    using UnityEngine.EventSystems;
    using UnityEngine.UI;
    using System.Collections.Generic;
     
    public class PassMouseEvent : MonoBehaviour,IPointerClickHandler ,IPointerDownHandler,IPointerUpHandler
    {  
        //监听按下
        public void OnPointerDown(PointerEventData eventData)
        {
            PassEvent(eventData,ExecuteEvents.pointerDownHandler);
        }
     
        //监听抬起
        public void OnPointerUp(PointerEventData eventData)
        {
            PassEvent(eventData,ExecuteEvents.pointerUpHandler);
        }
     
        //监听点击
        public void OnPointerClick(PointerEventData eventData)
        {
            PassEvent(eventData,ExecuteEvents.submitHandler);
            PassEvent(eventData,ExecuteEvents.pointerClickHandler);
        }
        
    	/// <summary>
        /// 把鼠标点击事件传递到下层 UI 及 GameObject
        /// </summary>
        private static void PassEvent<T>(PointerEventData data, ExecuteEvents.EventFunction<T> function)
            where T : IEventSystemHandler
        {
            var results = new List<RaycastResult>();
            EventSystem.current.RaycastAll(data, results);
            var current = data.pointerCurrentRaycast.gameObject;
            foreach (var t in results.Where(t => current != t.gameObject))
            {
                ExecuteEvents.Execute(t.gameObject, data, function);
                //RaycastAll后ugui会自己排序,如果你只想响应透下去的最近的一个响应,这里ExecuteEvents.Execute后直接break就行。
            }
        }
    }
    

    即可将鼠标点击事件,传递给下层 GameObject

    如何为游戏对象(GameObject)添加鼠标点击事件,点我查看

    参考来源:
    https://www.xuanyusong.com/archives/4241

    展开全文
  • 首先给预设体追加Component -> Physics ->BoxCollider 然后再追加 Component -> Physics -> Rigidbody 就可以了。
  • 触发条件:需要将脚本绑定在有Collider组件的...//鼠标点击物体时执行 private void OnMouseDown() { print("OnMouseDown"); } //鼠标在物体上点击但没有抬起时一直执行 private void OnMouseDrag() { pri...
  • 在实际使用过程中发现,弹窗无法拦截鼠标点击事件。Canvas后面的GameObject如果有绑定碰撞器组件和触发器,点击事件就会穿透UI触发后面GameObject的点击事件。 官方有提供检测方法,下面我会具体说明一下: 首先需要...
  • 一、Unity的基本输入事件(最常用): /*鼠标键盘事件靠在Update... * 鼠标点击:  * Input.GetMouseButtonDown(0) //鼠标左键按下  * Input.GetMouseButtonDown(1) //鼠标右键按下  * Input.GetMouseButtonUp(0)
  • 鼠标点击3D物体触发Unity从本质上来说有两种:一种是通过事件(event)触发,一种是通过射线(ray)判断穿过的物体触发。这两种触发的原理是不同的,不论哪种触发都必须满足触发的要求才可以,既然原理不同,触发的...
  • Unity知识一:简单的点击事件

    万次阅读 2016-02-17 22:05:27
    Unity做项目,不可避免的要用鼠标...如果该射线被某游戏物体挡住了,那么我们就说现在鼠标点击在这个游戏物体上,会触发相应的事件。要注意的是:被点击的物体需要添加碰撞器才能进行碰撞检测。我们来看一个游戏
  • IInitializePotentialDragHandler, 初始化,鼠标最对应地方摁下出发(鼠标Down)每次点击触发一次 IBeginDragHandler, 鼠标移动出发,第一下移动触发一次 IDragHandler, 一直 触发 IEndDragHandler 结束(鼠标Up)...
  • 网上查了一些 没看到实用的 ...还有需要了解的一点: UI的OnClick事件鼠标抬起时触发 是晚于OnDrag事件触发的 这么一来就简单了 代码如下 using UnityEngine.EventSystems; using UnityEngine.UI; using UnityE...
  • Unity UGUI鼠标穿透UI问题(Unity官方的解决方法) ...最近在用UGUI的时候遇到了鼠标穿透的问题,就是说在UGUI和3D场景混合的...这里给Cube加了一个鼠标点击改变颜色的代码,如下 view sourcep...
  • 简述   最近在用UGUI的时候遇到了鼠标穿透的问题,就是说在UGUI和3D场景混合的情况下,点击UI...这里给Cube加了一个鼠标点击改变颜色的代码,如下 void Update() { if(Input.GetMouseButtonDown(0)) {
  • 当我们在游戏开发时,有时点击UI会触发其他事件的响应,所以我们需要对点击到的东西进行判断,判断是否点击到UI上。 方法一:Update中进行判断 UGUI提供的一个检测是否点击在UI上的方法 EventSystem.current....
  • 两种Unity双击事件

    2019-10-18 16:08:37
    文章目录1.此方法为通过unityevent来实现2.通过Button在onClick绑定的方法中触发3.触屏简单方法4.问题修复 有时候需要用到双击事件,而unity未提供双击...2)两种方法均存在一个问题,即当鼠标连续点击三次时,由...
  • 简述 最近在用UGUI的时候遇到了鼠标穿透的问题,就是说在UGUI和3D场景混合的情况下,点击...这里给Cube加了一个鼠标点击改变颜色的代码,如下 void Update() { if(Input.GetMouseButtonDown(0)) { GetCompo...
  • 且给该标签添加鼠标点击事件显示该三维物体的详细信息面板。 ②准备详细信息面板,实现显示三维物体的详细信息。 ②编写鼠标触发事件(移入、覆盖、移除)分别对应显示、显示、关闭标签。 三、实现内容
  • Unity3D 点击模型某部分出其属性信息框

    千次阅读 热门讨论 2016-05-23 09:59:00
    1:选中模型某一个部分作为触发对象,给该部分绑定BoxCollider组件,只有这样此部分才能接收到鼠标点击事件;添加过程为选中目标模块Component-Physics-zhBoxCollider,这样便为模型添加了碰撞组件; 2:写代码,写...
  • Unity中,我们经常会处理点击鼠标事件检测和键盘的事件检测。所以,我觉的应该将这个小知识点进行一个整理。 1.按下键盘的事件检测: 1.GetKey: 当通过名称指定的按键被用户按住时返回true ------ 持续按下,...
  • Unity 处理UGUI点击穿透问题

    千次阅读 2019-01-16 10:06:50
    很多朋友在使用unity的时候,在使用鼠标控制视角旋转等等,当你点击在UI上面的时候,同样会触发视角旋转的事件,这就是典型的UI穿透的问题,下面为大家介绍一下怎么处理这个问题: 新建一个gameObject,添加一个...
  • 简述 最近在用UGUI的时候遇到了鼠标穿透的问题,就是说在UGUI和3D场景混合的情况下,点击...这里给Cube加了一个鼠标点击改变颜色的代码,如下 void Update() { if(Input.GetMouseButtonDown(0)) { ...
  • 简述 最近在用UGUI的时候遇到了鼠标穿透的问题,就是说在UGUI和3D场景混合的情况下,点击UI区域同时也会 触发3D中物体的鼠标...这里给Cube加了一个鼠标点击改变颜色的代码,如下 void Update() { i...

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
关键字:

unity鼠标点击触发事件