2013-03-18 6 views
0

У меня есть 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. Как можно исправить эту проблему. Кто-нибудь может предложить любой другой хороший метод.

ответ

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

Ошибка ошибки CS1061: тип 'UnityEngine.Rect 'не содержит определения для« HitTest », и не может быть найден метод расширения« HitTest »типа« UnityEngine.Rect »(вам не хватает директивы использования или сборки ссылка?) – Sona

+0

Ой извините, что работает только с элементами GUI. Вместо этого вы можете попробовать 'rect.Contains (touch.position)'! – Joetjah

+0

Я отредактировал свой ответ, чтобы отразить это. – Joetjah

0

Некоторые отладки кода выявляет несколько проблем.

Say разрешение экрана 800x600px:

xx = 800 - 800/12 
    = 733.3333333333333 
yy = 600 - 600/8 
    = 525 
lb = 800/10 
    = 80 
rect = (-366.665, -262.5, 80, 80) 

Почему lb определяется шириной экрана, разделенной на десять?

Теперь проблема заключается в том, что Event.mousePosition начинается в верхнем левом углу экрана, а GUITexture.pixelInset находится в центре экрана.

Вам необходимо либо отрегулировать Event.mousePosition, чтобы использовать центр экрана в качестве источника, либо вам нужно будет отрегулировать переменную rect, чтобы начать в верхнем левом углу экрана.

Смежные вопросы