2016-04-16 1 views
1

У меня возникли проблемы с сенсорным управлением.Touch and Drag Issues Unity 2D Game

1) Моя игра 2D. Когда я проверил это на своем устройстве Android, 2D-изображение почти исчезнет при переходе от правого касания к левому касанию. Объект рассматривается как 3D-объект. Я думаю, что это имеет какое-то отношение к пространству Z.

2) Как я мог заставить персонаж двигаться, как в этом видео, - https://www.youtube.com/watch?v=5hckY75j_lg. В этом случае любое место, которое вы касаетесь экрана, захватывает игрока (голову) и перемещается точно так же, как это делает палец.

Любая помощь была бы оценена!

Вот мой код:

общественного класса TouchLogic: MonoBehaviour {

public static int currTouch = 0; 
private Ray ray; 
private RaycastHit rayHitInfo = new RaycastHit(); 
[HideInInspector ] 
public int touch2Watch=64; 

// Update is called once per frame 
void Update() { 
    if (Input.touches.Length <= 0) { 
    } else { 
     for (int i = 0; i < Input.touchCount; i++) { 
      currTouch = i; 
      if (this.GetComponent <GUITexture >() != null && (this.GetComponent <GUITexture >().HitTest (Input.GetTouch (i).position))) { 
       if (Input.GetTouch (i).phase == TouchPhase.Began) { 
        this.SendMessage ("OnTouchBegan"); 
       } 
       if (Input.GetTouch (i).phase == TouchPhase.Ended) { 
        this.SendMessage ("OnTouchEnded"); 
       }  
       if (Input.GetTouch (i).phase == TouchPhase.Moved) { 
        this.SendMessage ("OnTouchMoved"); 
       } 
      } 
      ray = Camera.main.ScreenPointToRay (Input.GetTouch (i).position); 
      switch (Input.GetTouch (i).phase) { 
      case TouchPhase .Began: 
       this.SendMessage ("OnTouchBeganAnywhere"); 
       if (Physics.Raycast (ray, out rayHitInfo)) 
        rayHitInfo.transform.gameObject.SendMessage ("OnTouchBegan2D"); 
       break; 
      case TouchPhase .Ended : 
       this.SendMessage ("OnTouchEndedAnywhere"); 
       if (Physics.Raycast (ray, out rayHitInfo)) 
        rayHitInfo.transform.gameObject.SendMessage ("OnTouchEnded2D"); 
       break; 
      case TouchPhase .Moved : 
       this.SendMessage ("OnTouchMovedAnywhere"); 
       if (Physics.Raycast (ray, out rayHitInfo)) 
        rayHitInfo.transform.gameObject.SendMessage ("OnTouchMoved2D"); 
       break; 
      case TouchPhase .Stationary : 
       this.SendMessage ("OnTouchStayedAnywhere"); 
       if (Physics.Raycast (ray, out rayHitInfo)) 
        rayHitInfo.transform.gameObject.SendMessage ("OnTouchStayed2D"); 
       break; 
      } 
     } 
    } 
} 

}

общественного класса FollowTouch: TouchLogic {

public float speed=1f; 
private Vector3 finger; 
private Transform myTrans, camTrans; 
void Start() { 
    myTrans = this.transform; 
    camTrans = Camera.main.transform; 
} 
void LookAtFinger(){ 
    Vector3 tempTouch=new Vector3 (Input.GetTouch (touch2Watch).position .x,Input.GetTouch (touch2Watch).position .y, 
     camTrans .position.y-myTrans .position .y); 
    finger = Camera.main.ScreenToWorldPoint (tempTouch); 
    myTrans.LookAt (finger); 
    myTrans.Translate (Vector3.forward * speed * Time.deltaTime); 
} 
void OnTouchMovedAnywhere(){ 
    LookAtFinger(); 
} 
void OnTouchStayedAnywhere(){ 
    LookAtFinger(); 
} 
void OnTouchBeganAnywhere(){ 
    touch2Watch = TouchLogic.currTouch; 
} 

ответ

0

Если вы делаете 2d игры вы необходимо использовать

Vector3.up 

вместо

Vector3.forward 

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

  • Нет связанных вопросов^_^