Kojote Geschrieben 1. Juli 2017 Melden Share Geschrieben 1. Juli 2017 Grüße! Bin gerade dabei mir eine Gestensteuerung zusammen zu basteln. Mit viel Googeln und probieren hab ich mir was zusammen gemurxt, zufrieden bin ich keineswegs. An sich sollen es nur zwei gesten sein. 1. Ein-Finger-System Rotation 2. Zwei-Finger-System Zoom Wenn ich es über Unity Remote 5 teste, funktioniert alles problemlos. Packe ich es jedoch in APK, fangen die Probleme an. Problem 1: Die Rotation ist extrem langsam gegenüber dem was er mir mit Remote 5 anzeigt. Problem 2: Zoom-In funktioniert zwar mit rucklern, jedoch Zoom-Out macht noch größere Probleme, er ruckelt extrem, schaltet immer wieder in Zoom-In zurück und nimmt die Geste kaum an. Auch hier das selbe, unter Unity Remote 5 funktioniert es, als APK eben nicht. Ich hoffe, ihr könnt mir mal wieder aus der Klemme helfen! public class KamerasteuerungI : MonoBehaviour { public Camera kamera; public GameObject kameraLinksRechts; public GameObject kameraObenUnten; private Vector2 touchDeltaPosition = new Vector2(0, 0); private Vector2 ersteDistanz = new Vector2(0, 0); private Vector2 zweiteDistanz = new Vector2(0, 0); public int kameraGeschwindigkeit = 2; public float minScale = 2.0f; public float maxScale = 5.0f; public float minPinchGeschwindigkeit = 2.0f; public float varianceInDistanz = 5.0f; private float touchDelta = 0.0f; private float geschwindigkeitTouch0 = 0.0f; private float geschwindigkeitTouch1 = 0.0f; void Update() { if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved) { touchDeltaPosition = Input.GetTouch(0).deltaPosition; kameraObenUnten.transform.Rotate(-touchDeltaPosition.y * Time.deltaTime * kameraGeschwindigkeit, 0, 0); kameraLinksRechts.transform.Rotate(0, -touchDeltaPosition.x * Time.deltaTime * kameraGeschwindigkeit, 0); } if (Input.touchCount == 2 && Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved) { ersteDistanz = Input.GetTouch(0).position - Input.GetTouch(1).position; // Aktueller Abstand zwischen den Finger Berührungen zweiteDistanz = ((Input.GetTouch(0).position - Input.GetTouch(0).deltaPosition) - (Input.GetTouch(1).position - Input.GetTouch(1).deltaPosition)); // Unterschied zu den früheren Berührungen mit Delta-Positionen touchDelta = ersteDistanz.magnitude - zweiteDistanz.magnitude; Debug.Log(geschwindigkeitTouch0 + " " + geschwindigkeitTouch1); geschwindigkeitTouch0 = Input.GetTouch(0).deltaPosition.magnitude / Input.GetTouch(0).deltaTime; geschwindigkeitTouch1 = Input.GetTouch(1).deltaPosition.magnitude / Input.GetTouch(1).deltaTime; if ((touchDelta + varianceInDistanz < 0) && (geschwindigkeitTouch0 > minPinchGeschwindigkeit) && (geschwindigkeitTouch1 > minPinchGeschwindigkeit)) { kamera.fieldOfView = Mathf.Clamp(kamera.fieldOfView + (1 * kameraGeschwindigkeit), 15, 90); } if ((touchDelta + varianceInDistanz > 0) && (geschwindigkeitTouch0 > minPinchGeschwindigkeit) && (geschwindigkeitTouch1 > minPinchGeschwindigkeit)) { kamera.fieldOfView = Mathf.Clamp(kamera.fieldOfView - (1 * kameraGeschwindigkeit), 15, 90); } } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 2. Juli 2017 Autor Melden Share Geschrieben 2. Juli 2017 Mittlerweile bin ich soweit: public class KamerasteuerungI : MonoBehaviour { public Camera kamera; public GameObject kameraLinksRechts; public GameObject kameraObenUnten; private Vector2 touchDeltaPosition = new Vector2(0, 0); private Vector2 ersteDistanz = new Vector2(0, 0); private Vector2 zweiteDistanz = new Vector2(0, 0); public int kameraDrehGeschwindigkeit = 6; public int kameraZoomGeschwindigkeit = 8; public float minScale = 2.0f; public float maxScale = 5.0f; public float minPinchGeschwindigkeit = 2.0f; public float varianceInDistanz = 5.0f; private float touchDelta = 0.0f; private float geschwindigkeitTouch0 = 0.0f; private float geschwindigkeitTouch1 = 0.0f; void Update() { if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved) { touchDeltaPosition = Input.GetTouch(0).deltaPosition; kameraObenUnten.transform.Rotate(-touchDeltaPosition.y * kameraDrehGeschwindigkeit, 0, 0); kameraLinksRechts.transform.Rotate(0, -touchDeltaPosition.x * kameraDrehGeschwindigkeit, 0); } else if (Input.touchCount == 2 && Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved) { ersteDistanz = Input.GetTouch(0).position - Input.GetTouch(1).position; // Aktueller Abstand zwischen den Finger Berührungen zweiteDistanz = ((Input.GetTouch(0).position - Input.GetTouch(0).deltaPosition) - (Input.GetTouch(1).position - Input.GetTouch(1).deltaPosition)); // Unterschied zu den früheren Berührungen mit Delta-Positionen touchDelta = ersteDistanz.magnitude - zweiteDistanz.magnitude; geschwindigkeitTouch0 = Input.GetTouch(0).deltaPosition.magnitude / Input.GetTouch(0).deltaTime; geschwindigkeitTouch1 = Input.GetTouch(1).deltaPosition.magnitude / Input.GetTouch(1).deltaTime; Debug.Log(kamera.orthographicSize); if ((touchDelta + varianceInDistanz < 0) && (geschwindigkeitTouch0 > minPinchGeschwindigkeit) && (geschwindigkeitTouch1 > minPinchGeschwindigkeit)) { // Zoom OUT kamera.orthographicSize = Mathf.Clamp(kamera.orthographicSize + (Time.deltaTime * kameraZoomGeschwindigkeit), 0.1f, 179.9f); } else if ((touchDelta + varianceInDistanz > 0) && (geschwindigkeitTouch0 > minPinchGeschwindigkeit) && (geschwindigkeitTouch1 > minPinchGeschwindigkeit)) { // Zoom IN kamera.orthographicSize = Mathf.Clamp(kamera.orthographicSize - (Time.deltaTime * kameraZoomGeschwindigkeit), 0.1f, 179.9f); } } } } Drehen an sich funktioniert nun ganz gut, ohne stocken, muss ihm nur noch beibringen, dass er nur bis zu einem bestimmten Punkt drehen kann. Problem ist jedoch immer der Zoom, der springt hin und her wie er will. Er kommt immer wieder durch einander, ob Zoom-In oder Zoom-Out gerade ausgeführt wird. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 2. Juli 2017 Autor Melden Share Geschrieben 2. Juli 2017 Schön, wenn man Lösungen findet, die man selbst nicht versteht. Falls sich das wer erklären kann, bitte melden! Hab jetzt je den Zoom-In und Zoom-Out in eine While-Schleife gepackt und frage touchDelta ab. Was ich nicht verstehe, wenn er in der Schleife "gefangen" ist, woher bekommt er die veränderten touchDelta Werte? -------- EDIT: Zu früh gefreut, klappt doch net so ganz! -,-" public class KamerasteuerungI : MonoBehaviour { public Camera kamera; public GameObject kameraLinksRechts; public GameObject kameraObenUnten; private Vector2 touchDeltaPosition = new Vector2(0, 0); private Vector2 ersteDistanz = new Vector2(0, 0); private Vector2 zweiteDistanz = new Vector2(0, 0); public float kameraDrehGeschwindigkeit = 15.0f; public float kameraZoomGeschwindigkeit = 25.0f; public float minScale = 2.0f; public float maxScale = 5.0f; public float minPinchGeschwindigkeit = 2.0f; public float varianceInDistanz = 5.0f; private float touchDelta = 0.0f; private float geschwindigkeitTouch0 = 0.0f; private float geschwindigkeitTouch1 = 0.0f; void Update() { if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved) { touchDeltaPosition = Input.GetTouch(0).deltaPosition; kameraObenUnten.transform.Rotate(-touchDeltaPosition.y * kameraDrehGeschwindigkeit * Time.deltaTime, 0, 0); kameraLinksRechts.transform.Rotate(0, -touchDeltaPosition.x * kameraDrehGeschwindigkeit * Time.deltaTime, 0); } else if (Input.touchCount == 2 && Input.GetTouch(0).phase == TouchPhase.Moved && Input.GetTouch(1).phase == TouchPhase.Moved) { ersteDistanz = Input.GetTouch(0).position - Input.GetTouch(1).position; // Aktueller Abstand zwischen den Finger Berührungen zweiteDistanz = ((Input.GetTouch(0).position - Input.GetTouch(0).deltaPosition) - (Input.GetTouch(1).position - Input.GetTouch(1).deltaPosition)); // Unterschied zu den früheren Berührungen mit Delta-Positionen touchDelta = ersteDistanz.magnitude - zweiteDistanz.magnitude; geschwindigkeitTouch0 = Input.GetTouch(0).deltaPosition.magnitude / Input.GetTouch(0).deltaTime; geschwindigkeitTouch1 = Input.GetTouch(1).deltaPosition.magnitude / Input.GetTouch(1).deltaTime; if ((touchDelta + varianceInDistanz < 0) && (geschwindigkeitTouch0 > minPinchGeschwindigkeit) && (geschwindigkeitTouch1 > minPinchGeschwindigkeit)) { // Zoom OUT while (true) { if (touchDelta < 0 ) { Debug.Log(touchDelta); kamera.orthographicSize = Mathf.Clamp(kamera.orthographicSize + (Time.deltaTime * kameraZoomGeschwindigkeit), 3f, 45f); } break; } } else if ((touchDelta + varianceInDistanz > 0) && (geschwindigkeitTouch0 > minPinchGeschwindigkeit) && (geschwindigkeitTouch1 > minPinchGeschwindigkeit)) { // Zoom IN while (true) { if (touchDelta > 0) { Debug.Log(touchDelta); kamera.orthographicSize = Mathf.Clamp(kamera.orthographicSize - (Time.deltaTime * kameraZoomGeschwindigkeit), 3f, 45f); } break; } } } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Torigas Geschrieben 7. Juli 2017 Melden Share Geschrieben 7. Juli 2017 Wieso sollte man sowas in eine while(true) packen? Der springt sofort raus aus dem loop durch das break; Komischen Code hast du gefunden. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 9. Juli 2017 Autor Melden Share Geschrieben 9. Juli 2017 Stimmt hast Recht, macht ja keinen Sinn die Schliefe. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 10. Juli 2017 Melden Share Geschrieben 10. Juli 2017 Das Ding ist schon echt klasse. Irgendwie konnte ich nicht widerstehen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 10. Juli 2017 Melden Share Geschrieben 10. Juli 2017 Die Evolution der Programmierung rückwärts. Ich dachte schon unten wäre es falsch, aber der Code geht ja auf dem Bild noch weiter dann stimmt es wieder Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Torigas Geschrieben 11. Juli 2017 Melden Share Geschrieben 11. Juli 2017 Macht euch doch bitte nicht lustig. Passiert mal ^^ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 13. Juli 2017 Autor Melden Share Geschrieben 13. Juli 2017 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.