UGUI区分UI与3d响应

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
using System.Collections.Generic;

public class TouchRayTest : MonoBehaviour {
public EventSystem eventSystem;
public GraphicRaycaster graphicRaycaster;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
if (CheckGuiRaycastObjects())
{
Debug.Log("on");
}
else {
Debug.Log("off");
}
}

bool CheckGuiRaycastObjects()
{
PointerEventData eventData = new PointerEventData(eventSystem);
eventData.pressPosition = Input.mousePosition;
eventData.position = Input.mousePosition;

List<RaycastResult> list = new List<RaycastResult>();
graphicRaycaster.Raycast(eventData, list);
//Debug.Log(list.Count);
return list.Count > 0;
}
}

时间: 2024-11-09 01:10:49

UGUI区分UI与3d响应的相关文章

UI和3D场景同时都需要响应触摸事件

比如战斗场景,UI和3D场景同时都需要响应触摸事件,如果同时响应可能就会出现触摸UI的时候影响到了3D部分.为了解决这个问题在判断3D响应之前要先判断手指是否点击在UI上. 以前NGUI的时候都是自己来发送射线判断,现在UGUI好了系统提供了更为简便的方法. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #if UNITY_AN

UWP开发入门(二十一)——保持Ui线程处于响应状态

GUI的程序有时候会因为等待一个耗时操作完成,导致界面卡死.本篇我们就UWP开发中可能遇到的情况,来讨论如何优化处理. 假设当前存在点击按钮跳转页面的操作,通过按钮打开的新页面,在初始化过程中存在一些耗时的操作. public void OnNavigatedTo(object obj) { var watch = new Stopwatch(); Debug.WriteLine("---------------Start"); watch.Start(); //假设耗时1秒 DoBu

2D UI和3D UI的工作原理

2D UI的工作原理 UI控件的位置在UI Root 的红框(视窗)上,也就是UI控件的z轴,相机的z轴,UI Root的z轴都是0,因为2D UI都是纯粹的2D图片按层次显示,不会不出现三维立体效果,所以都是直接紧贴着视窗,只要UI控件在UI Root的红框范围内,那么UI就能够正常显示在Game上. 2D UI最本质的意义是:UI摄像机是一个正交摄像机. 3D UI的工作原理 在3D UI下,创建的UI控件都在一个三维立体空间中,摄像机是一个透视的摄像机,这和2D UI有着截然不同的区别,因

Android UI卡顿响应慢性能差怎么办?请用Systrace 来分析查看~

目录 一.Systrace 简介二.Systrace 使用方法三.使用命令行抓取 Systrace四.使用Systrace 检测UI 性能五.使用Systrace 检测警告以及掉帧问题六.查看trace 文件的快捷键七.代码中添加trace 标记具体分析问题所在八.使用TraceView 分析trace Log 一.Systrace 简介 Systrace 允许你收集和检查设备上运行的所有进程的计时信息. 它包括Androidkernel的一些数据(例如CPU调度程序,IO和APP Thread

UI基础:事件.响应链

UIEvent:事件,是由硬件捕捉的一个代表用户操作操作设备的对象. 事件分三类:触摸事件.晃动事件.远程控制事件. 触摸事件:用户通过触摸设备屏幕操作对象,.输入数据.支持多点触摸,包含1个到多个触摸点. UIView支持触摸事件(继承了UIResponder),而且支持多点触摸 使用时,需要定义UIView子类,重写触摸相关的方法. 1.刚开始触摸到屏幕的时候触发 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

XAML UI 的3D 透视效果

<StackPanel Margin="35" Background="Gray">         <StackPanel.Projection>             <PlaneProjection RotationX="-35" RotationY="-35" RotationZ="15"/>         </StackPanel.Projection

unity区分点击在3D物体还是2D UI上

当场景中的3D物体需要响应点击,但同时有UI显示时,存在判断点击是在3D物体上还是UI上的问题,办法如下: 1. 射线检测所有2D 3D物体,有2D物体被检测到时表明当前有UI.但无论Physics2D.Raycast()还是Physics.Raycast()都只能检测到含有Collider组件的物体,普通UI如Image Button等一般用射线是不起作用的.EventSystem.current.RaycastAll()可以将当前屏幕上的所有可检测的物体全部检测到,该方法需要自己构造一个Po

Unity判断鼠标是否在UI(UGUI)上

"EventSystem.current.IsPointerOverGameObject()" UI和3D场景同时都需要响应触摸事件,如果同时响应可能就会出现触摸UI的时候影响到了3D部分.为了解决这个问题在判断3D响应之前要先判断手指是否点击在UI上. 1 #if UNITY_ANDROID && !UNITY_EDITOR 2 #define ANDROID 3 #endif 4 5 6 #if UNITY_IPHONE && !UNITY_EDIT

Unity的UGUI在SetParent后修改UI的localposition问题

正常情况下,UGUI设置UI的localposition可以直接赋值 UIxxx.rectTransform.localPosition = new Vector3(lineLenght[0] / 2f, 0, 0); 运行后在Unity的Inspector面板可以得到正确的().但如果 UIxxx.rectTransform.SetParent(GameObx]); UIxxx.rectTransform.localPosition = new Vector3(lineLenght[0] /