Jump to content
Unity Insider Forum

Maxe

Members
  • Posts

    8
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Maxe's Achievements

Newbie

Newbie (1/3)

0

Reputation

  1. Vielen Dank, das hat mir wirklich sehr geholfen! Da wäre ich selbst wohl nie hingekommen. Jetzt macht ein weiterer kleiner Teil des Codes, was er machen soll. :-)
  2. Danke für deine Antwort, die magnitude hat geholfen. Aber eine neue Frage stellt sich mir: Vector3 _forwardForce = transform.forward * _acceleration * Input.GetAxis("Vertical"); _forwardForce = _forwardForce * Time.deltaTime * _rb.mass; _rb.AddForce(_forwardForce); Damit bewegt sich am Ende der _rb. Das ganze ist ein "Fahrzeug", dass sich bei negativer Eingabe vorwärts bewegt, bei positiver Eingabe rückwärtige Kräfte einsetzen (also bremst). Wie zu erwarten, geht der Übergang in den "Rückwärtsgang" fließend, sobald der _rb zum stehen gekommen ist und weiterhin eine positive Eingabe erfolgt. Wie könnte man verhindern, dass ab dem Stillstand weitere positive Eingaben einen Effekt haben (nur negative, für die erneute Fahrt vorwärts)? Ich habe als Bool "_stehend" definiert: if(_rb.velocity.magnitude == 0) { _stehend = true; } Aber das hat nicht funktioniert, wenn if (_stehend == true) {siehe ganz oben} else if (_stehend == false) {return}. Das hat natürlich nicht funktioniert, aus verschiedenen Gründen, schon weil sobald sich der _rb ein wenig bewegt sich nichts mehr abspielt. Ich wollte den Denkfehler trotzdem zugeben :-) Wie könnte man das Problem lösen?
  3. Hmm, irgendwie komme ich nicht weiter. Programmieren scheint nicht mein Talent zu sein, fällt mir doch sehr schwer. Gibt es irgendwo einen Discord, wo man seine Fragen stellen kann? Ich will hier nicht zu sehr nerven. Das neue Input System finde ich noch schwieriger, da man dazu kaum Tutorials findet und jeder eine andere Art hat die Scripts zu schreiben (was beim Programmieren wohl so üblich ist). Ich hänge weiter an der "Bremsfunktion" fest. So sieht die Bewegung aus: void Move() { if (Input.GetKey(KeyCode.W) || Input.GetButton("Fire1")) //Beschleunigen { Vector3 forceToAdd = transform.forward; forceToAdd.y = 0; _rb.AddForce(forceToAdd * _speed * 10); } else if (Input.GetKey(KeyCode.S) || Input.GetButton("Fire3")) //Rückwärts { Vector3 forceToAdd = -transform.forward; forceToAdd.y = 0; _rb.AddForce(forceToAdd * _speed * 10); } if (Input.GetKey(KeyCode.Space) && ??? >= 0) //Bremse { Vector3 forceToAdd = transform.forward; forceToAdd.y = 0; _rb.AddForce(forceToAdd * _speed * _brakeForce); } Vector3 locVel = transform.InverseTransformDirection(_rb.velocity); locVel = new Vector3(0, locVel.y, locVel.z); _rb.velocity = new Vector3(transform.TransformDirection(locVel).x, _rb.velocity.y, transform.TransformDirection(locVel).z); } Meine Idee war, Bei //Bremse (die drei ???) einzufügen, dass nur gebremst wird, wenn die RigidBody velocity größer null ist. Nur wie kann ich die aktuelle Beschleunigung bestimmen oder "abgreifen"? Kann ich irgendwie das Ergebnis von "_rb.AddForce" (_speed * 10f) als "derzeitigeGeschwindigkeit" definieren? So eine Funktion wäre sehr hilfreich.
  4. Ich möchte ein Fahrzeug beschleunigen, aber nicht mit "Vertical", sondern mit einem Button. So funktioniert es über "Vertical" gut: Vector3 _forwardForce = transform.forward * _acceleration * Input.GetAxis("Vertical"); Mit Button funktioniert es nicht: Vector3 _forwardForce = transform.forward * _acceleration + Input.GetButton("Jump"); Da "Input.GetButton" ein Bool ist, habe ich es mit + versucht, aber VisualStudio erklärt mir, dass das mit Vector3 trotzdem nicht kompatibel ist. Wie ist es zu erreichen, dass eine stetig ansteigende Beschleunigung bis zu einer maximalen Geschwindigkeit erreicht wird und wenn ich den Button (hier: "Jump") loslasse die Geschwindigkeit nicht sofort auf 0 sinkt, sondern wie eine Motorbremse langsam verzögert. Ich hatte gestern mehrere Stunden herumprobiert, leider habe ich meine fehlerhaften Codes jetzt nicht mehr, aber die will wahrscheinlich auch keiner sehen. :-) Jedenfalls habe ich mit "maxSpeed", "speed" usw. gearbeitet, das größte Problem war immer, dass die "speed" beim loslassen sofort auf 0 fiel.
  5. Ok, dann werde ich das bei Gelegenheit probieren, vielleicht hatte ich da nur etwas falsch verstanden. Am Anfang ist das alles etwas überwältigend. Welchen Vorteil hat die 2D-Physik gegenüber 3D-Physik. Wahrscheinlich ist es nicht ganz so rechenintensiv, schätze ich. Der 3D-Controler (Script) kommt bei mir langsam voran, 2D muss ich wieder bei null anfangen. Wenn ich meine Nerven frage sagen sie, dass ich jetzt gefälligst bei 3D bleiben soll und nicht schon wieder wechseln. Welche Pro`s gibt es? Vielen Dank übrigens für deine sehr hilfreichen Antworten und deine Zeit.
  6. Erstmal vielen Danke für deine Korrektur, so funktioniert es tatsächlich. Sorry, aber ich habe bisher kaum Ahnung von Scripten. Zu 2D: Ich hatte vor ein paar Tagen (seit dem ich mich mit Unity beschäftige) ein 2D Projekt angefangen. Dann ein Script (für die Bewegungen) benutzt und einen Rigidbody2D. Dann habe ich dem RB-2D ein 3D-Modell als Child unterschieben wollen, ging nicht. Wenn ich mich recht erinnere meinte Unity, dass im Script auf einen RB-2D bezuggenommen wird und das so nicht funktioniert. Muss in dem Script dann ein RB-3D angesprochen werden wenn man ein 3D-Modell nimmt oder kann man einen RB-2D einfach mit einem 3D-Modell verbinden?
  7. Ich habe jetzt so etwas unter LateUpdate eingefügt: Vector3 position = new Vector3(transform.position.x,transform.position.y,0); Aber das bewirkt leider gar nichts. :-) Zum Gameplay: Ich möchte ein 2D Spiel machen, aber mit 3D Objekten. Leider kommt mir dieses schreiben von Scripten dazwischen. Ich hatte dazu einen 2D-Controler mit Collider nachgebaut und habe dann ein 3D-Objekt eingesetzt, da meckerte Unity, dass sowas nicht geht. Also dachte ich, dass 3D-Objekte nur mit dem ganzen 3D-Zeugs (Collider3D etc.) funktioniert und habe an einem 3D-Controler-Script gebastelt, bei dem ich die "vertical" Bewegung deaktiviere und nur horizontale Bewegungen zulasse. Jetzt gibt es allerdings dieses Problem bei der Drehung.
  8. Ich habe einen Player (in einer 3D Umgebung) mit CharacterControler erstellt. Die Animationen sind über RootMotion. Soweit funktioniert es ganz gut. Wenn ich nun von links nach rechts laufe (egal ob x oder y Achse) wird der Player bei jeder Drehung (180°) ein klein wenig versetzt, er hält also nicht seine ursprüngliche Spur. Das hat zur Folge, dass bei 2D-Gameplay der Player nach kurzer Zeit im Hintergrund angekommen ist. Hatte irgendwer dieses Problem schon einmal und kann mir auf die Sprünge helfen, ich habe keine Ahnung woran das liegen kann. Sorry, bin Anfänger und leicht am Verzweifeln.
×
×
  • Create New...