unity UGUI如何获取鼠标指针所在位置的UI对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity UGUI如何获取鼠标指针所在位置的UI对象相关的知识,希望对你有一定的参考价值。
参考技术A public class GetMousePos : MonoBehaviourpublic Canvas canvas;//画布
private RectTransform rectTransform;//坐标
void Start()
canvas = GameObject.Find("Canvas").GetComponent<Canvas>();
rectTransform = canvas.transform as RectTransform; //也可以写成this.GetComponent<RectTransform>(),但是不建议;
void Update()
if (Input.GetMouseButtonDown(0))
Vector2 pos;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, Input.mousePosition, canvas.worldCamera, out pos))
rectTransform.anchoredPosition = pos;
Debug.Log(pos);
新建场景,在场景中拖一个画布(Canvas),然后随便找个地方挂上这个脚本就好了。
1
RectTransformUtility:矩阵变换工具
RectTransformUtility.ScreenPointToLocalPointInRectangle 从屏幕点到矩形内的本地点
Parameters 参数
rect The RectTransform to find a point inside.
cam The camera associated with the screen space position.
screenPoint Screen space position.
localPoint Point in local space of the rect transform.
Returns
bool Returns true if the plane of the RectTransform is hit, regardless of whether the point is inside the rectangle.
Description 描述
Transform a screen space point to a position in the local space of a RectTransform that is on the plane of its rectangle.
屏幕空间点转换为矩形变换内部的本地位置,该点在它的矩形平面上。
The cam parameter should be the camera associated with the screen point. For a RectTransform in a Canvas set to Screen Space - Overlay mode, the cam parameter should be null.
该cam 参数应该是该相机关联的屏幕点。对于在画布上的矩形变换设置该屏幕空间为-Overlay模式,cam 参数应该为空。
When ScreenPointToLocalPointInRectangle is used from within an event handler that provides a PointerEventData object, the correct camera can be obtained by using PointerEventData.enterEventData (for hover functionality) or PointerEventData.pressEventCamera (for click functionality). This will automatically use the correct camera (or null) for the given event.
当ScreenPointToLocalPointInRectangle从事件处理器内部提供一个PointerEventData对象被使用时,相机可以通过使用PointerEventData.enterEventData(为悬停功能)或者 PointerEventData.pressEventCamera(为单击功能)被获取。该函数将会自动对指定事件使用正确的相机(或者空)。
RectTransform矩形变换
RectTransform.anchoredPosition 锚点位置
The position of the pivot of this RectTransform relative to the anchor reference point.
该矩形变换相对于锚点参考点的中心点位置。
The anchor reference point is where the anchors are. If the anchors are not together, the four anchor positions are interpolated according to the pivot placement.
锚点参考点是锚点的位置。如果锚点不在一起,四个锚点的位置是根据布置的中心点的位置插值替换的。追问
兄弟你这个并不能实现我想要的功能啊,你这个只是获取了鼠标在画布上的投影点。我想知道怎么对画布上的ui对象做射线投射返回碰撞对象
Unity UGUI怎么样获得UI在屏幕上的位置坐标
直接用WorldToScreenPoint方法
[csharp] view plain copy
public Camera mycamera;//要转化到的目的摄像机,通常canvas在这个摄像机下(即canvas的render mode设置为这个摄像机)
Image kongjian;//自己要获取屏幕坐标的控件,可以是image,也可以是button等等
float x=mycamera.WorldToScreenPoint(kongjian.transform.position).x;
float y=mycamera.WorldToScreenPoint(kongjian.transform.position).y;
//x,y即为控件在屏幕的坐标camera.WorldToScreenPoint()方法返回的是一个position类型 是vector3类型,camera为要转化到的目标摄像机,传入的参数为控件的世界坐标
以下会发现得到的值不尽如人意,原因在于,这些
GetComponent<RectTransform>().sizeDelta
或者GetComponent<RectTransform>().rect.size
GetComponent<RectTransform>().sizeDelta
或者GetComponent<RectTransform>().rect.size
方法得到的宽高受到(相对于父物体)锚点的影响,所以楼主自行测试一下就会得到自己想要的答案.
参考技术A
using UnityEngine;using System.Collections;
using UnityEngine.EverySystem;
public class NewBehaviourScript : MonoBehaviour
public Canvas canvas;
public RectTransform rectTransform;
void Start()
rectTransform=transform as RectTransform; //也可以写成this.GetComponent <RectTransform>(),但是不建议;
canvas=GameObjcet.Find("Canvas").GetComponent<Canvas>();
void Update()
Vector2 pos;
if(RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transf
orm as RectTransform, Input.mousePosition, canvas.worldCamera, out pos))
rectTransform.anchoredPosition = pos;
Debug.Log(pos);
以上是关于unity UGUI如何获取鼠标指针所在位置的UI对象的主要内容,如果未能解决你的问题,请参考以下文章