检测触摸GUI纹理



我有2个gui纹理

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

一个用于操纵杆,另一个用于射击。

现在触摸射击操纵杆移动到特定的部分。

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坐标。怎样才能解决这个问题。有没有人能建议其他好的方法

您可以试试HitTest

function Update()
{
    for (var touch : Touch in Input.touches)
    {
        if (rect.Contains(touch.position))
        {
            // we are now in the guitexture 'rect'
            Debug.Log("rect touched");
            exit;
        }
    }
}

上面的代码用于触摸,正如你在问题中所描述的。然而,既然你标记了mouse,我不确定你是使用鼠标还是触摸。

所以,如果你用鼠标点击对象,你可以使用:

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是基于屏幕的中心。

你必须调整Event.mousePosition以使用屏幕的中心作为原点,或者你必须调整rect变量以从屏幕的左上角开始

相关内容

  • 没有找到相关文章

最新更新