Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
public class Spieler : MonoBehaviour { // Bewegungsgeschwindigkeit public float bewegungsGeschwindigkeit = 12f; // horizontale Rotationsgeschwindigkeit public float rotationsGeschwindigkeitHorizontal = 1.7f; // Sprunggeschwindigkeit private float vertikaleSprungBeschleunigung = 0; // Sprunggeschwindigkeit public float sprungGeschwindigkeit = 15.0f; // Schwerkraft public float schwerkraft = 30.0f; // Referenz zum CharacterController private CharacterController controller; // Bewegungsbeschleuningung private Vector3 bewegungsBeschleunigung = Vector3.zero; // Kopf des Spielers public Transform spielerKopf; // vertikale Rotationsgeschwindigkeit private float rotationsGeschwindigkeitVertikal = 0.5f; // maximale Kopfdrehung vertikal public float maxKopfdrehungvertikal = 20.0f; // minimale Kopfdrehung vertikal public float minKopfdrehungvertikal = -20.0f; // aktuelle Kopfdrehung vertikal private float aktuelleKopfdrehungVertikal = 0; // Prüft, ob nochmal gesprungen werden kann bool kannDoppeltSpringen = false; // Wird nur beim Start des Skriptes aufgerufen private void Start() { // Referenz zum CharacterController controller = GetComponent<CharacterController>(); } // Wird bei jedem Frame aufgerufen private void Update() { // Rotationsinputs Vector2 rotationsVektor = new Vector2(Input.GetAxis("RightJoystickHorizontal"), -Input.GetAxis("RightJoystickVertical")); // Bodenprüfung if (controller.isGrounded) { // Spieler bewegen bewegungsBeschleunigung = transform.TransformDirection(new Vector3(Input.GetAxisRaw("LeftJoystickHorizontal"), 0, -Input.GetAxisRaw("LeftJoystickVertical"))) * bewegungsGeschwindigkeit; // Spieler soll sich in der Luft nicht bewegen können vertikaleSprungBeschleunigung = 0; // Springen if (Input.GetButtonDown("XButton")) { // Sprunggeschwindigkeit vertikaleSprungBeschleunigung = sprungGeschwindigkeit; // Kann nochmal springen kannDoppeltSpringen = true; } } // Spieler in der Luft else if (!controller.isGrounded) { // Doppelsprung if (Input.GetButtonDown("XButton") && kannDoppeltSpringen) { // Sprunggeschwindigkeit vertikaleSprungBeschleunigung = sprungGeschwindigkeit; // Kann nicht mehr doppelt springen kannDoppeltSpringen = false; } } // Kopf vertikal rotieren aktuelleKopfdrehungVertikal = Mathf.Clamp(aktuelleKopfdrehungVertikal + rotationsVektor.y * rotationsGeschwindigkeitVertikal, minKopfdrehungvertikal, maxKopfdrehungvertikal); spielerKopf.localRotation = Quaternion.identity; spielerKopf.Rotate(Vector3.left, aktuelleKopfdrehungVertikal); // Schwerkraft in der Bewegung vertikaleSprungBeschleunigung -= schwerkraft * Time.deltaTime; // Spieler drehen transform.Rotate(Vector3.up, rotationsVektor.x * rotationsGeschwindigkeitHorizontal); // Bewegung und vertikale Bewegung zusammenführen Vector3 beschleunigung = bewegungsBeschleunigung + vertikaleSprungBeschleunigung * Vector3.up; // Spieler Bewegen controller.Move(beschleunigung * Time.deltaTime); } } |
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
public float bewegungsGeschwindigkeit = 10; public GameObject richtungsObjekt; void Update() { if (Input.GetKey(KeyCode.A)) { Bewegen(Vector3.left); } if (Input.GetKey(KeyCode.D)) { Bewegen(Vector3.right); } if (Input.GetKey(KeyCode.W)) { Bewegen(Vector3.forward); } if (Input.GetKey(KeyCode.S)) { Bewegen(Vector3.back); } } void Bewegen(Vector3 richtung) { Vector3 neueRichtung = Quaternion.LookRotation(Camera.main.transform.position - transform.position).eulerAngles; neueRichtung.x = 0; neueRichtung.z = 0; richtungsObjekt.transform.rotation = Quaternion.Euler(neueRichtung); transform.Translate(-richtung * Time.deltaTime * bewegungsGeschwindigkeit, richtungsObjekt.transform); Quaternion neueRotation = Quaternion.LookRotation(-richtung); transform.rotation = Quaternion.Slerp(transform.rotation, neueRotation * richtungsObjekt.transform.rotation, Time.deltaTime * 8); } |
Werbeanzeige