Jump to content
Unity Insider Forum

Garzec

Members
  • Content count

    295
  • Joined

  • Last visited

  • Days Won

    1

Garzec last won the day on February 2 2017

Garzec had the most liked content!

Community Reputation

6 Neutral

About Garzec

  • Rank
    Advanced Member

Recent Profile Visitors

1,395 profile views
  1. Garzec

    Sprites mit dem SpriteRenderer flippen

    Jup Ehm das ist noch Zukunftsmusik. Ich habe grade erst einmal angefangen und diesen Fall noch nicht bedacht ..
  2. Garzec

    Sprites mit dem SpriteRenderer flippen

    Edit: Vielleicht ist das etwas eleganter ­čśŐ Vector2 movementDirection = MovementInput.Direction; float horizontalInput = movementDirection.x; if (horizontalInput != 0) { FlipX = horizontalInput < 0; } float verticalInput = movementDirection.y; if (verticalInput != 0) { FlipY = verticalInput < 0; }
  3. Garzec

    Sprites mit dem SpriteRenderer flippen

    @malzbie meine Kurzform w├Ąre void Update() { spriteRenderer.flipX = movementDirection.x < 0; spriteRenderer.flipY = movementDirection.y < 0; } Dadurch ber├╝cksichtigt man aber nicht mehr den Input von 0. Dieser w├╝rde das Sprite ebenfalls auf "rechts" setzen. Daher mein else if um die 0 zu ber├╝cksichtigen.
  4. Die meisten Links liefern Tutorials, wo der Spieler ├╝ber das "LocalScale" der Transform Komponente rotiert wird. Die X-Achse von LocalScale steht bei -1 bei einer Bewegung nach links und auf 1 bei einer Bewegung nach rechts. Jetzt hat der SpriteRenderer aber 2 Checkboxen "FlipX" und "FlipY". Diese Checkboxen anzusprechen erscheint mir sinnvoller. Beispielcode: bool flipX; bool flipY; void Update() { float horizontalInput = movementDirection.x; if (horizontalInput > 0) { flipX = false; } else if (horizontalInput < 0) { flipX = true; } float verticalInput = movementDirection.y; if (verticalInput > 0) { flipY = false; } else if (verticalInput < 0) { flipY = true; } spriteRenderer.flipX = flipX; spriteRenderer.flipY = flipY; } Meine folgende Frage zielt jetzt nur teilweise auf die Performance ab. Mir geht es eher um die Logik und Lesbarkeit. Hat jemand eine Idee, ob man diesen Code weiter optimieren kann? Mich st├Âren die 4 if Statements ein wenig, vielleicht gibt es ja mit der Hilfe von etwas Mathe eine elegantere L├Âsung, die ich grade nicht sehe.
  5. Quaternion movementRotation = Quaternion.Euler(0, transform.rotation.eulerAngles.y, 0); rigid.velocity = movementRotation * movement; Ist des R├Ątsels L├Âsung
  6. Hallo, ich arbeite an einer FPS Steuerung, mit der ich den Spieler durch die Kamera rotiere. Dabei rotiert dieser sich, l├Ąuft aber weiterhin gerade aus, anstatt die neue Richtung der Kamera einzuschlagen. public class PlayerMovement : MonoBehaviour { private Vector3 movement; private Rigidbody rigid; private bool jumpPressed; private const int MOVEMENT_SPEED = 8; private const int JUMP_POWER = 20; private void Awake() { rigid = GetComponent<Rigidbody>(); } private void Update() { SetInputs(); } private void FixedUpdate() { Jump(); Move(); } private void SetInputs() { movement.x = Input.GetAxis("Horizontal") * MOVEMENT_SPEED; movement.y = rigid.velocity.y; movement.z = Input.GetAxis("Vertical") * MOVEMENT_SPEED; jumpPressed = Input.GetKeyDown(KeyCode.Space); } private void Jump() { if (jumpPressed && GroundCheck()) { movement.y = JUMP_POWER; jumpPressed = false; } } private void Move() { rigid.velocity = movement; } private bool GroundCheck() { return true; } } public class CameraMovement : MonoBehaviour { private Transform player; private Vector2 rotation; private Quaternion originalRotation; private const int HORIZONTAL_ROTATION_SPEED = 5; private const int VERTICAL_ROTATION_SPEED = 5; private const int VERTICAL_ROTATION_MIN = -80; private const int VERTICAL_ROTATION_MAX = 80; private void Awake() { player = GameObject.FindGameObjectWithTag("Player").transform; } private void Start() { originalRotation = transform.localRotation; } private void Update() { SetInputs(); RotateCamera(); RotatePlayer(); } private void SetInputs() { rotation.x = Input.GetAxisRaw("Mouse X") * HORIZONTAL_ROTATION_SPEED; rotation.y += Input.GetAxisRaw("Mouse Y") * VERTICAL_ROTATION_SPEED; rotation.y = Mathf.Clamp(rotation.y, VERTICAL_ROTATION_MIN, VERTICAL_ROTATION_MAX); } private void RotateCamera() { Quaternion verticalRotation = Quaternion.AngleAxis(rotation.y, Vector3.left); transform.localRotation = originalRotation * verticalRotation; } private void RotatePlayer() { player.localRotation *= Quaternion.AngleAxis(rotation.x, player.up); } } Das Ganze sieht dann so aus Ich habe schon versucht, die Velocity mit der Kamera Rotation zu multiplizieren, also rigid.velocity = movement * Camera.main.transform.rotation; Aber dann hebt der Spieler irgendwann in die Luft ab (Wie genau das zustande kommt muss ich noch herausfinden). Wei├č jemand, welchen Fehler ich noch drin habe?
  7. Garzec

    worauf scripte ich in unity

    F├╝r das gewisse Kleingeld gibt es auch Rider von Jetbrains. Die Tools von Jetbrains (es gibt tonnenweise Produkte f├╝r nahezu jede Sprache) sind extrem hochwertig, aber kosten leider auch. Wobei der Preis f├╝r Privatpersonen monatlich nicht sonderlich hoch ist, falls es einem wert sein sollte.... Ich selbst nutze privat aber ebenfalls VS, da es auch gut ist und eben kostenlos ist.
  8. Garzec

    mit Objekten interagieren

    Die Idee mit Triggern habe ich verworfen, da sich folgende Situation ergeben k├Ânnte (nur mal als H├Ąrtefall): Auf dem Tisch liegen 2 Schl├╝ssel nebeneinander, der Spieler steht genau davor. Welcher Schl├╝ssel gewinnt nun das Trigger Rennen? Oder der Trigger des Schl├╝ssels ist so gering, dass der Spieler auf den Tisch springen m├╝sste, um ihn aufzuheben.
  9. Garzec

    mit Objekten interagieren

    Die Idee finde ich nicht schlecht. Jetzt bin ich nochmal gespannt, ob eine ganz andere L├Âsung kommt
  10. Hallo, es geht um eine FPS Steuerung, der Spieler soll mit Gegenst├Ąnden interagieren k├Ânnen. Beispiele w├Ąren Schl├╝ssel aufheben, T├╝ren ├Âffnen, Kisten ├Âffnen, Dinge schieben. Angenommen es liegt ein Schl├╝ssel auf dem Tisch und der Spieler kommt dem Schl├╝ssel ausreichend nahe, dann soll folgendes passieren: Der Schl├╝ssel bekommt einen outline Shader Es erscheint der Text "Schl├╝ssel aufheben" Zun├Ąchst habe ich ein Interface erstellt public interface IInteractable { string InteractabilityInfo { get; } void ShowInteractability(); void Interact(); } Dadurch kann ich das Interface dem Schl├╝ssel Script hinzuf├╝gen public class Key : MonoBehaviour, IInteractable { public string InteractabilityInfo { get { return "Schl├╝ssel aufheben"; } } public void ShowInteractability() { // Shader anzeigen beispielsweise } public void Interact() { // Den Schl├╝ssel aufheben } } Zum Schluss brauche ich noch ein Script, das pr├╝ft, ob der Spieler in Reichweite eines interagierbaren Objektes steht und damit interagieren kann. Aufgrund der FPS Sicht habe ich das Script der Camera beigef├╝gt, diese pr├╝ft das Ganze dann mit einem Raycast. public class InteractabilityCheck : MonoBehaviour { private const int RANGE = 3; private void Update() { RaycastHit hit; if (Physics.Raycast(transform.position, transform.forward, out hit, RANGE)) { IInteractable interactable = hit.collider.GetComponent<IInteractable>(); if (interactable != null) { interactable.ShowInteractability(); if (Input.GetKeyDown(KeyCode.E)) { interactable.Interact(); } } } } } Dieses Script versucht zu pr├╝fen, ob das GameObject das Interface implementiert; trifft dieser Fall ein, so werden die Methoden des Interfaces aufgerufen. Der Code funktioniert wunderbar, trotzdem st├Ârt mich, dass 1x pro Frame der Raycast mit GetComponent l├Ąuft. Jetzt k├Ânnte man sagen das ist verkraftbar, aber vielleicht gibt es einen besseren Ansatz? Vielleicht eine ganz andere Herangehensweise / L├Âsung?
  11. Garzec

    vertikale Rotation bei Kamera limitieren

    Dankesch├Ân funktioniert wunderbar
  12. Hallo, ich m├Âchte eine FPS Kamera basteln und ihre vertikale Rotation auf -80 bis 80 Grad beschr├Ąnken. Ein kurzes unsauberes Beispiel: public Transform player; private Vector2 rotation; private void Update() { rotation.x = Input.GetAxisRaw("Mouse X") * 5; rotation.y = Mathf.Clamp(Input.GetAxisRaw("Mouse Y") * 5, -80, 80); } private void LateUpdate() { transform.localRotation *= Quaternion.AngleAxis(-rotation.y, Vector3.right); player.localRotation *= Quaternion.AngleAxis(rotation.x, player.up); } Der Code funktioniert zwar, aber die Limitierung nicht. Das h├Ąngt wahrscheinlich damit zusammen, dass der Input nur zwischen -1 und 1 springt und erstmal nicht bis 80 Grad kommen wird. Aber wo muss ich mit der Limitierung nun ansetzen? ­čĄö
  13. Ich denke, wenn ich mal Zeit habe, schreibe ich ein eigenes Editor Fenster daf├╝r Aber dann bleibe ich erstmal bei JSON
  14. Hallo, ich m├Âchte eine Karte (Grid) anhand einer auszulesenden Datei generieren. Dabei hat das Grid m * n Zellen (Reihen und Spalten). Auf diesen Zellen k├Ânnen sich zu Beginn bereits Objekte befinden. Ich m├Âchte mir die Level in externen Dateien abspeichern, m├Âchte man also ein neues Level designen, so legt man einfach eine neue Datei an. Aktuell (ich wei├č noch nicht, ob es mehr werden) muss ich mir 3 Informationen abspeichern Die ID des Zelltypen (Gras, Wasser, Wald, ...) Die ID des Objektes auf der Zelle, oder null, falls kein Objekt auf dem Feld ist Die Rotation dieses Objektes, falls eins drauf ist Ich dachte an JSON, aber ein Feld mit 4 Zellen, also 2x2 w├╝rde bereits so aussehen [ [ { "cellId": 0, "cellObject": { "id": 1, "rotationId": 1 } }, { "cellId": 0, "cellObject": null } ], [ { "cellId": 1, "cellObject": null }, { "cellId": 0, "cellObject": { "id": 3, "rotationId": 4 } } ] ] Bei normalen Karten mit 20x20 g├Ąbe es also einen enormen Schreibaufwand. Daf├╝r hat man bei JSON nat├╝rlich den Vorteil, einfach zu parsen. Ich habe IDs gew├Ąhlt, damit ich innerhalb des Codes ├╝ber Dictionaries mit den IDs die richtigen Objekte raussuchen kann. Gibt es Dateiformate, die sich f├╝r so etwas besser eignen bzw. den Schreibaufwand verk├╝rzen und dadurch nicht unlesbar werden?
×