unity 3D物体使用EventSystem响应事件
在ugui中创建一个canvas 之后会自动创建一个EventSystem,用来处理UI上的时间响应。(可以通过UI>EventSystem创建EventSystem)
EventSystem
有三个组件:EventSystem、StandaloneInputModule、TouchInputModule,后面两个组件都继承自BaseInputModule。
EventSystem组件主要负责处理输入、射线投射以及发送事件。一个场景中只能有一个EventSystem组件,并且需要BaseInputModule类型组件的协助才能工作。EventSystem在一开始的时候会把自己所属对象下的BaseInputModule类型组件加到一个内部列表,并且在每个Update周期通过接口UpdateModules接口调用这些基本输入模块的UpdateModule接口,然后BaseInputModule会在UpdateModule接口中将自己的状态修改成'Updated',之后BaseInputModule的Process接口才会被调用。
BaseInputModule是一个基类模块,负责发送输入事件(点击、拖拽、选中等)到具体对象。EventSystem下的所有输入模块都必须继承自BaseInputModule组件。StandaloneInputModule和TouchInputModule组件是系统提供的标准输入模块和触摸输入模块,我们可以通过继承BaseInputModule实现自己的输入模块。
除了以上两个组件,还有一个很重要的组件通过EventSystem对象我们看不到,它是BaseRaycaster组件。BaseRaycaster也是一个基类,前面说的输入模块要检测到鼠标事件必须有射线投射组件才能确定目标对象。系统实现的射线投射类组件有PhysicsRaycaster, Physics2DRaycaster, GraphicRaycaster。这个模块也是可以自己继承BaseRaycaster实现个性化定制。
总的来说,EventSystem负责管理,BaseInputModule负责输入,BaseRaycaster负责确定目标对象,目标对象负责接收事件并处理,然后一个完整的事件系统就有.
上边是从别的地方复制的...
下边是场景中的3D物体怎么用EventSystem响应事件
1.首先确保场景中有一个EventSystem,添加方式最开始有提到。
2.因为3d物体上没有canvas上边的GraphicRaycaster所以要Main Camera上添加Physics Raycaster,就相当于UI上的GraphicRaycaster
3.创建一个Cube(或者其他什么随便你,但是确保物体上有collion组件,因为没有碰撞器无法检测射线),作为事件触发的3d物体
4.在3D物体上(你创建的那个cube或者什么)挂上EventTrigger,然后指定怎么触发,指定要触发的方法,如下。

5.在要触发事件的物体上(你创建的Cube或者其他什么),挂上如下脚本
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems; public class CubeClickTest : MonoBehaviour//, IPointerDownHandler
{ // Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown(0))
{
Debug.Log(Input.mousePosition);
}
}
public void PointDownHandler()//在cube上挂上EventTrigger并指定该方法
{
transform.position += new Vector3(1,1,1);
} //public void OnPointerDown(PointerEventData eventData)//实现接口调用该方法
//{
// Debug.Log(eventData.button);//这里如果用鼠标左键触发就打印life,右键触发就打印right
// Debug.Log(eventData);//你可以通过eventData获取更多信息,这里是打印鼠标的位置(跟Input.mousePosition输出结果是一样的)以及delta(0.0,0.0),不知道是啥...
// Debug.Log(Input.mousePosition);
//Debug.Log(eventData.pointerPressRaycast.gameObject.name);
// Debug.Log("press");
//}
}
当然也可以不挂EventTrigger,直接实现接口,返回第三步。
4.引用接口(你想用什么方式触发就实现对应的接口,这里以鼠标按下为例),要引用UnityEngine.EventSystems然后实现接口方法。
5.同样挂上上边脚本,将脚本中红色部分的注释取消,cube移除EventTrigger组件,然后就可以了。
unity 3D物体使用EventSystem响应事件的更多相关文章
- Unity 3D物体的点击事件响应以及NGUI坐标和世界坐标的互相转换
Unity 版本:4.5 NGUI版本:3.6.5 参考链接:http://game.ceeger.com/Script/Camera/Camera.ScreenPointToRay.html,Uni ...
- UI和3D物体的堆叠响应
一.问题:当3D物体和UI元素重叠显示时一般UI元素会遮挡物体,这时点击UI元素响应时UI后方的物体也会响应. private void OnMouseDown() { ChangeColor(); ...
- unity实现3D物体上的事件监听处理
想要在3D物体上实现全套事件监听处理: OnMouse系列 OnTrigger系列 OnPointer系列 OnDrag系列 1.在相机中添加Physics Raycaster组件 2.3D物体上 ...
- unity区分点击在3D物体还是2D UI上
当场景中的3D物体需要响应点击,但同时有UI显示时,存在判断点击是在3D物体上还是UI上的问题,办法如下: 1. 射线检测所有2D 3D物体,有2D物体被检测到时表明当前有UI.但无论Physics2 ...
- Unity 3d 脚本常用事件
1.学习笔记,每天晚上看看unity 3d 的教程 学点东西,先上一张图 这是 系统中脚本执行的顺序图 Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake ...
- Unity 3D使用GameObject创建一个简单的可移动物体
于Unity 3D游戏的开发.游戏脚本需要3D模拟组合,该脚本将被写入阻力3D为了达到效果对象. 以下是一个小实例,使用Unity 3D实现一个可控制移动的小人.小人能够向前.向后.向左和向右移动. ...
- 3D Slicer Modify Mouse Event 修改3D Slicer中的鼠标响应事件
在3D Slicer中,我们如果想在自己写的插件中来修改默认的鼠标响应事件的话,就需要先将原有的响应事件链接删除,然后建立自定义的响应事件链接,然后将自己要实现的功能写在响应事件函数中. 比如Slic ...
- Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果
Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果 梗概: 一. 摄像机围绕目标物体旋转, 即摄像机离目标物体有一定的距离且旋转轴心为该物体的位置. 二. 当目标物体被障碍物挡住后, 需要将摄像机 ...
- 3D场景中的鼠标响应事件
原文:3D场景中的鼠标响应事件 今天要讲的是3D场景中的鼠标响应事件的处理,首先Button的响应是大家熟知的,只要加上一个click事件,然后写一个响应的处理时间就行了.对于二维平面上的一些控件也很 ...
随机推荐
- ukulele弹奏模拟器v1.0(待完善)
写在前面 最近听beyond乐队的<灰色轨迹>听上瘾了,300多遍,震惊!!尤其喜欢最后一分半钟的吉他solo,真可谓吉他没有酒,依然让我醉如老狗.. 翻了翻网上的视频,瞬间觉得单身20年 ...
- gradle 使用maven repository 的设置
repositories { //Maven中心库(http://repo1.maven.org/maven2) mavenCentral() //本地库,local repository ...
- jar第三方组件Dependency-check依赖检查工具
jar第三方组件Dependency-check依赖检查工具 http://www.mianhuage.com/913.html 工具下载 http://dl.bintray.com/jeremy-l ...
- Xamarin图表开发基础教程(7)OxyPlot框架
Xamarin图表开发基础教程(7)OxyPlot框架 Xamarin.Forms中使用OxyPlot框架 在Xamarin. Forms平台上实现图表显示需要完成以下的步骤: 1.添加OxyPlot ...
- 【各种误解解释】C-LODOP的三种角色及注册号
该简短问答是从现象和误解和相关作为分类,主要是注册角色和注册号使用等.之前的相关博文(该相关博也有些链接到的博文,按照大类区分):LODOP和C-LODOP注册与角色等简短问答[增强版]. 确认角色: ...
- [LeetCode] 66. Plus One 加一
Given a non-empty array of digits representing a non-negative integer, plus one to the integer. The ...
- [LeetCode] 248. Strobogrammatic Number III 对称数III
A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...
- [LeetCode] 295. Find Median from Data Stream 找出数据流的中位数
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
- 源码分析之Handler
Handler是Android中的消息机制实现,可以实现UI线程和子线程的消息传递,这里就来深入了解Android的消息机制,来分析Handler的源代码 入手实例 在Android开发中,子线程与主 ...
- python的安装与配置
pyhton的下载与安装 1.python官网地址:https://www.python.org 2.下载 Python 编辑器PyCharm PyCharm 是一款功能强大的 Python 编辑器 ...