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