厦门专业网站设计公,软件班级网站建设,网站设计套用模板,wordpress 帝国王系列文章目录
unity工具 文章目录 系列文章目录前言一、使用rect.Contains()判断1-1、转换坐标1-2、代码如下#xff1a;1-3、注意事项1-3、测试效果如下 二、使用坐标计算在不在区域内2-1、方法如下#xff1a;2-2、注意事项 三、使用RectTransformUtility.ScreenPointToLo…系列文章目录
unity工具 文章目录 系列文章目录前言一、使用rect.Contains()判断1-1、转换坐标1-2、代码如下1-3、注意事项1-3、测试效果如下 二、使用坐标计算在不在区域内2-1、方法如下2-2、注意事项 三、使用RectTransformUtility.ScreenPointToLocalPointInRectangle和坐标一起配合计算3-1、代码如下3-2、注意事项 总结 前言
大家好我是心疼你的一切不定时更新Unity开发技巧觉得有用记得一键三连哦。 有时候需要判断玩家此时点击的某个点是否在某个指定的UI区域内如果在区域内则响应点击事件不在区域内时不进行响应事件。所以记录一下
一、使用rect.Contains()判断
1-1、转换坐标
把屏幕坐标转换成本地坐标 API:RectTransformUtility.ScreenPointToLocalPointInRectangle 然后在使用**Contains()**判断某个坐标点在不在该RectTransform里面了
1-2、代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIClickPosition : MonoBehaviour
{//判断的UI区域public RectTransform rectTrans;//用于坐标点是否在区域内的标记public Text txtFlag;private void Update(){GetClickArea(Input.mousePosition);}///传入某个坐标点进行判断public void GetClickArea(Vector2 point){Vector2 localPoint;//将屏幕坐标转化为相对rectTrans的本地坐标if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTrans, point, Camera.main, out localPoint)){//rectTrans.rect是rectTrans的本地坐标不能rectTrans.rect.Contains(point)直接判断必须先转为本地坐标localPoint//判断点击的坐标点是否在rectTrans.rect矩形内if (rectTrans.rect.Contains(localPoint)){txtFlag.color Color.green;txtFlag.text 鼠标在UI区域内哦;}else{txtFlag.color Color.red;txtFlag.text 鼠标不在UI区域内哦;}}}
}
1-3、注意事项
1.需要将Canvas设置成相机模式 ScreenSpace-Camera ,要不然没有反应 2.
1-3、测试效果如下 Unity判断屏幕中某个坐标点的位置是否在指定UI区域内 二、使用坐标计算在不在区域内
2-1、方法如下
/// summary/// 使用坐标计算位置/// /summary/// param namepos/parampublic void GetClickArea_pos(Vector3 pos){float _mapWidth rectTrans.sizeDelta.x;float _mapHight rectTrans.sizeDelta.y;//目标区域锚点为居中时使用 Pivot(0.5,0.5)if (pos.x (rectTrans.position.x _mapWidth / 2) pos.x (rectTrans.position.x - _mapWidth / 2) pos.y (rectTrans.position.y _mapHight / 2) pos.y (rectTrans.position.y - _mapHight / 2)){txtFlag.color Color.green;txtFlag.text 鼠标在UI区域内哦;}else{txtFlag.color Color.red;txtFlag.text 鼠标不在UI区域内哦;}}2-2、注意事项
1.根据坐标计算位置不需要设置Canvas的渲染模式反之设置成第二种模式到不行了不能使用了 2.但是目标图片中心点需要设置成居中 如下图
三、使用RectTransformUtility.ScreenPointToLocalPointInRectangle和坐标一起配合计算
1.把第一种第二种相结合无需考虑中心点锚点
3-1、代码如下 /// summary/// 第三种方法使用RectTransformUtility配合坐标计算无需考虑中心点,锚点/// /summary/// param namepos/parampublic void GetClickArea_(Vector3 pos){Vector2 localPoint;//将选中的点转换为Image区域内的本地点RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTrans, pos, Camera.main, out localPoint);Vector2 pivot rectTrans.pivot;Vector2 normalizedLocal new Vector2(pivot.x localPoint.x / rectTrans.sizeDelta.x, pivot.y localPoint.y / rectTrans.sizeDelta.y);if ((normalizedLocal.x 0 normalizedLocal.x 1) ((normalizedLocal.y 0 normalizedLocal.y 1))){txtFlag.color Color.green;txtFlag.text 鼠标在UI区域内哦;}else{txtFlag.color Color.red;txtFlag.text 鼠标不在UI区域内哦;}}3-2、注意事项
1.第三种也是需要把相机模式改成和第一种里面使用的模式一样ScreenSpace-Camera
总结
不定时更新Unity开发技巧觉得有用记得一键三连哦。
以上就是今天要讲的内容有需要会继续补充