2015-04-28 3 views
0

У меня есть система с несколькими касаниями, которая работает правильно с объектами с collider2d (используйте их как кнопки), и я могу переместить плеер на свой Android-телефон. Но когда я использую изображение из системы холста UI и добавляю этот код к изображению, он ничего не обнаруживает?! вот мой код:Единственное сенсорное управление с изображением пользовательского интерфейса

using UnityEngine; 
using System.Collections; 

public class Jump : MonoBehaviour { 

public float jumpForce; 
private GameObject hero; 

void Start() { 
    hero = GameObject.Find("hero"); 
} 

void Update() { 

    if (Input.touchCount > 0) 
    { 
     Touch[] myTouches = Input.touches; 
     for(int i = 0; i < Input.touchCount; i++) 
     { 
      if(Input.GetTouch(i).phase == TouchPhase.Began) 
      { 
       CheckTouch(Input.GetTouch(i).position, "began"); 
      } 
      else if (Input.GetTouch(i).phase == TouchPhase.Ended) 
      { 
       CheckTouch(Input.GetTouch(i).position, "ended"); 
      } 
     } 

    } 
} 

void CheckTouch (Vector3 pos, string phase) 
{ 

    Vector3 wp = Camera.main.ScreenToWorldPoint (pos); 
    Vector2 touchPos = new Vector2 (wp.x, wp.y); 

    Collider2D hit = Physics2D.OverlapPoint(touchPos); 

    if(hit.gameObject.name == "JumpButton" && hit && phase == "began") 
    { 
     hero.rigidbody2D.AddForce(new Vector2(0f, jumpForce)); //Add jump force to hero 
     audio.Play(); 
    } 
} 
} 

любая помощь?

ответ

1

Для графических элементов в полотне вам нужно использовать GraphicRaycaster вместо Physics2D используя UnityEngine.UI

1

Вам не нужно больше работать с прикосновениями самостоятельно. Просто реализуйте интерфейс IPointerClickHandler и убедитесь, что у вас есть EventSystem и соответствующий raycaster, присутствующий в сцене.

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