User interface 检测GUI纹理上的触摸

User interface 检测GUI纹理上的触摸,user-interface,mouse,unity3d,User Interface,Mouse,Unity3d,我有2个gui纹理 根据屏幕的宽度和高度,我把它保存在gui中 一个用于操纵杆,另一个用于射手 现在触摸射击游戏杆,移动到特定的部分 我使用了rect.Contains void Start () { xx = Screen.width - Screen.width/12; yy = Screen.height - Screen.height/8; lb = Screen.width/10; rect = new Rect(-xx/2, -yy/2, lb, lb); shooter.pixe

我有2个gui纹理

根据屏幕的宽度和高度,我把它保存在gui中

一个用于操纵杆,另一个用于射手

现在触摸射击游戏杆,移动到特定的部分

我使用了rect.Contains

void Start () {
xx = Screen.width - Screen.width/12;
yy = Screen.height - Screen.height/8; 
lb = Screen.width/10;
rect = new Rect(-xx/2, -yy/2, lb, lb);
shooter.pixelInset  = rect;       
shooter.enabled = false;      
}

void OnGUI(){
if(characterScript.playbool){
   shooter.enabled = true;
} 
if (rect.Contains(Event.current.mousePosition)){
shootBool = true;
print("shoot");
alert.text="shoot";
}   
}
对我来说工作不正常。认为空间坐标不同于gui坐标。如何解决此问题。是否有人可以建议其他好方法

您可以尝试

如您在问题中所述,上述代码用于触摸。但是,由于您标记了
鼠标
,我不确定您是否使用鼠标或触摸屏

因此,如果使用鼠标单击对象,可以使用:

if (rect.Contains(Input.mousePosition) && Input.GetMouseButtonDown(0))
{
    Debug.Log("rect clicked");
    exit;
}

对代码进行一些调试会带来一些问题

假设屏幕分辨率为800x600px:

xx = 800 - 800 / 12
   = 733.3333333333333
yy = 600 - 600 / 8
   = 525
lb = 800 / 10
   = 80
rect = (-366.665, -262.5, 80, 80)
为什么
lb
由屏幕宽度除以10决定

现在问题的核心是
Event.mousePosition
从屏幕的左上角开始,而
GUITexture.pixelInset
位于屏幕的中心


您必须调整
事件。鼠标位置
以使用屏幕中心作为原点,或者您必须调整
rect
变量以从屏幕左上角开始。

获取错误CS1061:Type
UnityEngine.rect'不包含
HitTest'的定义,并且找不到类型为
UnityEngine.rect'的扩展方法
HitTest'(您是否缺少using指令或程序集引用?)
相反!我有两个按钮。一个用于shooter,另一个用于操纵杆。因此,对于这两个按钮,我都可以这样做。将上面的更新代码放在一个类中,并将其附加到按钮上。使用上面的代码进行触摸,下面的代码进行鼠标单击。
xx = 800 - 800 / 12
   = 733.3333333333333
yy = 600 - 600 / 8
   = 525
lb = 800 / 10
   = 80
rect = (-366.665, -262.5, 80, 80)