Jump to content
Unity Insider Forum

DerStefan

Members
  • Content Count

    12
  • Joined

  • Last visited

Community Reputation

1 Neutral

About DerStefan

  • Rank
    Member

Recent Profile Visitors

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

  1. Hallo und danke für eure Unterstützung! Ich habe das ursprüngliche Problem übrigens gelöst, indem ich im Canvas die Reference Resolution auf 1920x1080 gesetzt habe und den UI Scale Mode auf "Scale With Screen Size" festgelegt habe. Außerdem hab ich den Screen Match Mode auf Expand gesetzt (weiß nicht, ob das positiven Einfluss hatte). Selbstverständlich ist mir eure Meinung wichtig, daher habe ich darüber nochmal nachgedacht. Prinzipiell gebe ich euch Recht, dass die Art und Weise (selbst wenn's von der Performance her Toaster-Kompatibel ist ), nicht so praktisch ist. Allerdings waren meine Beispiele nur die halbe Wahrheit. Es soll am Ende eher in diese Richtung hier gehen: Unterschiedliche Schriftgrößen und 3D. Die normale Button-Beschriftung in Unity gibt das möglicherweise nicht her. Heißt auch, dass die Buttons dann nicht den gleichen Sprite nutzen könnten. (Hintergrund ist gleich, aber die Schrift ist anders.) TextMeshPro sieht allerdings interessant aus! Hab mir mal paar Beispiele angeschaut, und auf einem Blog hab ich das hier gesehen, was wirklich beeindruckend ist: Auf die Schnelle habe ich jetzt das hier hinbekommen: Ein UI-Image eingefügt, als Source Image diesen grünen Kasten verwendet und innerhalb des UI-Images ein UI-TextMeshPro-Element eingefügt und darin die Schrift reingeschrieben und Farbe + Größe mit tags definiert. Die Option TextMeshPro war bei mir übrigens schon standardmäßig drin. Wenn es keine 3D-Schrift ist, dann ist das auch kein so großer Untergang. Hätte sonst alles mit Photoshop gemacht, aber so werde ich mich nur auf die Hintergründe konzentrieren und die Schrift in Unity machen. Viele Grüße
  2. Hallo Unity Community, ich arbeite gerade an einem einfachen Beispiel, in dem ich Buttons platzieren möchte. Meine erste Idee war es, dies mit Image Buttons zu tun, aber ich denke, dass es performance-technisch besser wäre, wenn alle grafischen Elemente bereits im Hintergrundbild integriert wären. (Speziell in meinem Fall werden sich die grafischen Buttons nur minimal von einander unterscheiden.) Dies heißt also, dass ich ganz normale Unity-Buttons so platzieren möchte, dass sie über den grafischen "Buttons" liegen. Ich habe also einfach ein Canvas erzeugt, darin ein Panel mit dem entsprechenden Hintergrundbild und mehrere Unity-Buttons. Leider habe ich gleich 2 Probleme: 1) Platzierung Wenn ich die Buttons innerhalb des Editors korrekt platziere und dann auf Play drücke, befinden sie sich an einer anderen Stelle. Heißt also, dass mir die Scene und Game-Views in diesem Fall nicht helfen, da ich es probieren und testen muss. Sicherlich hab ich da was übersehen. 2) Falsche Abmessungen Das Hintergrundbild, das die grafischen Buttons integriert hat, hat eine Auflösung von 1920x1080. Ich habe das Bildverhältnis innerhalb von Unity auf 16:9 (statt Free Aspect) geändert. Die bereits integrierten Grafik-Buttons haben jeweils eine Auflösung von 200x100. Wenn ich meinen Unity-Buttons die gleiche Auflösung gebe, sind sie in der Vorschau viel größer als die Grafik-Buttons. Drücke ich auf Play, passt es von der Größe her, aber die Position ändert sich (wie bereits in Punkt 1 erwähnt). Kompiliere/builde ich, ist das Ergebnis wieder ganz anders. Zusammengefasst kann man sagen: Größe und Position sind in allen 3 Fällen unterschiedlich. So sieht das ganze aus, und nein, das wird nicht das finale Hintergrundbild sein Danke für jede Hilfe!
  3. *Thread kann gelöscht werden*
  4. Hi, wenn ich in Visual Studio 2017 in C# programmiere (für Unity), gibt es da gewisse Richtlinien, an die ich mich halten muss? Ich würde gerne deutsche Namen für Variablen, Klassen etc verwenden und Kommentare in Deutsch verfassen. (Bin ohne Team.) Rein technisch scheint dies kein Problem zu sein, aber bevor ich loslege, frage ich einfach mal! Wozu die Frage? Ich meine, gelesen zu haben, dass die Codes vor Veröffentlichung des Spiels geprüft werden (ob's Schadsoftware ist). Und da man mit Unity für so ziemlich jede Plattform Spiele programmieren kann, könnte es ja jemanden stören, wenn Variablennamen, Klassennamen oder Kommentare nicht auf Englisch sind. Hab halt keine Lust, am Ende alles nochmal extra übersetzen zu müssen... Danke für jede Hilfe
  5. Hey, super, da lag ich mit meinen Versuchen ja gar nicht so weit daneben. Danke dir
  6. Hallo, wenn ich einen Boden erzeuge und darauf verschiedene Objekte platziere, muss ich immer sehr genau arbeiten, damit das Objekt weder im Boden drin steckt noch schwebt. Besonders schwierig finde ich es, wenn ich Objekte verbinde (Parent -> Childs), weil ich dann bei den Positionen immer noch berechnen muss, wie groß z.B. der Boden (Child) ist. Hab einfach eine Art Teleporter gebaut, der aus 3 Cubes besteht. Ich könnte natürlich allen Objekten einen Rigidbody hinzufügen, so dass diese beim Start des Spiels automatisch auf den Boden fallen würden. Lieber wäre es mir aber, dass ich das Objekt im Editor gar nicht erst durch den Boden schieben kann. Wenn ich das Move Tool aktiviert habe und dann mit Strg+Linksklick das Objekt verschiebe, kann ich es anscheinend raster-artig verschieben. Mit Shift+Linksklick kann ich es wohl vertikal und horizontal verschieben/transformieren. Sowas wie Taste+Linksklick, um das Objekt nicht durchschieben zu können, wäre für mich perfekt. Gibt es da eine Möglichkeit? Oder hilft es nur, zu rechnen und pixelgenau zu arbeiten? Hier mal zwei Beispiele: Danke für jede Hilfe!
  7. Hi und Danke für deine Antwort! Also es klappt jetzt auf jeden Fall besser. (Im Tutorial sieht das alles echt kinderleicht aus...) Ich habe übrigens gemerkt, dass es die Option "Atomic" gar nicht mehr gibt. Anscheinend wurde sie durch "Settings -> Interruption Source" ersetzt. Wenn ich zwischen Idle (nichts tun) und Laufen wechseln möchte, dürfen beide Animationen die Option "Has Exit Time" NICHT angekreuzt haben. Ansonsten würde die jeweils aktuelle Animation immer erst zuende abgespielt werden, bevor in eine andere gewechselt werden kann. Schnelles Stop-And-Go wäre also nicht möglich, wenn "Has Exit Time" angekreuzt wäre. Hab ich das soweit richtig verstanden? Ich hatte jetzt noch das Problem, dass meine Sprung-Animation, welche nur aus 1 Haltung bestand (beide Füße etwas angehoben und rotiert), auf meinen eigentlichen Charakter Einfluss nahm. Die idle-Animation und die Lauf-Animation hatten dann plötzlich auch umpositionierte Füße. (Unten in der GIF hab ich das anhand der idle demonstriert.) Nach einigen Versuchen hat es dann aber endlich geklappt. Schade dass es oftmals Glückssache ist, ob es nun wirklich funktioniert oder nicht. (Für mich zumindest.) Der Autor des Tutorials hatte das hier gemacht: Mein Problem war daraufhin das hier: Ich hatte explizit NICHT auf den Record-Button gedrückt, weil der wieder mal zu sehr seltsamen Ergebnissen führte. (Füße waren dann wieder 1 Meter vom Körper usw. entfernt - hab dann alles rückgängig gemacht.) Ja, das sind hier alles Kleinigkeiten, aber da es 0-Basics sind, sollten keine Unklarheiten vorhanden sein. Ich mache mir bei einem Hausbau ja auch keine Gedanken über das Kino-Zimmer, wenn ich nicht mal 2 Ziegelsteine verbinden kann... 0-Basics sind Voraussetzungen für ALLES. Mfg
  8. Hallo, ich habe ein paar kleine Fortschritte gemacht. Zuerstmal hat es nichts gebracht, die Animationen zu löschen. Ich musste im Inspector den Animation Controller (der meinem Charakter hinzugefügt war) resetten. Erst dann hörte die Sache mit dem Schweben auf. Das nächste Problem war, dass der Charakter statt zu laufen immer nur komisch umkippte (wie oben in der GIF). Das lag an zwei Boundaries (unsichtbare Wände), die sich jeweils links und rechts neben dem Charakter befinden. (In einem Abstand von rund 20 Metern). Diese dienen dazu, abgeschossene Laser zu zerstören, damit diese nicht endlos weit fliegen. Seltsamerweise wird der Charakter von diesen Boundaries magisch angezogen. Deaktiviere ich nur den einen, zieht's den Charakter automatisch zu dem anderen. Ich muss im Inspector bei den Boundaries "IsTrigger" deaktivieren. Der Autor des Tutorials weist aber explizit darauf hin, dass diese auf isTrigger gesetzt sein müssen, da sonst der Charakter dagegen laufen könnte. Ich dachte aber, dass der Abstand zwischen Boundaries und Charakter eh immer gleich wäre. (Sprich, er könnte doch eh niemals dagegen laufen?!) Das letzte Problem war, dass der Charakter immer am Umkippen war, als er einfach nur still stand. Dafür habe ich den Collider, der für die Füße war, durch einen eckigen ersetzt. Beim Stehen kippt er nicht mehr um, aber leider beim Laufen (nicht viel, aber etwas). Daher die Abschlussfragen: 1. Wie kann es sein, dass der Charakter von unsichtbaren Wänden angezogen wird? 2. Was muss ich einstellen, damit der Charakter nicht anfängt umzukippen, sobald ich mich bewege? (Anhang) Zu 2. hab ich gerade gesehen, dass es nicht mehr passiert, wenn ich bei RigidBody2D (im Inspector) "Freeze Rotation Z" ankreuze. Ob das aber wirklich korrekt ist, weiß ich auch nicht... Der soll ja nur beim Laufen nicht umkippen. P.S: Dass es keine Lauf-Animation gibt, ist normal, da ich ja alles gelöscht hab. Danke für jede Hilfe! Viele Grüße
  9. Hallo Leute, ich versuche eine ganz simple Animation zu erzeugen, scheitere aber völlig. In diesem Beispiel soll einfach der Fuß etwas rotiert werden. Ich habe dafür folgendes gemacht: - Ordner namens Animation in Assets angelegt - innerhalb dieses Ordners einen neuen Animation Controller angelegt - danach hab ich auf Create geklickt und eine Idle.anim erstellt - im nächsten Schritt "Add Property" und das Objekt ausgewählt, das ich animieren will (vorderen Fuß) - die Key-Frames befinden sich standardmäßig bei 0:00 und 1:00 (Sekunden) - nun klicke ich auf Record, springe zu 0:40 und gebe im Inspector 5 ein (Rotation Z). - es sieht alles korrekt aus und ich klicke nochmals auf Record, um die Aufnahme zu beenden. Es funktioniert jedoch NICHT! Spiele ich die soeben erzeugte Animation ab, ist der Wert der z-Rotation bei über 150, obwohl ich nur 5 eingegeben hatte. Wenn ich in das Tab "Curves" springe, hilft es auch nicht, überall Rechtsklick und "Flat" auszuwählen. Klar kann ich alles händisch korrigieren, aber das ist sicherlich nicht im Sinne des Erfinders... Mache ich was falsch oder ist das irgendein "Bug"? Danke für jede Hilfe! Viele Grüße
  10. Hi, das könnte sein. Ich kam mit dem Animator ehrlich gesagt überhaupt nicht klar. Er hat die Animationen immer automatisch mehrmals erstellt, obwohl ich sie nur auf einem Zeitpunkt setzen wollte. Selbst beim Setzen auf "flat", änderte sich nichts. Ich musste dann immer alles händisch löschen. Allerdings müsste sich der Charaker nach Deaktivieren des Animators doch dennoch normal bewegen? Es fehlen dann die Animationen (wie z.B. Fußbewegungen). In meinem Fall wird der Charakter rotiert und erst bewegt, wenn er auf dem Boden liegt. P.S. Die GIF-Animationen sind sehr kurz, in Echt würde der beim Schweben immer weiter hoch gehen. Grüße
  11. Hi und danke für deine Antwort. Das mit dem FixedUpdate war im Tutorial genau so. Habe mir das hier als Notiz geschrieben: Ich habe jetzt mal weiter rumprobiert und sobald ich den Animator ausschalte, fällt der Charakter auf den Boden. Ist der Animator an, bleibt der Charakter einfach in der Luft schweben. (Er befindet sich standardmäßig 1 Meter über der Plattform.) Das komische ist aber, dass ich mit den Steuerungstasten nicht den Charakter bewege, sondern nur seine Neigung ändere. Liegt er schließlich auf dem Boden, kann ich ihn bewegen, was aber sehr seltsam aussieht. Hier mal 2 GIF-Dateien, damit du sehen kannst, wie es abläuft: Ohne Animator: Mit Animator: P.S. Das mit dem FixedUpdate werde ich prüfen, aber vorher sollte der Charakter sich schon normal bewegen können Viele Grüße
  12. Hallo, bin neu hier im Forum und befasse mich erst seit Kurzem mit Unity. Meine Version ist die 2018.3.0f2 Personal (Windows 7 Pro 64 Bit). Habe mir ein Youtube-Tutorial angeschaut und in dem 2D-Spiel bereits folgendes umgesetzt: - Charaktermodell mittels einzelner Texturen zusammensetzen - RigidBody2D und Collider setzen - rutschiges Material erstellen, damit der Charakter nicht an vertikalen Wänden hängen bleibt (dieses den beiden Collidern zuweisen) - Animationen hinzugefügt (laufen, springen, idle) - Schusswaffe abfeuern und Schaden hinzufügen - Laser anhand von unsichtbaren Trigger-Wänden automatisch vernichten lassen Mein derzeitiges Problem ist, dass mein Charaktermodell aus mir unbekannten Gründen schwebt. Anfangs hatte ich das Problem, dass das Laufen sehr schwergängig war (fast schon wie Zeitlupe). Beim Springen gab es nie Probleme (und der Luft konnte er sich schneller horizontal bewegen als auf dem Boden). Mitlerweile ist es aber schlimmer geworden, heißt, das Charaktermodell schwebt nur noch und auch noch immer weiter nach oben (langsam, aber sichtbar). Änderungen der Gravity haben keinen Unterschied bewirkt. Hab mir die Videos mehrmals angeschaut, aber ich finde einfach den Fehler nicht. (Im Video wird eine ziemlich alte Unity-Version verwendet - Version 4 und 5). Das sind meine Skripte, die ich bisher erstellt bzw. nachgestellt habe: CollisionDetection, EnemyHealth, HealthController, LaserDamage und PlayerController EnemyHealth, HealthController und LaserDamage schließe ich mal aus... Das ist das CollisionDetectionSkript: using System.Collections; using System.Collections.Generic; using UnityEngine; public class CollisionDamage : MonoBehaviour { public float damage = 1; void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("Player")) // If object is the player: { collision.SendMessage("ApplyDamage", damage); // Apply damage to player } } void OnTriggerStay2D(Collider2D collision) { if (collision.CompareTag("Player")) // If object is the player: { collision.SendMessage("ApplyDamage", damage); // Apply damage to player } } } Der PlayerController: using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { public float maxSpeed = 4; // Movement speed of character (Orig = 4) public float jumpForce = 500; // Jump force of character public Transform groundCheck; // Check if character is on ground or not public LayerMask whatIsGround; // Define what is grounded [HideInInspector] // Don't show the following variables inside of the Inspector in Unity public bool lookingRight = true; // Character looks right by default public GameObject laserPrefab; public Transform spawnPoint; public float laserSpeed = 500; private Rigidbody2D rigidbody2D; // Access Rigidbody2D class private Animator animator; // Access animator class private bool isGrounded = false; private bool jump = false; // Is character jumping? private bool isAttacking = false; // Start is called before the first frame update void Start() { rigidbody2D = GetComponent<Rigidbody2D>(); // Access Rigidbody2D class animator = GetComponent<Animator>(); // Access animator class } void Update() // Update is called once per frame { if (Input.GetButtonDown("Jump") && isGrounded) { jump = true; } if (Input.GetButtonDown("Fire1") && !isAttacking) { isAttacking = true; } } void FixedUpdate() // Update is called fixed (e.g 0.02 seconds for 50 FPS) - main code goes here { float horizontal = Input.GetAxis("Horizontal"); // Left right arrows animator.SetFloat("Speed", Mathf.Abs(horizontal)); // Convert negative values rigidbody2D.velocity = new Vector2(horizontal * maxSpeed, rigidbody2D.velocity.y); // Character movement isGrounded = Physics2D.OverlapCircle(groundCheck.position, 0.15F, whatIsGround); //isGrounded = Physics2D.OverlapCircle(groundCheck.position, 0.15F, whatIsGround); // ORIG animator.SetBool("IsGrounded", isGrounded); // Parameter IsGrounded (in Unity) = Value of isGrounded if ((horizontal > 0 && !lookingRight) || (horizontal < 0 && lookingRight)) // If character moves right but doesn't look right OR if character moves left and looks right: { Flip(); // Flip character } if (jump) { rigidbody2D.AddForce(new Vector2(0, jumpForce)); // Move character 0 in X, and "500" in Y jump = false; // Enable jumping again } if (isAttacking) { animator.SetTrigger("Attack"); // Enable attack animation GameObject laser = (GameObject)Instantiate(laserPrefab, spawnPoint.position, Quaternion.identity); if (lookingRight) { laser.GetComponent<Rigidbody2D>().AddForce(Vector3.right * laserSpeed); } else { laser.GetComponent<Rigidbody2D>().AddForce(Vector3.left * laserSpeed); } isAttacking = false; } } public void Flip() // Flip character { lookingRight = !lookingRight; // Invert looking direction Vector3 vector3Temp = transform.localScale; // Temporar saving vector3Temp.x *= -1; // Invert looking direction transform.localScale = vector3Temp; // Execute flipping } } Und hier noch zwei Screenshots, die CircleCollider zeigen - Anhang. (Der Sprecher im Video empfiehlt, statt nur 1 Collider zu nutzen, 3 verschiedene zu verwenden.) Habe im 1. Screenshot die GroundDetection absichtlich deaktiviert, damit man die Collider besser sieht. Sicherlich irgendein Anfängerfehler... Danke für jede Hilfe!
×
×
  • Create New...