unity一些键盘鼠标特殊触发事件总结

 首先是鼠标双击事件,这个只能用OnGUI的方法了,代码如下:

 void OnGUI()
    {
        Event e = Event.current;
        if (e.isMouse && (e.clickCount == 2))
        {
           
            Debug.Log("用户双击了鼠标");
        }
    }


接下来是点击鼠标的左右中键的代码。

注意是点击中键而不是滚动

如下:

 void Update()
    {
        if (Input.GetButton("Fire1"))
        { //LeftMouse是在inputManager中设置的,左键值为mouse 0    
          //   PlayerMove();
            Debug.Log("用户click鼠标左键");
        }
        if (Input.GetButton("Fire3"))
        { //LeftMouse是在inputManager中设置的,左键值为mouse 0    
          //   PlayerMove();
            Debug.Log("用户click鼠标中键");
        }
        if (Input.GetButton("Fire2"))
        { //LeftMouse是在inputManager中设置的,左键值为mouse 0    
          //   PlayerMove();
            Debug.Log("用户click鼠标右键");
        }
    }

上述代码里的Fire1等是unity默认的。

这个默认设置不止是针对鼠标的,同时还说键盘,例如左shift ,左ctrl和alt等。这个可以打开设置自己看到。

位置的路径在unity菜单的Edit--->project setting -->input里。

如下图:


下面说鼠标滚轮的交互。

直接举个例子来说,例如场景里有个cube 。

要实现:滚轮滚动相机的的镜头来拉近和拉远。

把以下脚本绑定到cube上,然后把相机指定上去就OK。滚动的代码就在Update里。

如下:


using UnityEngine;
using System.Collections;

public class followtarget : MonoBehaviour
{
    public GameObject Thirdcamera;

    float distance = 1;
  
    void Update()
    {
        distance -= Input.GetAxis("Mouse ScrollWheel");
        Thirdcamera.transform.position = this.transform.position - Vector3.forward * distance;
    }
}


然后就是键盘双击事件了,

这个官方似乎没有给出方法,所以就自创了。

我规定的是按键盘A键两次按键间隔不超过0.5秒。下面是代码:

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class followtarget : MonoBehaviour
{
    private float timer = 0;
    public enum Clickcount
    {
        firsttime,
        secondtime,
        zerotime
    }

    Clickcount First = Clickcount.zerotime;
    /// <summary>
    /// 键盘双击功能,两次按键间隔时间必须小于0.5秒
    /// </summary>
    void Update()
    {
        timer -= Time.deltaTime;
        if (Input.GetKeyDown(KeyCode.A)&& First == Clickcount.zerotime)
        {
            timer = 0.5f;
            Debug.Log("第一次按下");
            First = Clickcount.firsttime;
           
        }
        if (Input.GetKeyUp(KeyCode.A) && First == Clickcount.firsttime)
        {
            Debug.Log("第一次抬起");
            First = Clickcount.secondtime;
            
        }
        if (timer < 0)
        {
            First = Clickcount.zerotime;
        }

        if (Input.GetKey(KeyCode.A) && First == Clickcount.secondtime&&timer>0f)
        {

            Debug.Log("只有双击出现");
            First = Clickcount.zerotime; 
        }
    }
}



### Unity InputField 支持的事件类型 在 Unity 中,`InputField` 组件支持多种事件来响应用户的交互行为。这些事件可以通过 `EventTrigger` 或者直接通过脚本进行监听和处理。 #### 常见的事件类型有: - **OnValueChanged** 当输入字段中的文本发生变化时触发事件。可以传递当前文本作为参数[^1]。 - **OnEndEdit** 用户结束编辑(例如失去焦点或者按下回车键)时触发事件。同样能够获取最终输入的内容[^4]。 - **OnSubmit** 此事件会在用户提交表单时触发,在某些情况下可能与 OnEndEdit 行为相似,具体取决于平台和设备的行为。 对于更复杂的交互需求,还可以利用 `EventTrigger` 来添加其他类型的事件处理器,比如鼠标点击、拖拽等操作。需要注意的是,并不是所有的 EventTrigger 类型都适用于 InputField;通常只有一部分适合用于文本输入控件上的互动逻辑实现。 另外值得注意的是关于键盘显示方面的问题,当涉及到移动平台上虚拟键盘管理时,可能会遇到一些特殊挑战,如延迟等问题。这可能是由于第三方插件或其他因素引起的性能瓶颈所致[^3]。 ```csharp using UnityEngine; using UnityEngine.UI; public class InputFieldEvents : MonoBehaviour { public InputField myInputField; private void Start() { // 添加 OnValueChanged 事件监听器 myInputField.onValueChanged.AddListener(OnValueChangeHandler); // 添加 OnEndEdit 事件监听器 myInputField.onEndEdit.AddListener(OnEndEditHandler); } void OnValueChangeHandler(string newValue) { Debug.Log("Text has changed to: " + newValue); } void OnEndEditHandler(string finalValue) { Debug.Log("Editing ended with value: " + finalValue); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值