Rasmusen Geschrieben 5. Oktober 2016 Melden Share Geschrieben 5. Oktober 2016 Hallo , ich mache gerade ein Jump and Run , aber ich habe ein Problem . Wenn mein kleiner Fuchs beim laufen von einer Klippe fällt, dann rotiert er und landet je nach tiefe auf dem Rücken. Ich kann aber die Z Axe nicht freezen weil er schon auch ein bischen wenigstens nach oben und unten laufen sollte auf dem Ground . Damit meine ich das er wenn er Bergauf geht dann auch ruhig sich dem Boden entsprechend rotieren sollte. Aber er sollte einfach limitiert rotieren dürfen. Hat da jemand ein Codebeispiel für mich ? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Felix K. Geschrieben 5. Oktober 2016 Melden Share Geschrieben 5. Oktober 2016 Hi. Rotiert der Fuchs physikalisch beim bergauf laufen? Wie ist das GameObject Fuchs aufgebaut? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Rasmusen Geschrieben 5. Oktober 2016 Autor Melden Share Geschrieben 5. Oktober 2016 Ja also bisher dreht er sich gemäß dem Ground auch korrekt . Also wenn der kleine Fuchs Bergauf läuft dreht er sich so das vordere und hintere Beinchen den Boden korrekt berühren. Es wurde ein Rigidbody 2D und ein Poly Collider 2D hinzugefügt. Und ein Script welches den Fuchs nach vorne bewegt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 5. Oktober 2016 Melden Share Geschrieben 5. Oktober 2016 Wenn du weißt, welche min und max Winkel da sein dürfen, dann kannst du Mathf.Clamp dafür prima nutzen. float myZ = Mathf.Clamp(transform.eulerAngles.z,-40f,40f); transform.eulerAngles= new Vector3(transform.eulerAngles.x,transform.eulerAngles.y,myZ); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Rasmusen Geschrieben 5. Oktober 2016 Autor Melden Share Geschrieben 5. Oktober 2016 OK danke das hört sich gut an , aber wie weise ich das meinem vorhandenen Rigidbody2D zu ? Weil mit dem Code den Du mir gepostet hast besteht ja noch kein zusammenhang mit meinem RigidBody2D. Ja mag sein das das eine Noobfrage ist aber ich habe noch nicht sehr viel erfahrung wie ich gerade merke. Scheinbar ist bringt es nicht viel das ich dauernd Tutorials mache weil ich Grundfunktionen nicht verstehe. Das ist echt voll Schade . Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
TobLine Geschrieben 5. Oktober 2016 Melden Share Geschrieben 5. Oktober 2016 Das bezieht sich nicht auf deinen rigidbody sonder auf die Transform-Komponente. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Rasmusen Geschrieben 5. Oktober 2016 Autor Melden Share Geschrieben 5. Oktober 2016 Ok , aber es zeigt keine Wirkung obwohl kein Error vorliegt. Folgendes Script habe ich auf dem Player liegen : using UnityEngine; using UnityEngine.UI; using System.Collections; public class PlayerJump : MonoBehaviour { public GameObject turretRotateObj; public float maxTowerRotation = 130.0f; public float angle = 45.0f; [serializeField] private AudioClip jumpClip; private float jumpForce = 8f, forwardForce = 0f; private Rigidbody2D myBody; private bool canJump; private Button jumpBtn; // Use this for initialization void Awake () { myBody = GetComponent<Rigidbody2D>(); jumpBtn = GameObject.Find("Jump Button").GetComponent<Button>(); ; jumpBtn.onClick.AddListener(() => Jump()); } // Update is called once per frame void Update () { float myZ = Mathf.Clamp(transform.eulerAngles.z, -1f, 1f); transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, myZ); if (Mathf.Abs(myBody.velocity.y) <= 0) { canJump = true; } } void OnCollisionEnter2D(Collision2D target) { if (target.gameObject.tag == "Obstacle") { canJump = true; } } public void Jump() { if (canJump) { if (transform.position.y > -2.8) { canJump = false; } if (transform.position.x < 0) { forwardForce = 0.7f; } else { forwardForce = 0.7f; } myBody.velocity = new Vector2(forwardForce, jumpForce); } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 5. Oktober 2016 Melden Share Geschrieben 5. Oktober 2016 Ach so, du machst das ja in 2D. Da bietet es sich wahrscheinlich sogar an, den Körper über den RB zu steuern, da er ja in der Rotation auch nur die Z Achse hat. also nutzt du in der Mathf.Clamp einfach myBody.Rotation. Man kann in 2D und auch in 3D die Position und Rotation auch über den RB steuern, anstatt über Transform (Wenn ein RB da ist). Es ist sogar etwas besser, da sich bei Manipulation vom Transform die Physik ersteinmal drauf einstellen muss und etwas Performance kostet, was beim direkten manipulieren vom RB nicht passiert. Trotzdem hast du ja noch einen Drehimpuls, den du über angularVelocity auf 0 setzen kannst, sobald Min oder Max erreicht wurde. In der Regel reicht aber ein hoher Dragwert und schon bremst der RB ganz stark die eigene Rotation ab. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Rasmusen Geschrieben 5. Oktober 2016 Autor Melden Share Geschrieben 5. Oktober 2016 Oh halt , war wohl das falsche Script wo ich es implementiert habe. Ich teste noch aber in dem PlayerMovement Script scheint es wohl zu funktionieren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Rasmusen Geschrieben 5. Oktober 2016 Autor Melden Share Geschrieben 5. Oktober 2016 Ok hab nun ein bischen dran rum probiert und die Anhaltspunkte sind schon mal gut und damit kann ich auch weiter machen. Bei dem Scriptcode Malzbie verhält es sich so das der Fuchs den Berghoch läuft und auch korrekt rotiert. Aber sobald die Z Achse in den Minus Bereich geht macht der Fuchs dauerhaft so Kopf nach oben Bewegungen und Stuttert vor sich hin. Also Berg runter läuft er dann nicht mehr korrekt . Ich werd aber die Sache nun noch in eine Schleife packen damit ich das besser Kontrollieren kann. Jedenfalls hat das einen rießen Lerneffekt und danke euch. Achso und Malzbie ich hab dein Script auf Rigidbody2d geändert ... hoffentlich hatte ich das richtig verstanden : float myZ = Mathf.Clamp(GetComponent<Rigidbody2D>().transform.eulerAngles.z, -20f, 60f); GetComponent<Rigidbody2D>().transform.eulerAngles = new Vector3(GetComponent<Rigidbody2D>().transform.eulerAngles.x, GetComponent<Rigidbody2D>().transform.eulerAngles.y, myZ); 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.