2016-04-16 8 views
1

Ich habe ein paar Probleme mit meiner Touch-Steuerung.Berühren und ziehen Sie Probleme Unity 2D Spiel

1) Mein Spiel ist 2D. Wenn ich dies auf meinem Android-Gerät getestet habe, wird das 2D-Bild fast verschwinden, wenn man von rechts nach links wechselt. Das Objekt wird als 3D-Objekt behandelt. Ich denke, das hat etwas mit dem Z-Raum zu tun.

2) Wie kann ich den Charakter bewegen wie in diesem Video - https://www.youtube.com/watch?v=5hckY75j_lg. In diesem Fall ergreift der Bildschirm den Spieler (Kopf) und bewegt sich genau so wie der Finger.

Jede Hilfe wäre willkommen!

Hier ist mein Code:

public class 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; 
      } 
     } 
    } 
} 

}

public class 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; 
} 

Antwort

0

Wenn Sie 2d Spiel machen Sie muss

verwenden
Vector3.up 

statt

Vector3.forward