Tabletop Simulator hat keine elegante Lösung für ein Kartenspiel, das keine voreingestellte Form hat. Diese Anleitung zeigt, wie Sie Ihr eigenes Kartendeck mit benutzerdefinierten Modellen, einem Asset-Bundle und einigen Skripten erstellen, damit Sie Karten in jeder gewünschten Form erstellen können!
Haftungsausschluss
Dieser Leitfaden erfordert leicht fortgeschrittene Kenntnisse über Tabletop Simulator, Unity, das Erstellen von Asset-Bundles und einige leichte 3D-Modellierungsfähigkeiten. Es ist nicht meine Absicht zu erklären, wie diese Dinge zu tun sind. Es erfordert auch ein wenig LUA-Skripting, aber es gibt ein mitgeliefertes Beispiel aus dem Workshop, das die kommentierte Version der Skripte enthält, also sollte es hoffentlich einfach sein, es für Ihre Bedürfnisse zu modifizieren. Die Absicht dieses Handbuchs ist es, zu zeigen, wie man diese Dinge verwendet, um einen benutzerdefinierten Satz von Objekten zu erstellen, um das Verhalten eines Satzes von Karten und eines Decks nachzuahmen.
Einleitung
Haben Sie schon einmal ein Spiel mit seltsam geformten Karten erstellt, und wenn Sie sie erstellen, erhalten Sie einen rechteckigen Rand an den Rändern? Unziemlich. Vielleicht haben Sie einige benutzerdefinierte Modelle importiert, nur um herauszufinden, dass Sie sie nicht ordentlich stapeln, mischen und an Ihre Spieler verteilen können. Dieser Ratgeber soll Abhilfe schaffen. Darin erstellen wir ein Asset-Bundle mit den folgenden Funktionen:
- Scheint ein Stapel eines benutzerdefinierten Modells zu sein
- Wenn das passende benutzerdefinierte Modell darin platziert oder entfernt wird, scheint der Stapel eine Kopie dieses Modells zu erhalten oder zu verlieren
- Akzeptieren Sie nur das passende benutzerdefinierte Modell
- Akzeptieren Sie nur eine maximale Menge des passenden benutzerdefinierten Modells
- Alle Funktionen einer Tasche (Mischen, Suchen, Geben usw.)
Im Wesentlichen stellen wir eine Tasche her, die wie ein normales TTS-Kartenspiel aussieht.
Schritt 1: Das benutzerdefinierte Modell
Erstellen Sie ein 3D-Modell Ihrer Karte in Blender. Mach es wie du willst. Im Allgemeinen erstelle ich eine benutzerdefinierte Karte, indem ich ein Bild der Karte als Ebene importiere, einen neuen Vert erstelle und ihn dann extrudiere, um den Umriss zu zeichnen. Dann fülle ich es, um eine Ebene zu erstellen, und extrudiere diese Ebene dann, um ihr eine gewisse Dicke zu verleihen. Es gibt auch andere Möglichkeiten, dies zu tun. Dann wickeln Sie das Modell mit UV aus und texturieren es. Auch hier gibt es mehr als eine Möglichkeit, eine Katze zu häuten. Sie können entweder eine Textur pro Karte erstellen oder einen einzigen Texturatlas für alle Kartenseiten erstellen und mehrere Versionen des Modells erstellen und die UV-Position der Seite auf dem Atlas verschieben. Ich denke, beides ist ziemlich gültig, aber ich bevorzuge es, für jede Karte eine andere Textur zu machen und nur ein Modell zu verwenden. VERGESSEN SIE NICHT, GESICHTER ZU TRIANGULIEREN.
Sobald dies erledigt ist, exportieren Sie Ihr Modell als .obj
Schritt 2: Importieren Sie Ihre Karten
Importieren Sie das Modell in TTS. Klicken Sie auf Objekte und dann auf Komponenten > Benutzerdefiniert > Modell. Wählen Sie Ihr obj in Model/Mesh und Ihre erste Textur in Diffuse/Image und Ihr obj erneut in Collider, wenn Sie möchten. Vermutlich möchten Sie, dass dies Spielkarten sind, also ändern Sie das Material auf Karton auf der Registerkarte Material. Importieren Sie dann das Modell.
Wenn Sie dieselbe Texturierungsmethode wie ich verwenden, bei der Sie ein einzelnes Modell und eine einzigartige Textur für jede Kartenseite haben, klicken Sie mit der rechten Maustaste auf das Modell und wählen Sie Klonen. Machen Sie so viele Klone des Modells, wie Sie in Ihrem Deck haben möchten. Für das Beispielprojekt verwende ich nur fünf.
Klicken Sie mit der rechten Maustaste auf jedes Modell und wählen Sie Benutzerdefiniert. Ersetzen Sie die Diffuse/Image-Datei durch die verschiedenen Oberflächentexturen der Karten, die Sie erstellt haben, damit alle Ihre Karten dargestellt werden.
Speichern Sie Ihr Projekt und gehen Sie dann zurück zu Blender.
Schritt 3: Erstellen des Deckmodells
Wenn Sie wieder in Blender sind, öffnen Sie das Modell für Ihre Karte und gehen Sie in den Objektmodus. Betrachten Sie Ihre Karte entweder von der X- oder Y-Achse aus. Klicken Sie dann mit der rechten Maustaste darauf und wählen Sie Objekte duplizieren (Umschalt+D). Klicken Sie sofort mit der rechten Maustaste, um das Duplikat an der ursprünglichen Position zu belassen.
Verwenden Sie dann das Verschiebewerkzeug, um es auf der Z-Achse anzuheben, sodass es sich über dem ursprünglichen Modell befindet. Ich lasse gerne eine sehr kleine Lücke zwischen ihnen, damit sie im fertigen Produkt eher wie ein Stapel Karten aussehen.
Wiederholen Sie dies für jede Karte in Ihrem Deck, damit Sie diese Menge an Mesh-Gruppen von Karten in Ihrer Sammlung haben.
Exportieren Sie dieses Mal das Modell als .fbx, damit Sie die separaten Mesh-Gruppen beibehalten. An dieser Stelle ziehe ich es vor, eine Variante der Kartentextur zu erstellen, die die Vorderseite leer macht, aber das liegt ganz bei Ihnen.
Schritt 4: Einrichten des Decks in Unity
Öffnen Sie das TTS-Modding-Projekt in Unity. Erstellen Sie im Ordner „Assets“ einen Ordner für Ihr Terrassenmodell und Ihre Textur. Platzieren Sie Ihre .fbx und Textur in diesem Ordner.
Klicken Sie auf Ihr Modell und dann im Inspektor auf der Registerkarte Materialien auf Materialien extrahieren.
Öffnen Sie das angezeigte Material und ziehen Sie Ihre Textur in das Feld neben Albedo, klicken Sie dann auf die Farbauswahl und stellen Sie die Farbe auf reines Weiß ein.
Ich gebe dem Stapel gerne einen Effekt, wenn er leer ist, so dass er für den Spieler immer noch sichtbar ist, aber eindeutig keine Karten enthält. Erstellen Sie ein neues Material namens Leer. Wählen Sie entweder Fade oder Transparent für den Rendering-Modus, wenden Sie die Textur wie zuvor auf die Albedo-Map an und klicken Sie dann auf die Farbauswahl. Stellen Sie es dieses Mal auf Rot und lassen Sie das Alpha darauf fallen, damit Sie durch das Material sehen können.
Ziehen Sie die .fbx-Datei in Ihre Hierarchie. Das Material sollte bereits aufgetragen sein, aber wenn dies aus irgendeinem Grund nicht der Fall ist, müssen Sie es anwenden. Erweitern Sie das Objekt. Wählen Sie alle Mesh-Gruppen aus, die angezeigt werden, wenn Sie das übergeordnete Objekt erweitern, und ziehen Sie dann das Material in den Inspector, wo Element 0 unter Mesh Renderer steht.
Klicken Sie auf das übergeordnete Objekt Ihres Modells und dann auf Komponente hinzufügen. Fügen Sie dem Objekt einen Box Collider hinzu. Klicken Sie auf die Schaltfläche mit der Bezeichnung Collider bearbeiten und verwenden Sie die Griffe am Collider, um ihn nahe und dicht an das Objekt heranzuziehen. Ich finde dies einfacher in der isometrischen Ansicht (Sie können dies aktivieren, indem Sie auf die Ansicht unter dem Kompass klicken, es wird wahrscheinlich „Persp“ sein).
Ziehen Sie an dieser Stelle das Objekt aus Ihrer Hierarchie in Ihren Ordner, den Sie für Ihr Modell, Ihre Textur und Ihre Materialien erstellt haben, um daraus ein Prefab zu erstellen. Klicken Sie im Inspektor auf die Schaltfläche Prefab öffnen, damit Sie ausschließlich das Prefab bearbeiten.
Navigieren Sie zu Fenster > Animation > Animation, um das Animationsfenster aufzurufen. Stellen Sie sicher, dass das übergeordnete Objekt Ihres Modells ausgewählt ist. Klicken Sie im Animationsfenster auf die Schaltfläche Erstellen und wählen Sie dann einen Speicherort für Ihre Animationen (ich ziehe es vor, einen Animationsordner zu dem Ordner hinzuzufügen, aus dem ich für alles andere arbeite, damit die Animationsdateien den Hauptordner nicht überladen Mappe). Benennen Sie Ihre erste Animation und speichern Sie sie. (Eine weitere Vorliebe von mir ist es, es nach der Anzahl der Karten zu benennen, die angezeigt werden, beginnend mit einem vollen Stapel. In diesem Fall habe ich es „5“ genannt.)
Klicken Sie im Animationsfenster auf die Schaltfläche Eigenschaft hinzufügen und wählen Sie das erste Mesh > Mesh-Renderer > Aktiviert aus.
Tun Sie dies für jedes Mesh in Ihrem Modell, damit es so aussieht.
Drücken Sie Strg + A, um alle auszuwählen, und dann Strg + C, um alle Eigenschaften und Keyframes zu kopieren. Klicken Sie auf das Dropdown-Menü mit dem Namen Ihrer Animation und dann auf Neuen Clip erstellen. Speichern Sie die neue Animation (Bei meinem Namensschema heißt die neue Animation „4“).
Drücken Sie Strg + V, um die Eigenschaften und Keyframes aus der vorherigen Animation einzufügen. Klicken Sie auf das Kontrollkästchen neben dem Mesh-Renderer für die oberste Karte im Stapel.
Bewegen Sie den Mauszeiger in der Timeline auf den Keyframe-Satz am Ende und deaktivieren Sie dann wieder das Kontrollkästchen neben dem Mash-Renderer für die oberste Karte.
Wählen Sie alles aus und kopieren Sie es erneut und erstellen Sie eine neue Animation (diesmal habe ich sie „3“ genannt). Fügen Sie die Eigenschaften und Keyframes ein und wiederholen Sie den Vorgang wie zuvor, deaktivieren Sie diesmal jedoch auch den Mesh-Renderer auf der nächsten Karte.
Fahren Sie damit fort, bis Sie mit der Erstellung der Animation fertig sind, wenn nur eine Karte vorhanden ist. Kopieren Sie Ihre Eigenschaften und Keyframes erneut und erstellen Sie eine neue Animation (ich nenne meine „0“). Fügen Sie Ihre Eigenschaften und Keyframes ein, aber lassen Sie diesmal die letzte Karte aktiviert. Klicken Sie erneut auf Eigenschaft hinzufügen und wählen Sie das Mesh für die letzte Karte > Mesh-Renderer > Materialreferenz aus.
Klicken Sie bei Bedarf auf den Pfeil, um die neue Eigenschaft zu erweitern, damit Sie die Miniaturansicht des Materials sehen können. Ziehen Sie Ihr leeres Material per Drag & Drop in den ersten und letzten Keyframe der Animation.
Drücken Sie Strg+S, um Ihr Prefab und Ihre Animationen zu speichern.
Schritt 5: Hinzufügen von Komponenten und Erstellen des Asset-Bundles
Stellen Sie sicher, dass das übergeordnete Objekt des Modells ausgewählt ist, und klicken Sie auf Komponente hinzufügen > Animation. Ziehen Sie die Animationsdatei, die Sie für ein vollständiges Deck erstellt haben, in das Animationsfeld der Komponente. Ändern Sie unter Animationen die Größe auf die Anzahl der Animationen, die Sie haben (in meinem Fall 6), und ziehen Sie dann jede Ihrer Animationen in die Elemente, die beginnend mit dem vollen Deck bis zum leeren angezeigt werden.
Klicken Sie erneut auf Komponente hinzufügen und fügen Sie dieses Mal TTS Asset Bundle Effects hinzu. Erweitern Sie Schleifeneffekte in dieser Komponente und ändern Sie die Größe auf die Anzahl der vorhandenen Animationen.
Definieren Sie in jedem Element einen Namen für den Schleifeneffekt (ich nenne ihn einfach nach der Animation), erweitern Sie den Animator-Bereich, ziehen Sie das übergeordnete Objekt des Modells in die Animator-Komponente und geben Sie den genauen Namen der Animation für diesen Zustand ein Staatsname. Ich ziehe es vor, dies vom vollen Deck bis zum leeren zu tun.
Drücken Sie Strg + S, um Ihr Prefab erneut zu speichern. Klicken Sie im Dateimanager auf das Prefab, damit es sich im Inspektor öffnet.
Am unteren Rand des Vorschaufensters im Inspektor sollte AssetBundle mit einem Dropdown-Menü angezeigt werden. Klicken Sie darauf und wählen Sie Neu. Geben Sie einen eindeutigen Namen in das angezeigte Textfeld ein.
Klicken Sie mit der rechten Maustaste in den Dateimanager und wählen Sie AssetBundles erstellen. Warten Sie, bis dies abgeschlossen ist.
Schritt 6: Dinge in TTS einrichten
An diesem Punkt können Sie in TTS importieren. Gehen Sie zurück und wählen Sie Objekte > Komponenten > Benutzerdefiniert > AssetBundle. Navigieren Sie zum Speicherort des Asset-Bundles für das Hauptfeld. Diese werden im Unity-Projekt in einem Ordner namens „AssetBundles“ gespeichert.
Wählen Sie Ihr Asset-Bundle aus, stellen Sie seinen Typ auf Tasche und ändern Sie sein Material auf Karton.
An dieser Stelle können Sie mit der rechten Maustaste auf Ihr importiertes Asset-Bundle klicken und durch die Schleifeneffekte blättern, um sicherzustellen, dass Ihre Animationen richtig angezeigt werden
Manchmal kann das Material auf Ihrem Asset-Bundle etwas dunkel erscheinen, Sie müssen Ihr Material möglicherweise in Unity anpassen oder den Farbton in TTS auf Ihren Karten entsprechend ändern. Wie du willst.
Schritt 7: Skripterstellung
Jetzt haben Sie eine Tasche mit einigen Animationen, aber wir müssen alle Funktionen skripten. Das Beispiel-Workshop-Element enthält eine kommentierte Version des Skripts, also beziehen Sie sich bitte darauf, wie Sie Ihr Skript einrichten, aber ich werde die Funktionen hier kurz behandeln.
Das Skript beginnt mit „function onUpdate()“, dadurch führt das Spiel in jedem Frame eine Überprüfung durch. Darunter haben wir den Codeblock, der vorschreibt, welcher Looping-Effekt für jede Anzahl von Objekten im Asset-Bundle abgespielt werden soll.
Die Zeile „if self.getQuantity() == 0 then“ gibt an, wenn das Asset-Bundle 0 Elemente enthält, dann führen Sie die folgende Zeile aus.
Die folgende Zeile „self.AssetBundle.playLoopingEffect(5)“ besagt, dass der 6. Looping-Effekt abgespielt werden soll, wenn die obige Menge im Inhalt des Asset-Bundles gefunden wird.
Die nächste Zeile „elseif self.getQuantity() == 1 then“ besagt, dass, wenn es 1 Element im Asset-Bundle gibt, die Aktion in der folgenden Zeile ausgeführt wird.
Die folgende Zeile „self.AssetBundle.playLoopingEffect(4)“ besagt, dass der 5. Looping-Effekt abgespielt werden soll, wenn die obige Menge im Inhalt des Asset-Bundles gefunden wird.
Dies wird fortgesetzt, bis Sie ein volles Deck erreichen. Dies würde LoopingEffect(0) oder den ersten Looping-Effekt spielen.
Wenn Sie Ihre Looping-Effekte in Unity so einrichten, dass ein vollständiges Deck den ersten Looping-Effekt verwendet, wird es in Ihrem Skript immer LoopingEffect(0) sein, und die Zahl wird erhöht, wenn die Anzahl der Karten verringert wird.
Der zweite Teil des Skripts führt jedes Mal eine Überprüfung durch, wenn ein Spieler versucht, dem Asset-Bundle etwas hinzuzufügen.
Die erste Zeile „if (obj.getVar(“objectType“) == „ExCard““ prüft, ob die Karte eine eindeutige Kennung in ihrem Skript hat. „ExCard“ kann alles sein, was Sie wollen, aber genau diese Kennung muss abgerufen werden in jeder Ihrer Karten definiert.
Die nächste Zeile „and self.getQuantity() < 5)“ überprüft, ob das Asset-Bündel weniger als die maximale Anzahl an Karten enthält. Ändere die Zahl 5 auf die maximale Anzahl an Karten, die du in deinem Deck hast.
Die folgende Zeile „then return true end“ nimmt den Artikel in das Asset-Bundle auf, wenn beide Bedingungen erfüllt sind.
Die letzte Zeile „return false“ weist alle Artikel zurück, die nicht beide definierten Bedingungen erfüllen.
Öffnen Sie als Nächstes den Skripteditor auf einer Ihrer Karten und fügen Sie die folgende Zeile hinzu:
„objectType = „ExCard““. ExCard ist die eindeutige Kennung, nach der das Asset Bundle sucht, wenn jemand versucht, ihm ein Objekt hinzuzufügen. Dies kann alles sein, was Sie wollen, solange es mit dem übereinstimmt, was im Skript des Asset-Bundles aufgerufen wurde. Diese Linie muss auf alle Karten in Ihrem Deck angewendet werden.
An diesem Punkt sollten Sie in der Lage sein, Ihr Spiel zu speichern, die Skripte zu speichern, und alles sollte funktionieren! Gehen Sie voran und speichern Sie Ihr Objekt und importieren Sie es in Ihr Spiel!
Das ist alles, was wir heute dafür teilen Tabletop Simulator führen. Dieses Handbuch wurde ursprünglich erstellt und geschrieben von Hobbit-Kopf. Falls wir dieses Handbuch nicht aktualisieren, finden Sie das neueste Update, indem Sie diesen folgen Link.