unity UGUI如何获取鼠标指针所在位置的UI对象

unity UGUI如何获取鼠标指针所在位置的UI对象,第1张

public class GetMousePos : MonoBehaviour

{

public Canvas canvas;//画布

private RectTransform rectTransform;//坐标

void Start()

{

canvas = GameObjectFind("Canvas")GetComponent<Canvas>();

rectTransform = canvastransform as RectTransform; //也可以写成thisGetComponent<RectTransform>(),但是不建议;

}

void Update()

{

if (InputGetMouseButtonDown(0))

{

Vector2 pos;

if (RectTransformUtilityScreenPointToLocalPointInRectangle(rectTransform, InputmousePosition, canvasworldCamera, out pos))

{

rectTransformanchoredPosition = pos;

DebugLog(pos);

}

}

}

}

新建场景,在场景中拖一个画布(Canvas),然后随便找个地方挂上这个脚本就好了。

1

RectTransformUtility:矩阵变换工具

RectTransformUtilityScreenPointToLocalPointInRectangle 从屏幕点到矩形内的本地点

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 PointerEventDataenterEventData (for hover functionality) or PointerEventDatapressEventCamera (for click functionality) This will automatically use the correct camera (or null) for the given event

当ScreenPointToLocalPointInRectangle从事件处理器内部提供一个PointerEventData对象被使用时,相机可以通过使用PointerEventDataenterEventData(为悬停功能)或者 PointerEventDatapressEventCamera(为单击功能)被获取。该函数将会自动对指定事件使用正确的相机(或者空)。

RectTransform矩形变换

RectTransformanchoredPosition 锚点位置

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

锚点参考点是锚点的位置。如果锚点不在一起,四个锚点的位置是根据布置的中心点的位置插值替换的。

var moveSpeed:int=5;//player移动速度

var player:Transform;//定义一个人物的Transform

private var endposition : Vector3;

function Start()

{

endposition = playertransformposition;

}

function Update ()

{

if(InputGetButtonUp("LeftMouse")){ //LeftMouse是在inputManager中设置的,左键值为mouse 0

PlayerMove();

}

var targetposition=playerTransformPoint(Vector3(0,488,-30));

transformposition=targetposition;//相机的目标位置,这两句代码的作用是让人物一直处于相机的视野下

if(endposition != playertransformposition){

playerposition=Vector3MoveTowards(playerposition,endposition,TimedeltaTimemoveSpeed);

}

}

function PlayerMove()

{

var cursorScreenPosition:Vector3=InputmousePosition;//鼠标在屏幕上的位置

var ray:Ray=CameramainScreenPointToRay(cursorScreenPosition);//在鼠标所在的屏幕位置发出一条射线(暂名该射线为x射线)

var hit:RaycastHit;

if(PhysicsRaycast(ray,hit)){

if(hitcollidergameObjecttag=="Terrain"){//设置地形Tag为Terrain

endposition = hitpoint;

}

}

}

using UnityEngine;

using SystemCollections;

public class test : MonoBehaviour {

//在场景中鼠标点击地面后,角色可以移动到目标位置

private Vector3 target;

private bool isOver = true;

public float speed;

void Start () {

}

void Update () {

if(InputGetMouseButtonDown(0))

{

print("MouseDown");

//1 获取鼠标点击位置

//创建射线;从摄像机发射一条经过鼠标当前位置的射线

Ray ray = CameramainScreenPointToRay(InputmousePosition);

//发射射线

RaycastHit hitInfo = new RaycastHit();

if (PhysicsRaycast(ray, out hitInfo))

{

//获取碰撞点的位置

if (hitInfocollidername == "Plane")

{

target = hitInfopoint;

targety = 05f;

isOver = false;

}

}

//RaycastHit[] hitAll = PhysicsRaycastAll(ray, 1000);

//foreach(RaycastHit hitInfo in hitAll)

//{

// print(hitInfocollidername);

// if (hitInfocollidername == "Plane")

// {

// target = hitInfopoint;

// targety = 05f;

// isOver = false;

// }

//}

}

//2 让角色移动到目标位置

MoveTo(target);

}

//让角色移动到目标位置

private void MoveTo(Vector3 tar)

{

if(!isOver)

{

Vector3 offSet = tar - transformposition;

transformposition += offSetnormalized speed TimedeltaTime;

if(Vector3Distance(tar, transformposition)<05f)

{

isOver = true;

transformposition = tar;

}

}

}

}

可能有点麻烦,用GetTouch你最先会获得点击状态(按下,按着,离开,移动,不再监控等),接着你得用if排除掉NGUI的按钮位置,再让他发射;

现在移动端 *** 作一般只是纯点击就是这个原因,有多种不同 *** 作会很麻烦。

如果要改成手机端,最好统一 *** 作方式,要按钮就不要有点击非按钮位置做某些其它 *** 作,不要按钮就进行屏幕分块,各个部分执行不同 *** 作,否则你会一直迷失在 *** 作方式上。

在unity中InputmousePosition是只读的,也就是不能通过这个方法给鼠标位置赋值。

Unity3D简介:

Unity3D是由Unity Technologies公司开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。 Unity类似于Director,Blender game engine,Virtools或Torque Game Builder等利用交互的图型化开发环境为首要方式的软件。其编辑器运行在Windows和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone 8和Android平台。也可以利用Unity web player 插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。

以上就是关于unity UGUI如何获取鼠标指针所在位置的UI对象全部的内容,包括:unity UGUI如何获取鼠标指针所在位置的UI对象、Unity3D 中如何同时获得鼠标点击和键盘按键、unity 点击按钮移动等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9678092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存