Tabletop Simulator heeft geen elegante oplossing voor een pak kaarten die niet in een vooraf ingestelde vorm zijn. Deze gids laat zien hoe je je eigen kaartspel kunt maken met behulp van aangepaste modellen, een activabundel en wat scripting, zodat je kaarten kunt maken in elke gewenste vorm!
Disclaimer
Deze handleiding vereist enigszins geavanceerde kennis van Tabletop Simulator, Unity, het maken van activabundels en wat lichte 3D-modelleringsvaardigheden. Het is niet mijn bedoeling om uit te leggen hoe je die dingen moet doen. Het vereist ook een beetje LUA-scripting, maar er is een voorbeeld uit de workshop dat de becommentarieerde versie van de scripts bevat, dus het zou hopelijk gemakkelijk moeten zijn om het aan uw behoeften aan te passen. De bedoeling van deze gids is om te laten zien hoe je die dingen kunt gebruiken om een aangepaste set objecten te maken om het gedrag van een set kaarten en een kaartspel na te bootsen.
Introductie
Heb je ooit gemerkt dat je een spel maakte met vreemd gevormde kaarten, en als je ze gaat maken, krijg je een rechthoekige rand rond de randen ervan? ongepast. Misschien heb je enkele aangepaste modellen geïmporteerd om erachter te komen dat je ze niet netjes kunt stapelen, ze door elkaar kunt schudden en ze niet kunt uitdelen aan je spelers. Deze gids wil daar de oplossing voor zijn. Daarin zullen we een activabundel maken met de volgende kenmerken:
- Lijkt een stapel van een aangepast model te zijn
- Wanneer het overeenkomende aangepaste model erin wordt geplaatst of wordt verwijderd, lijkt het alsof de stapel een kopie van dat model wint of verliest
- Accepteer alleen het bijpassende aangepaste model
- Accepteer alleen een maximumbedrag van het overeenkomende aangepaste model
- Alle kenmerken van een tas (shuffle, zoeken, deal, etc.)
In wezen maken we een tas die eruitziet alsof het een normaal spel TTS-kaarten is.
Stap 1: Het aangepaste model
Maak een 3D-model van je kaart in Blender. Doe het zoals je wilt. Ik maak over het algemeen een aangepaste kaart door een afbeelding van de kaart als een vlak te importeren, een nieuwe vert te maken en deze vervolgens te extruderen om de omtrek te tekenen. Dan vul ik het om een vlak te maken, en dan extrudeer ik dat vlak om het wat dikte te geven. Er zijn ook andere manieren om het te doen. Vervolgens pakt u het model UV uit en geeft u het structuur. Nogmaals, er is meer dan één manier om hier een kat te villen. Je kunt één textuur per kaart maken, of je kunt een enkele textuuratlas maken voor alle kaartvlakken en meerdere versies van het model maken en de UV-positie van het gezicht op de atlas verplaatsen. Ik denk dat beide redelijk geldig zijn, maar ik geef er de voorkeur aan om voor elke kaart een andere textuur te maken en slechts één model te gebruiken. VERGEET NIET DE GEZICHTEN DRIEHOEKIG TE MAKEN.
Zodra dat is gebeurd, exporteert u uw model als een .obj
Stap 2: Uw kaarten importeren
Importeer het model in TTS. Klik op Objecten en vervolgens op Componenten > Aangepast > Model. Selecteer je obj in Model/Mesh, en je eerste textuur in Diffuse/Image, en je obj opnieuw in Collider als je dat wilt. Vermoedelijk wil je dat dit speelkaarten zijn, dus verander het Materiaal in Karton op het tabblad Materiaal. Importeer vervolgens het model.
Als je dezelfde textuurmethode gebruikt als ik, waarbij je een enkel model en een unieke textuur voor elk kaartvlak hebt, klik dan met de rechtermuisknop op het model en kies Klonen. Maak zoveel klonen van het model als je van plan bent in je deck te hebben. Voor het voorbeeldproject gebruik ik er maar vijf.
Klik met de rechtermuisknop op elk model en kies Aangepast. Vervang het Diffuus/Afbeeldingsbestand door de verschillende kaartgezichtsstructuren die u hebt gemaakt, zodat al uw kaarten vertegenwoordigd zijn.
Sla je project op en ga dan terug naar Blender.
Stap 3: Het dekmodel maken
Als je weer in Blender bent, open je het model voor je kaart en ga je naar Objectmodus. Bekijk uw kaart vanaf de X- of Y-as. Klik er vervolgens met de rechtermuisknop op en selecteer Objecten dupliceren (Shift+D). Klik onmiddellijk met de rechtermuisknop om het duplicaat in de oorspronkelijke positie te houden.
Gebruik vervolgens het gereedschap Verplaatsen om het op de Z-as omhoog te brengen, zodat het zich bovenop het originele model bevindt. Ik laat er graag een heel klein gat tussen om ze meer op een stapel kaarten in het eindproduct te laten lijken.
Herhaal dit voor elke kaart in je kaartspel, zodat je dat aantal mesh-groepen kaarten in je verzameling hebt.
Deze keer exporteert u het model als een .fbx zodat u de afzonderlijke mesh-groepen behoudt. Op dit punt maak ik liever een variant van de kaarttextuur die de voorkant blanco maakt, maar dat is helemaal aan jou.
Stap 4: Het deck in Unity opzetten
Open het TTS Modding-project in Unity. Maak een map voor uw deckmodel en textuur onder de map Activa. Plaats uw .fbx en textuur in die map.
Klik op uw model en klik vervolgens op Materialen extraheren op het tabblad Materialen in het infovenster.
Open het materiaal dat verscheen en sleep je textuur naar het vak naast Albedo, klik vervolgens op de kleurselectie en stel de kleur in op puur wit.
Ik vind het leuk om het kaartspel een soort effect te geven als het leeg is, zodat het nog steeds zichtbaar is voor de speler, maar er duidelijk geen kaarten in zitten. Maak een nieuw materiaal met de naam Leeg. Kies Vervagen of Transparant voor de weergavemodus, pas de textuur toe op de Albedo-kaart zoals eerder en klik vervolgens op de kleurselectie. Zet het deze keer op rood en laat de Alpha erop vallen zodat je door het materiaal kunt kijken.
Sleep de .fbx naar uw hiërarchie. Het materiaal zou al moeten zijn aangebracht, maar als dit om de een of andere reden niet het geval is, moet u het toepassen. Vouw het object uit. Selecteer alle mesh-groepen die worden onthuld wanneer u het bovenliggende object uitbreidt en sleep het materiaal vervolgens naar het infovenster waar Element 0 staat onder Mesh Renderer.
Klik op het bovenliggende object van uw model en klik vervolgens op Component toevoegen. Voeg een Box Collider toe aan het object. Klik op de knop met het label Edit Collider en gebruik de hendels op de Collider om hem dicht en strak tegen het object aan te trekken. Ik vind dit gemakkelijker om te doen in de isometrische weergave (u kunt dit inschakelen door op de weergave onder het kompas te klikken, het zal waarschijnlijk "Persp" zijn).
Sleep op dit punt het object van uw hiërarchie naar uw map die u hebt gemaakt voor uw model, textuur en materialen om er een prefab van te maken. Klik op de Open Prefab knop in de Inspector zodat u exclusief de Prefab aan het bewerken bent.
Navigeer naar Venster> Animatie> Animatie om het animatievenster te openen. Zorg ervoor dat het bovenliggende object van uw model is geselecteerd. Klik op de knop Maken in het animatievenster en kies vervolgens een locatie om je animaties op te slaan (ik voeg liever een map Animaties toe aan de map waar ik aan werk voor al het andere, zodat de animatiebestanden de hoofdmap niet onoverzichtelijk maken map). Geef je eerste animatie een naam en sla deze op. (Een andere voorkeur van mij is om het te noemen naar het aantal kaarten dat wordt weergegeven, te beginnen met een volledig kaartspel. In dit geval noemde ik het "5")
Klik op de knop Eigenschap toevoegen in het animatievenster en selecteer de eerste mesh > Mesh Renderer > Ingeschakeld.
Doe dit voor elke Mesh in je model zodat het er zo uitziet.
Druk op Ctrl + A om alles te selecteren en vervolgens op Ctrl + C om alle eigenschappen en keyframes te kopiëren. Klik op de vervolgkeuzelijst met de naam van uw animatie en klik op Nieuwe clip maken. Sla de nieuwe animatie op (Met mijn naamgevingsschema heet de nieuwe animatie "4").
Druk op Ctrl + V om de eigenschappen en keyframes van de vorige animatie te plakken. Klik op het selectievakje naast de Mesh Renderer voor de bovenste kaart in het kaartspel.
Verplaats de cursor in de tijdlijn naar de set keyframes aan het einde en schakel vervolgens het selectievakje naast de Mash Renderer voor de bovenste kaart weer uit.
Selecteer alles en kopieer opnieuw en maak een nieuwe animatie (dit keer noemde ik het "3"). Plak de eigenschappen en keyframes en herhaal hetzelfde proces als hiervoor, maar schakel deze keer ook de mesh-renderer uit op de volgende kaart.
Blijf dit doen totdat je klaar bent met het maken van de animatie voor als er maar één kaart is. Kopieer je eigenschappen en keyframes opnieuw en maak een nieuwe animatie (ik noem de mijne "0"). Plak in je eigenschappen en keyframes, maar houd deze keer de laatste kaart ingeschakeld. Klik nogmaals op Eigenschap toevoegen en selecteer de Mesh voor de laatste kaart > Mesh Renderer > Materiaalreferentie.
Klik indien nodig op de pijl om de nieuwe eigenschap uit te vouwen, zodat u de miniatuur van het materiaal kunt zien. Sleep uw lege materiaal naar de eerste en laatste keyframes van de animatie.
Druk op Ctrl+S om uw prefab en animaties op te slaan.
Stap 5: Componenten toevoegen en de activabundel samenstellen
Zorg ervoor dat het bovenliggende object van het model is geselecteerd en klik op Component toevoegen > Animatie. Sleep het animatiebestand dat u voor een volledig kaartspel hebt gemaakt naar het veld Animatie van de component. Wijzig onder Animaties de Grootte in het aantal animaties dat je hebt (in mijn geval 6) en sleep vervolgens elk van je animaties naar de elementen die verschijnen vanaf het volledige kaartspel naar beneden om leeg te zijn.
Klik nogmaals op Component toevoegen en voeg deze keer TTS Asset Bundle Effects toe. Vouw Looping-effecten in deze component uit en wijzig de Grootte in het aantal animaties dat je hebt.
Definieer in elk element een naam voor het looping-effect (ik noem het gewoon naar de animatie), vouw het gedeelte Animator uit, sleep het bovenliggende object van het model naar de animatorcomponent en typ de exacte naam van de animatie voor die staat in Staat naam. Ik doe dit het liefst vanaf het volledige dek tot aan het lege.
Druk op Ctrl + S om uw prefab opnieuw op te slaan. Klik op de prefab in de bestandsbeheerder zodat deze opent in de inspecteur.
Onder aan het voorbeeldvenster in het infovenster zou AssetBundle moeten staan met een vervolgkeuzemenu. Klik daarop en kies Nieuw. Typ een unieke naam in het tekstvak dat verschijnt.
Klik met de rechtermuisknop in de bestandsbeheerder en kies Build AssetBundles. Wacht tot dit klaar is.
Stap 6: Dingen instellen in TTS
Op dit punt bent u klaar om te importeren in TTS. Ga terug naar binnen en selecteer Objecten > Componenten > Aangepast > AssetBundle. Blader naar waar de activabundel is opgeslagen voor het veld Hoofd. Deze worden opgeslagen in het Unity-project in een map met de naam "AssetBundles".
Selecteer uw activabundel, stel het type in op zak en wijzig het materiaal in karton.
Op dit punt kunt u met de rechtermuisknop op uw geïmporteerde activabundel klikken en door de looping-effecten bladeren om ervoor te zorgen dat uw animaties correct worden weergegeven
Soms kan het materiaal op je Asset Bundle er een beetje donker uitzien, moet je misschien je materiaal aanpassen in Unity, of de kleurtint in TTS op je kaarten aanpassen. Dat is jouw keuze.
Stap 7: Scripting
Nu heb je een tas met wat animaties, maar we moeten alle functies scripten. Het voorbeeld Workshop-item heeft een becommentarieerde versie van het script erin, dus raadpleeg dat voor hoe u het uwe kunt instellen, maar ik zal de functies hier kort bespreken.
Het script begint met "function onUpdate()", dit zorgt ervoor dat het spel elk frame controleert. Daaronder hebben we het codeblok dat bepaalt welk Looping-effect moet worden afgespeeld voor elk aantal objecten binnen de activabundel.
De regel "if self.getQuantity() == 0 then" geeft aan of er 0 items in de activabundel zijn, voer dan de volgende regel uit.
De volgende regel "self.AssetBundle.playLoopingEffect(5)" geeft aan dat het 6e looping-effect moet worden afgespeeld als de bovenstaande hoeveelheid wordt gevonden in de inhoud van de activabundel.
De volgende regel "elseif self.getQuantity() == 1 then" stelt dat als er 1 item in de activabundel is, de actie in de volgende regel moet worden uitgevoerd.
De volgende regel "self.AssetBundle.playLoopingEffect(4)" geeft aan dat het 5e looping-effect moet worden afgespeeld als de bovenstaande hoeveelheid wordt gevonden in de inhoud van de activabundel.
Dit gaat door totdat je een vol deck hebt bereikt. Dit zou LoopingEffect(0) of het eerste Looping-effect afspelen.
Als u uw Looping-effecten in Unity instelt, zodat een volledig kaartspel het eerste Looping-effect gebruikt, dan is dit altijd LoopingEffect(0) in uw script en telt het aantal op naarmate het aantal kaarten afneemt.
Het tweede deel van het script voert een controle uit wanneer een speler iets aan de activabundel probeert toe te voegen.
De eerste regel " if (obj.getVar ("objectType") == "ExCard" " kijkt om te zien of de kaart een unieke identificatie in zijn script heeft. "ExCard" kan zijn wat u maar wilt, maar die exacte identificatie moet gedefinieerd in elk van uw kaarten.
De volgende regel "and self.getQuantity() < 5)" controleert of de activabundel minder dan het maximale aantal kaarten bevat. Verander het getal 5 in het maximale aantal kaarten dat je in je kaartspel hebt.
De volgende regel "retourneer dan true end" accepteert het item in de activabundel als aan beide voorwaarden is voldaan.
De laatste regel "return false" zal alle items weigeren die niet aan beide gedefinieerde voorwaarden voldoen.
Open vervolgens de scripteditor op een van uw kaarten en voeg de volgende regel toe:
"objectType = "ExCard" ". ExCard is de unieke identifier waarnaar de Asset Bundle zoekt wanneer iemand er een object aan probeert toe te voegen. Dit kan alles zijn wat je wilt, zolang het maar overeenkomt met wat in het script van de Asset Bundle werd genoemd. Deze regel moet worden toegepast op alle kaarten in je kaartspel.
Op dit punt zou je in staat moeten zijn om je spel op te slaan, de scripts op te slaan, en het zou allemaal moeten werken! Ga je gang en sla je object op en importeer het in je spel!
Dat is alles wat we hiervoor vandaag delen tafelblad Simulator gids. Deze handleiding is oorspronkelijk gemaakt en geschreven door Hobbit hoofd. Als we deze handleiding niet kunnen bijwerken, kunt u de laatste update vinden door deze te volgen link.