我有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坐标不同。如何解决这个问题。任何人都可以建议任何其他好的方法
答案 0 :(得分:1)
您可以尝试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;
}
答案 1 :(得分:0)
对代码进行一些调试会带来一些问题。
假设屏幕分辨率为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
变量以从屏幕的左上角开始。