User interface 检测GUI纹理上的触摸
我有2个gui纹理 根据屏幕的宽度和高度,我把它保存在gui中 一个用于操纵杆,另一个用于射手 现在触摸射击游戏杆,移动到特定的部分 我使用了rect.ContainsUser 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
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:TypeUnityEngine.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)