我有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
变量以从屏幕的左上角开始