Beiträge von Cryptogene

    Es soll tatsächlich für ein Evolution-Monster Spiel sein.
    Ob dies nun in Form mit Karten ist oder anderweitig umgesetzt wird, bleibt jeden selber überlassen.


    Natürlich können die Monster auch einfach als RPG Maker Battler hergenommen werden.


    In Zukunft wird es wohl auch mehr dieser Packs geben, allerdings folgen erst noch andere, ehe es hier weiter geht. :D

    Hey Leute ninja_shades


    Ich freue mich euch mitteilen zu können, dass wir ab sofort im Shop ein weiteres Produkt für euch anbieten können.

    Unser Shop wurde von meinen Evolution-Monster #001 - #100 erweitert.


    Dieses Monster Pack enthält mehr als 100 einzigartiger Monster mit jeweils einer Front und Back Grafik und somit über 200 einzigartige Grafiken!

    • 100 Front Battler
    • 100 Back Battler
    • Evolutionäre Stufen, wie bei Pokemon mit bis zu 5 Entwicklungsstufen
    • Alle Grafiken sind separiert
    • Dieses Monster Pack passt perfekt zu meinen anderen Sets.

    Die Grafiken sind mit dem RPG Maker gut kompatibel, wenn auch nicht nur für diesen ausgelegt. ninja_thumbsup


    Ich habe 5 gerenderte / layered Versionen (.png) vorbereitet. Diese sind mit den Faktoren 0,25x; 0,50x; 0,75x; 1x und 2x verfügbar. Außerdem ist auch jeweils eine .svg Version enthalten.

    Das heißt, ihr könnt es ohne Verluste auf größere Auflösungen hoch skalieren, ohne dass es verpixelt.


    Abmessungen ("Monster #003" als Beispiel) :

    0.25x = ca. 180px * 180px

    0.50x = ca. 360px * 370px


    0.75x = ca. 540px * 565px

    1.00x = ca. 720px * 755px

    2.00x = ca. 1440px * 1510px

    .svg = beliebige Größe * beliebige Größee


    Zur Feier des Tages gibt es auch bis Ende dieser Woche einen Rabatt auf das Pack.
     ninja_yeah


    Das Produkt ist für regulär 10€ erhältlich. Bzw mit unserem Maker Coins (Moins - Kurs) für knapp 10.000 Maker Coins.

    Mit der derzeitigen Rabatt-Aktion ist das Pack für 8.500 Maker Coins bis Ende der Woche zu haben.


    Wir hoffen euer Ressourcen Sortiment somit erweitern zu können und weitere tolle Produkte hier bei uns anbieten zu können.

    Besucht unseren Shop hier. Maker Coins sind nach wie vor mit Aktivität zu ergattern oder hier zu kaufen.



    Nun denn, Bilder sagen ja bekanntlich mehr als tausend Worte.

    Viel Spaß mit den neuen Ressourcen. ninja_heart


    P.S. Über Lob, Kritik oder zukünftige Verbesserungsvorschläge würde ich mich natürlich auch hier im Thread freuen und zeigt mir, ob weiterhin derartige Angebote / Packs hier erwünscht sind. ninja_wink



    000.jpg


    000-0.jpg


    000-1.jpg


    000-2.jpg


    000-3.jpg

    Oha :love::love:

    Mega cool - da freue ich mich wie ein Schneekönig!


    Allen weiteren noch viel Erfolg.

    Ich kann Seasons after Fall nur herzlichst empfehlen! Habe es selber auch schon in meiner Bibliothek und es ist echt ein super schönes Spiel, liebevoll erstellt und von der Mechanik richtig toll umgesetzt.


    Also da muss jetzt eine große Beteiligung von euch kommen! ;)

    Heute ist der letzte Tag, an dem das "Monster Creature Pack 1 - Semi Realistic" kostenlos im Maker Shop zur Verfügung steht. :gift_heart:

    Das Angebot wurde im 24. Türchen des Adventskalenders erwähnt.

    Wie hat euch der Kalender gefallen? Wie fandet ihr das Format? Wir freuen uns über euer Feedback im Forum!

    Euch allen noch einen besinnlich, ruhigen 2. Feiertag. :christmas_tree: :gift:


    https://rpgmaker-mv.de/jcoins-shop/


    An dieser Stelle ein herzliches Dank an PandaMaru !
    Du hast wie jedes Jahr dir wahnsinnig viel Mühe gegeben, damit der Kalender einzigartig aussieht und die Community jeden Tag eine tolle, kleine Überraschung vorfinden konnte.
    Danke für dein Engagement sowie deiner Mühe und Herzblut, welches du in dieses Forum steckst! :)

    Hallo Community,


    wie bereits im gestrigen Türchen unseres Adventskalenders zu sehen, beherbergt unser Maker Coins Shop ein neues Produkt.

    Es handelt sich hierbei um ein mittelalterliches GUI (grafische Benutzeroberfläche).

    Diese ist mit Vektorgrafiken für jede Auflösung skalierbar, jedoch für Desktop-Anwendungen gedacht / gemacht.

    Das Pack beinhaltet ebenso 4 verschiedene 'gerenderte' Größen, sodass ihr diese als .png Dateien in eurem Projekt sofort benutzen könnt.


    Das Produkt ist hier (über den Maker Coins Shop) zu finden.


    Anbei noch ein paar Beispiel-Bilder (mehr Bilder sowie eine genauere Beschreibung ist in der Produktbeschreibung im Shop vorzufinden)









    Fragen, Log, Kritik oder Anregungen zu diesem Produkt können gerne hier in diesem Thread gestellt werden.



    An dieser Stelle möchte ich auch nochmals auf unseren Adventskalender verweisen.
    Seid gespannt, was sich weiterhin hinter den Türchen befindet.

    Wir freuen uns über eure Kommentare und wünschen euch auch weiterhin eine besinnliche Weihnachtszeit! :|

    Die Vorstellung und der Traum davon ein eigenes Spiel zu realisieren nach meinen Vorstellungen.

    Eine eigene Geschichte, die Wendepunkte im Spiel, etc...


    Ich liebte es Rätsel zu erstellen, zugegeben waren diese meist zu kompliziert, was ich erst lernen musste.

    Aber es hatte wahnsinnig viel Freude bereitet und es betraf immer nur einen kleinen Freundeskreis.


    Vieles davon hat sich bis heute nicht wirklich geändert. Lediglich der zeitlich limitierende Faktor.

    Willkommen bei "[Neuling] Roll a Ball Extended Version - Lektion 8 - Exportieren des Spiels + weitere Ideen" 8)

    Diese Lektion setzt Lektion 7 dieser Reihe voraus und baut entsprechend darauf auf.


    Dies ist die letzte Lektion dieser Reihe.

    Hier werdet ihr erfahren, wie ihr euer Spiel exportieren könnt und weitere Ideen für das Projekt vorfinden.


    Bevor wir das Menü zum Exportieren öffnen, speichert euer gesamtes Projekt und Szenen ab.

    Öffnet das das Menü über "File => Build Settings ... "

    Es öffnet sich ein neues Fenster. Das Unity Logo zeigt in der Liste der "Plattformen" die ausgewählte Plattform, auf die wir exportieren wollen.

    Via "Switch Plattform" kann eine andere ausgewählt werden - dies wollen wir hier jedoch nicht.

    Windows, Linux oder Mac ist soweit ganz gut. In meinem Fall ist es Windows (64 Bit), da Unity sich gemerkt hat, das ich damit entwickle.

    Zieht nun alle Szenen in das "Scenes in Build" Fenster im oberen Bereich. In unserem Fall sollte das nur eine sein, sofern ihr nicht mehr hinzugefügt habt. Es kann auch sein, dass diese schon dort inbegriffen ist.


    Klickt nun auf den "Build" Button unten rechts.

    Es öffnet sich nun ein Art Explorer Fenster. Legt nun einen neuen Ordner "Builds" im selben Level an, wie "Assets" und "Library".

    Navigiert nun in den "Builds" Ordner, den ihr soeben erstellt habt.

    Erstellt einen neuen Ordner mit dem Namen "Version_1.00" und navigiert ebenso in diesen bzw. wählt diesen für Unity aus.

    Sobald ihr dies bestätigt habt, wird Unity automatisch alle notwendigen Schritte für euch erledigen und das Spiel für das jeweilige Betriebssystem 'verpacken'.


    Unter dem von euch gewählten Pfad findet ihr nun das Spiel.

    In meinem Fall eine "Roll a Ball Extended Version.exe" Datei.

    Startet die Datei und erfreut euch an eurem 1. Unity Spiel! :)

    (Wenn ihr es ohne Fenstermodus startet, müsst ihr mit z.B. "ALT + F4" das Spiel wieder beenden.)



    Herzlichen Glückwunsch!

    Du hast diese Reihe erfolgreich beendet.


    Nun ein paar Schlussbemerkungen:

    • Die Zwischenräume, die nun noch frei sind, könnt ihr selber gestalten.
    • Nutzt Rampen oder Elevator Objekte um in die jeweilige nächste Mauer / Bereich vorzudringen.
    • Denkt daran: Wenn ihr mehr Münzen habt, müsst ihr beim "Player" Objekt die Anzahl der Münzen in der Skript Komponente erhöhen.


    Weitere Ideen:

    • Eine Timer Funktion, nach Ablauf der Zeit hat man verloren
    • Rampen oder Plattformen, die sich rotieren, bzw. ggf auch Mauern
    • Blöcke die man nicht berühren darf, sonst hat man verloren / Spieler wird deaktiviert => verloren.
    • ...


    Ihr seht, selbst ein solches Spiel kann man noch gut ausbauen.

    Nutzt die Gelegenheit und baut euch eigene Levels mit den verbleibenden Freiraum.


    Zeigt in diesem Thread sehr gerne eure Meisterwerke! Bereichert andere mit euren Ideen!

    Hat euch die Reihe gefallen?

    Lasst mir doch etwas Feedback hier, da es sehr aufwändig war, diese zu erstellen.


    Ich bin gespannt auf eure Rückmeldungen!

    Anbei noch 2 Dateien - einmal die Unity Projekt Datei im Stadium der letzten Lektion, solltet ihr nicht mitgekommen sein und dann das fertige Spiel zum Spielen.


    Viel Spaß damit!


    Spielbare Version zum Testen:

    Roll a Ball Extended Version - v1.00 - Win64.zip


    Source-Code des Projektes:

    Roll a Ball Extended Version - SourceCode.zip

    Willkommen bei "[Neuling] Roll a Ball Extended Version - Lektion 7 - Anzeigen der Score sowie Texte" 8)

    Diese Lektion setzt Lektion 6 dieser Reihe voraus und baut entsprechend darauf auf.



    Wir haben nun einen beweglichen Spieler, Münzen sowie Hindernisse.

    Aber uns fehlt noch eine Score sowie ein Win-Text.


    Dies wollen wir nun ändern und entsprechend integrieren.

    Es bieten sich nun verschiedene Möglichkeiten an, wie wir die Score implementieren können.

    Einmal von 0 nach oben zählend und als zweite Möglichkeit von Oben (also von der Anzahl der Münzen bei Spielstart) nach unten (zu 0) zählend.

    Ich entscheide mich hierbei für die zweite Möglichkeit. Sprich: Wenn die Münzen alle eingesammelt wurden und der Counter auf 0 geht, ist das Spiel gewonnen.

    Die Anzahl der Münzen könnt ihr somit später noch erhöhen und das Spiel endet dennoch bei dem Wert 0, wenn alle Münzen eingesammelt wurden.

    (Und der Spieler weiß somit automatisch, wie viele ihm noch zum Beenden des Spiels fehlen.)


    Öffnet nun das Skript "ControllerPlayer".

    Wir wissen: Münzen sind gerader Anzahl, also keine halben oder dreiviertel Münzen. Daher benötigen wir eine neue Variable vom Typ "int" (integer).

    Fügt nun diese Zeile "public int coinCounter;" bei der Zeile "public float speed;" unterhalb ein.

    Die Reihenfolge hat hier nichts miteinander zu tun, es ist lediglich aufgeräumter.


    Wir haben es "public" gewählt, damit wir später bei Unity die Anzahl der Münzen eingeben können.

    Ergänzt nun im Skript folgenden Ausschnitt:


    Csharp
    1. void OnTriggerEnter(Collider other)
    2. {
    3. if (other.gameObject.CompareTag("Coin"))
    4. {
    5. other.gameObject.SetActive(false);
    6. coinCounter = coinCounter - 1;
    7. }
    8. ...


    Neu ist:

    Csharp
    1. coinCounter = coinCounter - 1;


    Wir ziehen also eine Münze ab, wenn wir eine eingesammelt haben.

    Die selbe Zeile ließe sich auch mit dieser ersetzen:

    Csharp
    1. coinCounter--;


    Dies hat sie selbe Bedeutung wie die obere - zum Verständnis von Neulingen sollte es hierbei jedoch bei der oberen erstmal bleiben. An alle, die mit C# oder Programmiersprachen vertraut sind, dürfen natürlich auch die zweite Version hier nehmen.


    Das komplette Skript sollte nun etwa so aussehen:


    Speichert das Skript ab und kehrt zu Unity zurück.

    Klickt per Rechtsklick in das Hierarchy Fenster und wählt "UI => Text".

    Es sollte nun ein "Canvas" mit einem "Text" und einem "EventSystem" Objekt erschienen sein.

    Wichtig: Lasst diese Objekte stets so zusammen. Ein UI (User Interface - also Benutzeroberflächen) Element benötigt immer ein Canvas Objekt, von dem es ein Kind Objekt ist, so wie es Unity hier schon für uns vorgegeben hat.

    Andernfalls würde der Text (Objekt) nicht richtig funktionieren.


    Man kann sich das Canvas auch als Bereich vorstellen, in dem der Text an Gültig erhält.

    Gibt es kein Canvas, ist der Text als solches Objekt nicht gültig.


    Benennt nun den soeben erstellten Text in "txtCoinCounter" um.

    Wählt außerdem in der "Text (Script)" Komponente des txtCoinCounter Objektes die Farbe "Color" an (Klick auf das dunkle Farbfeld).

    Wählt nun einen helleren Hex-Wert wie "FFFFFF".

    Damit ihr das Objekt sehen könnt, drückt "F" im Scene Fenster, sodass es zum Text hinzoomt.

    Scrollt etwas raus, sodass ihr das gesamte Canvas sehen könnt. Wie ihr seht, befindet sich das Canvas nicht im Spiel direkt. Es wird aber später wie über dem Bildschirm gelegt aussehen, also keine Sorge.


    Ersetzt nun von unserem txtCoinCounter Objekt im Text Feld "New Text" mit "Coin Counter".

    Diese Information ist nur für uns, das wir wissen, worüber es sich handelt.


    Geht nun in die oberste Komponente "Rec Transform" und wählt das Bild aus, welches wie ein Schießkreuz aussieht.

    (Dieses Bild ist für die Positionierung und die Verankerung des Text Elementes im Canvas verantwortlich.)

    Beim Klick auf dieses Symbol öffnet sich ein Art Untermenü mit mehreren, ähnlich aussehenden Bildchen.

    Haltet nun "SHIFT" und "ALT" gleichzeitig und wählt dann das Symbol oben links.


    Gebt nun die Transform - Positions Werte ein: "Pos X = 20" und "Pos Y = -20".

    Zuletzt noch die "Font Size" auf "20" erhöhen. Diese befindet sich unter der "Text (Script)" Komponente.


    Wenn ihr alles richtig gemacht habt, sollte es so aussehen:


    Als nächstes wollen wir uns um die Programmlogik kümmern, die mit dem Text Objekt in Verbindung steht.

    Öffnet das "ControllerPlayer" Skript.


    Wir benötigen nun einen zusätzlichen Namensraum (namespace), um die UI Elemente in C# mittels Skript zur Verfügung zu haben.

    Ein Namensraum ist z.B. der schon vorhandene "using UnityEngine;" in einen der ersten Zeilen im Skript.


    Wir fügen darunter nun einen weiteren nämlich "using UnityEngine.UI;"

    Nun haben wir auch Zugriff auf die UI Elemente von Unity.


    Erstellt eine neue Variable "public Text txtCountText;" unter den anderen "public ..." Variablen.

    Speichert nun das Skript ab und kehrt zu Unity zurück. (Weiter unten in dieser Lektion ist notfalls auch wieder der gesamte Code zu finden, sollte es nicht klar gewesen sein.)

    Wählt nun den Player an und betrachtet die Skript Komponente. Wir haben 2 Felder, die wir noch nicht bearbeitet haben.

    Einmal das Feld "Coin Counter" mit dem Wert "0" und einmal das "Txt Count Text" Feld.

    In dem ersteren Feld gebt den Wert 20 ein.

    In zweiteres zieht ihr von der Hierarchy das Objekt "txtCoinCounter" in das Feld.

    Es sollte nun wie auf dem Bild aussehen:

    Wir haben nun das txtCoinCounter Text-Objekt mit unserer im Skript befindlichen Text Variable verknüpft. bzw. diese Variable mit dem Text Objekt 'befüllt'.


    Der Wert von "Coin Counter = 20 " sagt aus, dass der Spieler 20 Münzen einsammeln muss.

    Solltet ihr später mehr hinzufügen, müsst ihr diesen Wert entsprechen erhöhen, daher bitte merken!


    Kehrt nun wieder zum Skript zurück - wir sind noch nicht fertig mit dem "ControllerPlayer.cs" Skript.

    Erweitert nun "void Start()" um die folgende Zeile:

    Csharp
    1. void Start()
    2. {
    3. rb = GetComponent<Rigidbody>();
    4. txtCountText.text = "Verbleibende Münzen: " + coinCounter.ToString();
    5. }

    Wir greifen mit der neuen Zeile nun auf das Text Objekt zu und wollen die darin befindliche "text"-Komponente Beeinflussen. Es soll darin stehen "Verbleibende Münzen: 20" bzw. der aktuelle Stand, der in dieser Variable gespeichert ist.

    (Nach jedem einsammeln soll der Wert ja kleiner werden.)


    Da es hier jedoch nur einmal in Start gesetzt wurde, dies auch nur einmal lädt, müssen wir die Zeile auch noch andernorts setzen.

    Also muss diese Zeile auch nochmal in den Code von OnTriggerEnter().

    Dann hätten wir jedoch 2 mal den Selben Code an 2 verschiedenen Zeilen.

    Das ist eher schlecht und möchte man nicht. Daher erstellen wir uns eine neue Funktion, die diesen Code durch Funktionsaufruf ausgibt.

    => So müssten wir nur an einer Stelle den Code ändern, statt an 2 verschiedenen.


    Löscht daher die soeben getippte Zeile in der "void Start()" Methode und ergänzt / vergleicht euren Code mit dem Folgenden, sodass es übereinstimmt:


    Neu ist die selbst definierte Funktion "SetCountText()" sowie ihre 2 maligen Aufrufe in OnTriggerEnter() sowie Start().

    Speichert nun das Skript ab und kehrt zu Unity zurück.

    Zeit für einen Test - Startet den Play-Mode.


    Doch halt ... Was ist das?

    Unser Count - Text ist abgeschnitten...

    Dies hat den Grund darin, dass die Breite ("Width") wie im Bild hervorgehoben von unserem "txtCoinCounter" - Text Objekt nur eine Breite von 160 aufweist. Unser Text scheint jedoch länger zu sein. Wir wollen den Wert daher von 160 auf 400 ändern.


    Aber! Achtung.

    Nicht im Play-Mode - wir erinnern uns, alle Änderungen, die wir hier machen, gehen nach beenden dieses Modus verloren.

    Es ist jedoch gut zum Testen, ob 400 ausreichen. Nach einen kurzen Test: Ja, es reicht.


    Beendet den Play-Mode und ändert den Wert von 160 auf 400.

    Speichert euer Projekt und geht erneut in den Play-Mode.


    Nun sollte der Counter nach einsammeln von 3-4 Münzen jedesmal um eins herunter gehen. Probiert es nur für ein paar Münzen.

    Wir wollen nun noch eine "Win" bzw. "Gewonnen" Nachricht ausgeben, wenn alle Münzen eingesammelt wurden.


    Dupliziert nun im Hierarchy Fenster das "txtCoinCounter" Objekt.

    Benennt es in "txtWinText" um.

    Setzt von diesem Objekt mittels der "Rect Transform" Komponente die Verankerung in die Mitte (Klick auf das Bild, SHIFT und ALT drücken und die Mitte auswählen).

    Erhöht den Text etwas mit "Pos Y = 75", ebenso erhöht die Höhe "Height = 50".

    Jetzt wollen wir den Text noch zentrieren und etwas größer machen. Geht hierzu in die "Text (Script)" Komponente und tragt bei "Text" den Text "Win Text" ein. Bei "Font Size" den Wert "40" und bei "Alignment" jeweils das in der Mitte befindliche Symbol.


    Es sollte nun so aussehen:


    Als nächstes müssen wir noch sicherstellen, dass der Text nur dann angezeigt wird, wenn das Spiel gewonnen wird.

    Wechselt daher wieder in das "ControllerPlayer" Skript.


    Wir benötigen nun wieder eine public Text Variable.

    Erstellt daher eine neue Zeile unter der anderen Text Variable:

    Csharp
    1. public Text txtWinText;


    Fügt außerdem in der "void Start()" Funktion am Ende der Zeilen die folgende Zeile hinzu:

    Csharp
    1. txtWinText.text = "";

    Damit gehen wir sicher, dass am Anfang des Spiels der 'Gewonnen' Text leer ist, also nichts anzeigt. (Es soll ja nur am Schluss nach dem Einsammeln aller Münzen eine entsprechende Meldung erfolgen.)


    Geht nun runter zu diesem Abschnitt:

    Csharp
    1. void OnTriggerEnter(Collider other)
    2. {
    3. if (other.gameObject.CompareTag("Coin"))
    4. {
    5. ...

    setzt nun in der ersten "if-Abfrage" eine entsprechende Bedingung ein, ob wir mit dem Zählen bei 0 angekommen sind. Und wenn, dann soll der Text "Gewonnen" erscheinen. :

    Csharp
    1. if (coinCounter == 0)
    2. {
    3. txtWinText.text = "Gewonnen!";
    4. }


    Der ganze Skript-Code sollte nun so aussehen:


    Anmerkung: Solltet ihr einen längeren Text wie "Gewonnen" ausgeben wollen, achtet darauf, dass im Unity Editor das Objekt "txtWinText" in "Width" ausreichend an Länge verfügt. Also der Platz z.B. 800 statt 400 ist.

    Für "Gewonnen" reicht uns jedoch 400 gut aus.


    Speichert nun das Skript ab und kehrt zum Editor zurück. Wählt den "Player" an und betrachtet die Skript Komponente.

    Das Feld "Txt Win Text" ist noch leer. Und wie ihr euch sicherlich schon denken könnt, ja hier muss das Objekt "txtWinText" aus der Hierarchy rein gezogen werden, damit es entsprechend verknüpft ist.


    Speichert alles ab und testet euer Spiel im Play-Mode.

    Habt ihr alle Münzen eingesammelt, sollte diese Meldung erscheinen:


    Nun fehlt uns nur noch ein letzter Schritt.

    Der Export unseres Spiels und die Weitergabe an andere!




    Weiter geht es in "[Neuling] Roll a Ball Extended Version - Lektion 8 - Exportieren des Spiels + weitere Ideen"

    Willkommen bei "[Neuling] Roll a Ball Extended Version - Lektion 6 - Münzen für den Spieler" 8)

    Diese Lektion setzt Lektion 5 dieser Reihe voraus und baut entsprechend darauf auf.


    Als nächstes wollen wir uns um die Münzen in unserem Spiel kümmern, welcher der Spieler einsammeln muss um das Spiel erfolgreich zu beenden.


    Navigiert in den FBX Ordner und zieht das Objekt "Coin" auf das Spielfeld und ändert die Position der Münze folgendermaßen: "x = 0, y = 0.7, z = 0" die Rotation sollte jeweils auf 0 sein - die Scale (Größen-Werte) sollten bei ca -70, -70 und -13 (mit jeweiligen Nachkommastellen liegen.)

    Gebt dem Coin Objekt eine "Mesh Collider" Komponente.


    Wechselt in den Material Ordner, erstellt ein neues Material mit den farblichen Hex-Wert"987930" und zieht es auf das Coin Objekt in der Szene.

    Wechselt nun zum Prefabs Ordner und zieht dieses Objekt (Coin) vom Hierarchy Fenster in den Prefabs Ordner.


    Erstellt Anschließend in der Hierarchy ein leeres Empty (Rechtsklick => Create Empty) und benennt es "Coins".

    Stellt sicher, dass der Ursprung auf 0 ist und wenn nicht, resettet es. Zieht nun die Münze (Coin) der Szene in das "Coins" Objekt um ein Kind-Element / Kind-Objekt zu erhalten.



    Dupliziert nun das "Coin" Objekt (die Münze) in der Hierarchy, sodass ihr insgesamt 20 Stk als Kind-Objekte habt. Ich übergebe im Folgenden die Positionen der 20 Münzen.

    Die Größe sowie die Rotation bleiben wie im Bild gezeigt die gleichen Werte.

    Es ändert sich nur jeweils im Transform Komponent die "Position".

    Jede Zeile steht für eine Münze - Die Spalten geben die Koordinaten an:


    Position "x" - Wert Position "y" - Wert Position "z" - Wert
    14.87 0.7 4.16
    15.12 3.12 -1.89
    14.32 1.92 9.54
    15.75 1.78 13.19
    14.49 0.7 -14.4
    2.35 0.7 -16.51
    -7.27 0.7 -15.81
    -6.74 0.7 5.57
    5.83 0.7 -5.91
    5.06 0.7 15.9
    -5.49 0.7 12.05
    -12.21 0.7 18.4
    -18.04 0.7 9.24
    -12.53 0.7 0
    -17.7 0.7 -9.84
    -12.02 0.7 -17.83
    -18.95 1.75 -17.31
    -7.91 3.87 13.8
    -14.11 3.87 7.67
    -13.07 3.87 12.79


    Euer Spielfeld sollte nun in etwa so aussehen:

    (Die Benennung dieser Münzen spielen hier keine Rolle)


    Ihr könnt nun das Spiel speichern und im Play-Mode testen.

    Doch... die Münzen sind bisher nur statische Objekte. Beendet den Play-Mode - wir wollen dies nun ändern.


    Die Münzen sollen sammelbar sein und sich zudem drehen.

    Wechselt wieder in den Prefabs Ordner und wählt dort das Objekt "Coin" aus.

    Fügt ihm ein Skript mit dem Namen "Rotator" hinzu.

    Schiebt das Skript wieder in den Scripts Ordner.


    Zum Check könnt ihr nun auch eure Münzen auf dem Spielfeld anklicken (ohne diese zu bewegen).

    Jedes der Münzen hat nun ein Skript, da das Original im Prefabs Ordner ein Skript erhalten hat.


    Wechselt nun zum Ordner mit dem Skript und öffnet dieses.

    Löscht die komplette "void Start()" Methode und fügt diese Zeile in die "void Update()" Methode ein:

    "transform.Rotate(new Vector3(5, 45, 0) * Time.deltaTime);"


    Euer Rotator Skript sollte nun so aussehen:

    Csharp
    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. public class Rotator : MonoBehaviour {
    5. // Update is called once per frame
    6. void Update () {
    7. transform.Rotate(new Vector3(5, 45, 0) * Time.deltaTime);
    8. }
    9. }


    mit "transform.Rotate()" greifen wir auf die Rotation des Objektes zu, welches dieses Skript bekommt. Also in diesem Fall die Münze.

    wir geben dem ganzen einen Vector3, da es sich um ein 3D Objekt handelt, welches sich entsprechend im 3D Raum drehen (rotieren) soll. Die Werte sind x=5, y=45 und z=0 entsprechend.

    Da Update einmal pro Frame aufgerufen wird, wir jedoch die Objekte "Frame-unabhängig" rotieren sehen wollen, multiplizieren wir das ganze noch mit "Time.deltaTime".

    Mehr zu Time.deltaTime hier.


    Speichert das Skript ab und kehrt zum Editor zurück.

    Testet ruhig das Spiel erneut - alle platzierten Münzen sollten sich nun drehen.

    Wenn nicht, haben sie nicht das Skript und sind ebenso nicht synchron zu eurem Prefab.


    Nun kümmern wir uns darum, dass die Münzen einsammelbar werden.

    Hierzu ist ein bisschen Theorie und Hintergrundwissen notwendig.

    Wir wissen bereits, dass die sogenannten "Collider" dafür verantwortlich sind, dass unser 'Player' an diesen abprallt bzw. die Objekte 'bemerkt' und nicht durch diese hindurch rollt.

    Genau diese Collider können (ähnlich wie beim Maker) auf als "Trigger" bei Kontakt mit diesen funktionieren.

    Heißt: Unser Player berührt einen Münzen Collider und da dieser ein "Trigger" ist bzw. diese Eigenschaft von uns bekommt, prüft unser "Player" via Skript, ob es sich um eine Münze handelt und wenn ja, soll diese verschwinden (deaktiviert werden). Wir sammeln sie ja so gesehen ein.


    Hierzu navigieren wir in Unity zu unserem Prefabs Ordner und wählen das Coin Objekt an.

    Schaut euch die "Mesh Collider" Komponente genauer an. Unter der Checkbox "Convex" gibt es auch eine Chekbox "Is Trigger".

    Diese Checkbox benötigen wir - um diese zu aktivieren, wählt "Convex [x]" an und danach "Is Trigger [x]".

    Nun sollte jede Münze auf dem Spielfeld diese Eigenschaften übernommen haben.


    Doch woher weiß nun der Player, dass es sich um eine Münze handelt?

    => Das Geheimnis lautet "Tag's". Wir fügen unserem Prefab "Coin" einen 'Tag' also eine Kennung ähnlich wie #RpgMaker hinzu, damit wir dieses als Münze verifizieren können. (Später im Skript.)


    Um ein 'Tag' zu erstellen, wählt das "Coin" Prefab aus und schaut unter dem Namen oben beim Inspector nach.

    Hier ist eine Bezeichnung "Tag" mit dem Wert "Untagged" (Standardmäßig).

    Wählt nun "Untagged", wodurch sich ein Drop-Down öffnet. Wählt nun "Add Tag ...".

    Klickt auf das kleine Plus um einen neuen Tag hinzuzufügen. Nennt diesen "Coin" und klickt auf "Save".

    Wählt nun erneut euer Prefab Objekt "Coin" aus und klickt erneut auf das Tag Feld mit dem Wert "Untagged".

    Ihr solltet nun euren Tag "Coin" in der Liste vorfinden. => Merke: So werden Tags erstellt, die in Skripts verwendet werden können.

    Wählt nun den Coin Tag aus, so das es so aussieht, wie auf dem Bild:


    Nun sollten ebenso alle Münzen einen "Coin" Tag haben.

    Wählt nun im Scripts Ordner das ControllerPlayer.cs Skript aus und öffnet dieses.


    Wir wissen ja, dass es mit dem Collider und dem Trigger zusammenhängt.

    Suchen wir in der Unity Scripting API finden wir folgendes dazu.

    Wir wollen das Beispiel (ganz unten) übernehmen und schreiben in unser Skript unterhalb der "void FixedUpdate() { ... } " Methode:

    Csharp
    1. void OnTriggerEnter(Collider other)
    2. {
    3. Destroy(other.gameObject);
    4. }


    Nun wüssten wir, wie man das Objekt zerstören könnte. Aber das wollten wir eigentlich nicht. Sinnvoller wäre es dieses zu deaktivieren.

    Daher löschen wir wieder die Zeile:

    Csharp
    1. Destroy(other.gameObject);


    Wir brauchen also eine "If-Abfrage" um den Fall zu überprüfen, "wenn" das Objekt den "Tag = 'Coin' " besitzt, soll es deaktiviert werden.

    Dies kann nun in Unity gesucht werden oder man schaut sich im Editor den Aufbau eines "GameObjects" an. Also eines jeden Objektes in Unity.

    Jedes Objekt kann Komponente haben. Wir greifen nun in unserem Skript über die Funktion "void OnTriggerEnter(Collider other)" mit einer Variable "other" vom Typ "Collider" auf alles weitere zu.

    Wir benötigen aber das gameObject. (Und wir müssen den Tag vergleichen (compare - im Englischen).


    Die Zeilen, die uns noch in unserem Code fehlen sind demnach folgende:

    Csharp
    1. if (other.gameObject.CompareTag("Coin"))
    2. {
    3. other.gameObject.SetActive(false);
    4. }

    Wir vergleichen hier, ob der Tag des berührten Objektes dem Tag "Coin" entspricht und wenn ja, soll er den Status auf "false" also "deaktiviert" setzen.

    Sprich: unsere Münzen sollen deaktiviert werden.


    Dies kann man durch kennen der Methoden die Unity einen bietet herausfinden, durch googeln oder durch die Sctipting API von Unity bzw. Erfahrung mit C#.

    Daher: Auch wenn ggf. meine C# Tutorials noch nicht so weit sind, würden diese hierbei beim Verständnis sicherlich sehr helfen. (Zumindest was Funktionen, if-Abfragen und allgemein die Programmlogik betrifft.)


    Das gesamte Skript sollte nun wie folgt aussehen:


    Speichert es ab und kehrt zu Unity zurück.

    Nun könnt ihr das Spiel testen und die Münzen sollten bei Berührung verschwinden. Zumindest jene, an die man heran kommt.

    Wir haben 3 Münzen, die oberhalb unserer Reichweite liegen.

    Um diese wollen wir uns nun auch noch kümmern.


    Wechselt in den Prefabs Ordner und wählt das Objekt "Elevator" an.

    Markiert die Checkbox "Is Trigger" im "Box Collider" Komponent.

    Da es sich hierbei um ein "Primitiv" Objekt handelt, muss es nicht Convex sein, da ohnehin.

    Erstellt nun wieder einen neuen Tag Namens "Elevator" und übergebt diesen Tag den "Elevator" Objekt. (Analog zu dem Coin Objekt)


    Wechselt nun zu unserem Skript "ControllerPlayer" und öffnet dieses.

    Wir wollen nun den "Elevator" wirklich zum "Aufzug" machen, bzw. einen ähnlichen Effekt beim Berühren geben.

    Wir haben wieder einen Tag vergeben und einen Collider, der als Trigger funktioniert. Demnach brauchen wir eigentlich nur eine weitere Abfrage, die prüft, ob der Tag / das Objekt beim Berühren ein "Elevator" / Aufzug ist.

    Wenn ja, soll er uns nach oben befördern / drücken. Wenn nein, soll nichts passieren, bzw. bei einer Münze (Coin) soll diese deaktiviert werden.


    Wir gehen daher in die Zeile von "void OnTriggerEvent(Collider other)" unterhalb der "if-Abfrage" der 'Coin'.

    Wir fügen folgenden Code ein:

    Csharp
    1. else if (other.gameObject.CompareTag("Elevator"))
    2. {
    3. rb.velocity = new Vector3(0, 0, 0);
    4. rb.AddForce(0.0f, 8, 0.0f, ForceMode.Impulse);
    5. }


    Wir sagen hiermit also: "Wenn es keine Münze ist - 'Ist es ein Objekt mit dem Tag "Elevator" ' ? " Wenn ja:

    Unser Player (der Rigidbody) soll seine Bewegung komplett einstellen (rb.velocity = new Vector3(0, 0, 0);

    Und im Anschluss soll er (wie schon mal realisiert) eine Kraft erhalten. Aber diesmal nach Oben. Diese Kraft /Bewegung soll außerdem "Impulsiv" also plötzlich sein, wie eine Rakete.

    Das war es auch schon.


    Vergesst generell nicht für euch selber Kommentare mit " // .... " in eurem Code zu hinterlegen, sodass ihr entsprechend diesen später wieder versteht.

    (Eine Beschreibung könnt ihr ja anhand meiner Erklärung übernehmen.)


    Euer Skript sollte nun vollständig so aussehen:


    Speichert euer Skript ab und testet nun erneut das Spiel.

    Ihr solltet nun alle Münzen, die bisher erstellt wurden einsammeln können.

    (Die 3 Münzen auf der Plattform, bzw jene, die von der Plattform zu erreichen sind, können über den "Elevator" am Boden erreicht werden, wenn ihr mit dem Player auf diesen rollt).

    Sollte dies nicht funktionieren, prüft, ob dieser wie das Prefab den "Elevator" Tag besitzt und im Collider der "Trigger auf 'Is Trigger [x]' " gesetzt ist.




    Weiter geht es in "[Neuling] Roll a Ball Extended Version - Lektion 7 - Anzeigen der Score sowie Texte"