前言

如果有更好的写法或是代码有什么错误等等,还请大佬教教我。

一、New Input System配置

下载安装哪些就自己搜下怎么整吧,我这就不写了,直接写怎么配置。

首先右键—>创建—>Input Actions

这个是详细配置。

创建一个空物体

为物体添加MouseInputPlayer  C#脚本(下方会写,此处先创建一个空的脚本文件)

为物体添加Player Input组件

按上图进行绑定

二、脚本配置

MouseInputPlayer.cs脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Interactions;public class MouseInputPlayer : MonoBehaviour
{private RaycastHit hit;private bool hitBool; //是否点击到目标private IMouseInputPlayer mouseClickInterface; //接口private ObjectProperties mIPScriptName; // 物体属性脚本private bool ifMouseClickInterface; // 是否存在private bool ifObjectProperties; // 是否存在public void OnLeftBottonClick(InputAction.CallbackContext context){switch (context.phase){case InputActionPhase.Started:{//Debug.Log("操作开始");mouseClickInterface = null; //初始化接口Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue()); //射线hitBool = Physics.Raycast(ray, out hit); //返回是否点击到目标if (hitBool){//Debug.Log("操作开始");ifObjectProperties = hit.collider.gameObject.TryGetComponent(out objectProperties); // 获取物体属性脚本ifMouseClickInterface = hit.collider.gameObject.TryGetComponent(out mouseClickInterface); //设置接口}}break;case InputActionPhase.Performed:{if (hitBool && ifObjectProperties){if (context.interaction is MultiTapInteraction){//Debug.Log("执行双击逻辑");if (objectProperties.ifLeftMouseDblclick && ifMouseClickInterface){mouseClickInterface.OnLeftMouseDblclick();}}else if (context.interaction is HoldInteraction){//Debug.Log("执行长按逻辑");if (objectProperties.ifLeftMouseHold && ifMouseClickInterface){mouseClickInterface.OnLeftMouseHold();}}else{//列表中只有MultiTapInteraction和HoldInteraction对应的两种Interaction。//故不会走到这个else里。}}}break;case InputActionPhase.Canceled:{if (context.interaction is MultiTapInteraction){//Debug.Log("执行点击逻辑");if (hitBool && ifObjectProperties){if (objectProperties.ifLeftMouseClick && ifMouseClickInterface){mouseClickInterface.OnLeftMouseClick();}}}}break;}}
}

IMouseInputPlayer.cs 接口 (无需挂载在任何物体上)(滚轮滑动方法暂时没写,后面在加上)

public interface IMouseInputPlayer
{/// <summary>/// 单击/// </summary>/// <param name="context"></param>void OnLeftMouseClick();/// <summary>/// 长按/// </summary>/// <param name="context"></param>void OnLeftMouseHold();/// <summary>/// 双击/// </summary>/// <param name="context"></param>void OnLeftMouseDblclick();/// <summary>/// 滚轮滑动/// </summary>/// <param name="context"></param>void OnLeftMouseRoller();
}

ObjectProperties.cs 物体属性脚本(挂载在需要的物体上)

(2022-2-22 更新优化了脚本,去掉了ObjectProperties.cs中的MIPScriptName变量)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ObjectProperties : MonoBehaviour
{public bool ifLeftMouseClick = false; //是否执行对应脚本单击事件public bool ifLeftMouseDblclick = false; //是否执行对应脚本双击事件public bool ifLeftMouseHold = false; //是否执行对应脚本长按事件
}

三、不同物体的单击、双击、长按事件测试脚本

首先是一个Cube

(2022-2-22 更新优化了脚本,去掉了ObjectProperties.cs中的MIPScriptName变量)

CubeMouseClick.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class CubeMouseClick : MonoBehaviour, IMouseInputPlayer
{public void OnLeftMouseClick(){Debug.Log("CubeMouseClick执行点击逻辑");}public void OnLeftMouseDblclick(){Debug.Log("CubeMouseClick执行双击逻辑");}public void OnLeftMouseHold(){Debug.Log("CubeMouseClick执行长按逻辑");}public void OnLeftMouseRoller(){}
}

接下来是一个Sphere

(2022-2-22 更新优化了脚本,去掉了ObjectProperties.cs中的MIPScriptName变量)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SphereMouseClick : MonoBehaviour, IMouseInputPlayer
{public void OnLeftMouseClick(){Debug.Log("SphereMouseClick执行点击逻辑");}public void OnLeftMouseDblclick(){Debug.Log("SphereMouseClick执行双击逻辑");}public void OnLeftMouseHold(){Debug.Log("SphereMouseClick执行长按逻辑");}public void OnLeftMouseRoller(){}
}

准备工作完成,接下来开始测试

四、测试

视频好像暂时传不了

你们可以自己测一下

暂时就先截图吧

这是两个不同的,点击空白地方是没有事件执行的,也可以自己写一个默认事件,比如视角的移动旋转什么的

Unity3D New Input System 鼠标左键单击、双击、长按配置及实现接口多态用法(一)相关推荐

  1. 鼠标左键单击双击冲突的一种解决方法

    鼠标在得到左键双击事件时,同时也得到了左键down的消息.在只想处理双击事件而不处理按下事件,有下面的方法. 思路: 在收到单击事件后,不处理单击事件,而是settimer,将单击事件对应的操作放到t ...

  2. 网站选择按钮点击无反应?_Win10系统电脑鼠标左键单击没有反应的解决办法

    Win10系统鼠标左键单击没有反应是怎么回事?最近一个用户在用电脑的时候,突然遇到鼠标左键单击没有反应的问题,是鼠标坏了吗?还是系统问题呢?今天就给大家分析Win10系统电脑鼠标左键单击没有反应的可能 ...

  3. C#怎么判断是鼠标左键单击还是右键单击?

    C#怎么判断是鼠标左键单击还是右键单击? 判断方法如下: private void MouseClick(object sender, MouseEventArgs e){ if (e.Button ...

  4. 鼠标左键单击时使用纯js触发右键单击

    鼠标左键单击时使用纯js触发右键单击 onClick={e => {// 模拟右键点击const { clientX, clientY } = econst rightFun = new Mou ...

  5. php控制鼠标,HTML_用VBS控制鼠标的实现代码(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击、鼠标右击),怎么用VBS模拟鼠标左键单击、 - phpStudy...

    用VBS控制鼠标的实现代码(获取鼠标坐标.鼠标移动.鼠标单击.鼠标双击.鼠标右击) 怎么用VBS模拟鼠标左键单击.左键双击.右键单击?-- 网上搜到的答案普遍是VBS无法实现,或者是要用第三方COM( ...

  6. potplayer 怎么用鼠标左键单击播放暂停

    potplayer默认是双击鼠标才能播放,暂停视频. 双击鼠标不舒服,可以通过下面的方法改成鼠标左键单击播放暂停. 1)打开PotPlayer软件并播放视频: 2)按快捷键F5调出参数设置: 3)依次 ...

  7. 模拟鼠标的左键单击和右键单击

    ' ------------------------------------------- '        模拟鼠标的左键单击和右键单击 ' ---------------------------- ...

  8. 鼠标左键按钮不起作用? 这是解决方法

    Third of november/Shutterstock.com11月3日/Shutterstock.com Even something as simple as a mouse button ...

  9. java如何判断鼠标双击_Swing中如何比较好的判断鼠标左键双击

    importjava.awt.Toolkit;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importja ...

最新文章

  1. FireDAC 下的 Sqlite [4] - 创建数据库
  2. nginx增加php支持,Nginx启用php支持
  3. 神经网络与机器学习 笔记—核方法和径向基函数网络(上)
  4. 模拟浏览器自动化测试工具Selenium之三页面窗口切换开发篇
  5. vs与git中间的阻拦--Git failed with a fatal error. error: open(“.vs/GBA/v16/Server/sqlite3/db.lock
  6. A new node couldn't be inserted because one with the same name exists. (VERR_CFGM_NODE_EXISTS)
  7. Rocket - tilelink - FIFOFixer
  8. java 中 transient关键字
  9. 计算1-1/x+1/x*x
  10. python凹多边形分割_直线切割凹多边形
  11. 完全java实现一款开源的报表工具简表(JOR)
  12. unity打包VR项目注意事项
  13. 树莓派配套系统_3.95寸配套树莓派显示屏,移植好操作系统,普及树莓派显示屏...
  14. 雷达信号处理-雷达应用
  15. Openwrt编译进阶-修改ROOT密码,修改默认WiFi名称,修改主机名,修改主机型号
  16. vue-fullcalendar 日历插件
  17. MS Excel生成二维码
  18. jboss ejb 3
  19. 脑机接口(一):背景知识
  20. 质量管理知识点大盘点(之二)

热门文章

  1. MySQL性能调优(系统参数调优)总结
  2. 怎样免费在线压缩MKV格式视频
  3. Vectoraster 7 for Mac(矢量光栅图案制作工具)
  4. mysql智能停车场,智能停车场管理系统设计与实现(Hibernate和Struts,MySQL)
  5. CSS实战 - 波纹扩散效果
  6. 树莓派4B更换清华源和没有公钥报错
  7. OSG+VS2010+win7环境搭建
  8. 投资理财-小新分红的意义
  9. Win10 SecureCRT 遇到一个致命的错误且必须关闭
  10. 地面波天线怎样能多收台_地面波天线水平安装和垂直安装示例图解