如何在 Unity3D 中进行触摸操作?

2023-12-03

我正在使用 Unity3D 制作一个 Android 应用程序,它已经可以使用点击检测,但不能使用触摸。但我需要触摸才能进行多点触控检测。

我想要什么:我有我的播放器和 2 个箭头图像。一个箭头指向右侧,一个箭头指向左侧。当我触摸左箭头时,玩家应该开始向左移动,当我触摸右箭头时,玩家应该开始向右移动。

但是我如何检测哪个箭头被触摸(并按住)?我在谷歌上找到的所有代码都太旧了,不再工作了。

我正在使用 C# 脚本,这是一个 2D 游戏。


克劳萨尔,你要找的是......

一个按钮 (!!!)

就是这么简单!

  1. 单击“添加画布”。 (您很可能想要“缩放到屏幕尺寸” - 选择该选项。)

  2. 单击“添加按钮”。

  3. 没有“三”..去喝酒吧。

在您的代码中,为右侧按钮设置这样的例程

public void UserClickedRight()
 {
 Debug.Log("click right whoo!");
 }

左侧按钮也有类似的例程。

1. 前往您的Button在编辑器中。

2. 只需将脚本拖到其中并选择UserClickedRight !!

实际上,您不必从头开始对按钮进行编程:)

这是 Unity 的基本机制 - 将游戏对象拖到编辑器中的“槽”中。

(您拖动的游戏对象上有相关脚本。)

您无需进入触摸处理级别即可实现按钮!


现在你问,“按住按钮时”怎么样?

这非常简单,您只需要了解有关 Unity“事件”系统的一些知识即可。

In Button,Unity已经完成了“OnClick”的所有工作:

enter image description here

由于“点击”很常见,因此为了方便起见,他们将其放在“检查器”面板中。

好消息是Button has 您可以使用更多事件.

http://docs.unity3d.com/ScriptReference/UI.Button.html

我猜你想用OnPointerDown and OnPointerUp在你的情况下。

要使用其他事件(Unity 没有费心将其放入检查器面板中)非常简单,您只需

1,制作一个引用您想要的事件的脚本,

and,

2,你将该脚本放在有问题的按钮上......

就是这么简单。

逐步解释:

您将使用 Unity 的事件系统,因此:

  using UnityEngine.EventSystems;

下一个。你知道脚本通常是这样开始的......

 public class FancyButton:MonoBehaviour

“MonoBehaviour”部分仅意味着它是一个将“驱动游戏对象”的 C# 脚本。

在这种情况下,我们必须进一步提醒引擎您将使用这些点击事件。所以你添加这个。

,IPointerDownHandler,IPointerUpHandler

到目前为止我们有这个

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class FancyButton:MonoBehaviour,IPointerDownHandler,IPointerUpHandler
    {

现在是简单的部分。

您只需输入 Unity 将为您运行的两个例程,当这些事情发生时。

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class FancyButton:MonoBehaviour,IPointerDownHandler,IPointerUpHandler
{
  public void OnPointerDown(PointerEventData data)
  {
      Debug.Log("holy! someone put the pointer down!")
  }

  public void OnPointerUp(PointerEventData data)
  {
      Debug.Log("whoa! someone let go!")
  }
}

现在您所要做的就是将该脚本放到按钮上。完毕!

您可以将该脚本放在任何需要该功能的按钮上。

接下来,单击 Obi-wan 查看我们目前所处的位置!

enter image description here

最后,听起来您想要“当按住按钮时”做某事。这只是一个一般的编程问题 -你有一个布尔值,当按钮向上和向下移动时打开和关闭它。我们开始做吧。

    using UnityEngine;
    using System.Collections;
    using UnityEngine.EventSystems;
    
    public class FancyButton:MonoBehaviour,IPointerDownHandler,IPointerUpHandler
        {
        [System.NonSerialized] public bool mouseIsDownRightNow;
        
        public void OnPointerDown(PointerEventData data)
            {
            mouseIsDownRightNow = true;
            }
        
        public void OnPointerUp(PointerEventData data)
            {
            mouseIsDownRightNow = false;
            }
        }

您可以从另一个脚本或您想要的任何内容访问该变量。

如果您想在按钮按下时运行例程,请添加以下内容:

    void Update()
        {
        if (buttonIsDownRightNow) WhileButtonIsDown();
        }
    private void WhileButtonIsDown()
        {
        Debug.Log("THE BUTTON IS DOWN! WHOA!");
        }
    

尝试一下,并在按住按钮时观察控制台。

这是一个在按钮按下时不断增加值的示例:

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class FancyButton:MonoBehaviour,IPointerDownHandler,IPointerUpHandler
    {
    [System.NonSerialized] public bool buttonIsDownRightNow;
    private int countSomething;
    
    public void OnPointerDown(PointerEventData data)
        {
        buttonIsDownRightNow = true;
        }
    
    public void OnPointerUp(PointerEventData data)
        {
        buttonIsDownRightNow = false;
        }
    
    private void WhileButtonIsDown()
        {
        ++countSomething;
        }
    
    void Update()
        {
        if (buttonIsDownRightNow) WhileButtonIsDown();
        
        Debug.Log("value is now " +countSomething.ToString());
        }
    }

这里的所有都是它的。一旦您真正了解了 Unity 中的事件,就无需了解更多 Unity 了。

唯一的其他重要主题是 Mecanim、着色器编写、触摸、协程、线程、PhysX、本机插件、精灵、网络、动态网格、导航、VR、AR、动画、逆运动学、粒子、地形、IAP、照明、烘焙、阴影、MMP、角色控制器和音频。享受!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Unity3D 中进行触摸操作? 的相关文章

  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Android SearchView 在启动时隐藏键盘

    我有一个小问题正在尝试解决 当我打开应用程序时 键盘会显示输入搜索视图的查询 不过 我只想在单击搜索视图时显示键盘 我该如何解决 Thanks 这对我有用 用于隐藏焦点的代码 searchView SearchView view findV
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • onTaskRemoved() 在华为和小米设备中没有被调用

    我一直在使用onTaskRemoved 服务中的方法 用于检测应用程序何时通过滑动从设备最近列表中删除 我执行一些日志记录和发生这种情况时需要执行的一些其他操作 它工作完美 然后我在运行Android 6 0的华为设备上检查了这个方法 该方
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 丢失应用程序的密钥库文件(但已启用 Google Play 应用程序签名)

    我已经失去了原来的keystore用于签署我的应用程序的文件 我的应用启用了 Google Play 应用签名 如果我联系 Google 支持人员 是否可以重置密钥 以便我可以继续上传到此包 我希望我可以做到这一点 因为应用程序签名已启用
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 如何访问我的 Android 程序中的联系人

    我正在制作一个短信应用程序 并且想要访问我的 Android 应用程序中的联系人 我想访问联系人 就像他们在实际联系人列表中一样 选择后 我需要返回到我的活动 在其中我可以向该人发送短信 或者是否可以访问存储联系人的数据库 我的代码如下所示

随机推荐

  • 返回与值部分匹配的记录

    我正在尝试让查询工作 该查询从表单控件获取值 有时只是字符串的第一部分 我遇到的问题是 它仅在输入完整字符串时返回记录 即在姓氏框中 我应该能够输入 gr 它会显示 绿色的 灰色的 格雷厄姆 但目前除非使用完整的搜索字符串 否则它不会显示任
  • 在 Ruby 中发出超时的 HTTP HEAD 请求

    在 Rails 应用程序中 我想对资源 用户提供的 URL 发出 HTTP HEAD 请求 以确保它存在 我还想要一个超时 以确保该方法在花费合理的等待时间后失败 实现此目的最直接的方法是什么 如果可能 使用标准库 试试这个片段 requi
  • 使用 A* 的启发式方法来查找增益最高的路径

    假设我想改变 A 中的逻辑 试图找到最有用的路径 即增益最高的路径 而不是找到最短路径 即成本最低的路径 就我而言 目标并不固定为唯一的结束节点 节点定义为具有距离的任何节点B从起点开始 在普通版本 找到最短路径 中 我需要不要高估成本 即
  • PowerShell FTPS 上传失败并显示“系统错误”。

    问题 客户要求我们将从系统中提取的数据上传到他们的 box com 平台 而不是我们普通的 SFTP 实用程序 我有 box com 凭据 并且知道他们需要 FTPS 而不是 SFTP 并且需要被动模式 我抄袭了一个片段ThomasMaur
  • Groovy 中的测试类在 Kotlin 中看不到测试类

    我有一个带有 Kotlin 插件的 gradle 项目 在我的项目中 我使用 groovy 和 Spock 进行测试 用 Kotlin 编写的测试中使用的实用程序类之一 我将其放入 src test kotlin 我试图使用 groovy
  • 对 solr 输入字段进行哈希处理

    我想方便地搜索我们无法以非散列或加密形式索引或存储的字段 有没有办法告诉 solr 在与索引进行比较之前对特定字段进行哈希 或加密 简而言之 我认为这并不容易 这取决于您需要什么级别的安全性 作为一种通用 简单的解决方案 您可以将整个索引存
  • 在 ASP.NET MVC RC1 中对强类型视图使用“添加视图”对话框时出现问题

    我喜欢随 RC1 发布的新 添加视图 对话框 如果您指定视图数据类 它会为您生成一个支架视图 它似乎与我的解决方案中的项目中定义的类配合得很好 我的一些域类继承自外部程序集中定义的基类 并在我的 Web 项目中引用 当我指定这些域类之一时
  • 使用 MS 批处理文件将程序的输出分配给变量

    我需要使用 MS 批处理文件将程序的输出分配给变量 所以在 GNU Bash shell 中我会使用VAR application arg0 arg1 我需要在 Windows 中使用批处理文件实现类似的行为 就像是set VAR appl
  • 使页眉和页脚文件包含在多个 html 页面中

    我想创建包含在多个 html 页面上的通用页眉和页脚页面 我想使用 JavaScript 有没有办法只使用 html 和 JavaScript 来做到这一点 我想在另一个 html 页面中加载页眉和页脚页面 你可以通过以下方式完成此操作jq
  • 使用按钮打开包含库存商品详细信息的页面

    我的目的是在索引页面上显示带有链接的产品 单击链接时 将打开一个 模态 页面 显示该产品的详细信息 我有一个链接到产品页面的按钮 但没有链接到索引页面上的其他项目 如何使用此链接打开每个产品页面 按钮的代码
  • Datetime - 确定 R 中多个(n)日期时间范围是否相互重叠

    嗨 朋友们 我在查找多个日期时间范围是否相互重叠以及如果是的话 则查找它们重叠的时间段时遇到问题 我参考了以下链接确定两个日期范围是否重叠 and 检测重叠周期的算法还有更多 不知道这是否正确 我有 n 3 的示例解释 假设我有 n 个开关
  • 如何在TabActivity的单个选项卡下管理多个Activity

    问题就在这里 在我的应用程序中 我有 5 个包含活动的选项卡 在每个场景中 我都必须显示不同的屏幕 例如 选项卡的主要活动是列表视图 当我单击其中一个项目时 我想显示带有另一个列表视图的第二个屏幕 当用户选择一个项目等时 该屏幕将显示另一个
  • 找不到 -lFolly 的库

    将react native从版本0 63 2更新到0 66 1后 当我尝试构建我的应用程序时 我在Xcode中收到以下错误 找不到 lFolly 的库 我尝试过跑步pod install并清理构建文件夹 我的图书馆搜索路径看起来像this用
  • SetPixel 之后的 GetPixel 给出不正确的结果

    我从一张 jpg 中设置像素 另存为 jpg 文件 再次读取新文件 获取像素 但它给了我不正确的结果 这是我的代码 use Image Magick use Data Dumper my im new Image Magick im gt
  • 当我有来自 Code::Blocks 中同一组源文件的两个 .cpp 文件时,如何运行其中一个?

    我有两个不同的 cpp一个项目的同一组源下的文件 链表 我尝试运行一个名为 customer 的链接列表文件 但它只运行另一个名为 video 的文件 如何运行 客户 链表文件 My customer cpp文件处于活动状态 但仍在运行 视
  • Java 线程到 Linux 线程 (LWP) 的一对一映射

    Java之间是否存在一对一的映射关系Thread对象和操作系统线程 轻量级进程 也就是说 如果我有一个Thread对象 我是否可以始终准确地识别一个关联的操作系统线程 并且我将始终拥有相同的关联操作系统线程吗 一般来说 这取决于操作系统和
  • Elasticsearch 无法在 AWS kubernetes 集群上启动

    我正在运行 kubernetes 1 10 的 AWS EKS 上运行我的 kubernetes 集群 我正在按照本指南在我的集群中部署elasticsearch弹性搜索 Kubernetes 我第一次部署它时一切正常 现在 当我重新部署时
  • 我怎样才能“显式地”快速实现一个协议?如果不可能,为什么?

    在C 中 有这个伟大的语言功能称为 显式接口实现 它允许您实现两个或多个接口方法名称冲突的接口 它还可以使方法在使用封闭类型的对象调用它时执行一件事 并在将其转换为接口类型然后调用该方法时执行另一件事 我想知道 Swift 中是否有这样的东
  • 代理的 TFS 构建持续时间报告

    我正在尝试构建一份报告来显示各种构建代理的相对效率 但无法从该工具中获取我需要的信息 我想要的是一个包含以下列的简单网格 内部版本号 构建定义 构建代理 构建状态 构建开始时间 构建持续时间 这可以让我做一些类似的事情 比如根据agent2
  • 如何在 Unity3D 中进行触摸操作?

    我正在使用 Unity3D 制作一个 Android 应用程序 它已经可以使用点击检测 但不能使用触摸 但我需要触摸才能进行多点触控检测 我想要什么 我有我的播放器和 2 个箭头图像 一个箭头指向右侧 一个箭头指向左侧 当我触摸左箭头时 玩