Nicht eingeloggt
Registrieren

Einstieg in die Karmaphysik

So, willkommen zum Einsteigertutorial für Karmaobjekte.
Vorweg gesagt sei, dass Karma bzw. Karmaobjekte Objekte sind, die Physikalisch mehr oder wenig korrekt dargestellt werden.
Leider funktioniert dies von Haus aus nicht online, wie man es aber trotzdem zum Laufen bekommt werde ich später noch erklären.


Also gut, starten wir mit einer leeren Map und Subtracten mal einen Raum.
Maße spielen eigentlich keine Rolle, aber um genügend Spielraum zu haben können wir ja mal mit 1024*1024*1024 anfangen.
Als nächstes noch ein, zwei Lights und einen Playerstart und schon haben wir 3/4 der Dinge, die wir benötigen ^^

Als nächstes klicken wir auf den Sphere Builderbrush und nehmen 64 für den Radius und 2 für die SphereExtrapolation.
Adden müssen wir die Kugel nicht, da wir ja keinen Wert auf Aussehen legen und bei einer Kugel eh nachher dem StaticMesh jede beliebige Textur zuweisen können (wenn ihr was komplexeres machen wollt und eventuell mehrer Texturen verwenden wollt, kommt ihr ums Adden nicht rum, aber für eine Demokugel reicht es den Builderbrush in dieser Form zu haben). Nun noch ein Rechtsklick auf den Builderbrush und Convert --> ToStaticMesh.
Package: myLevel
Groupe: none
Nam: Kugel


Somit haben wir das GrundstaticMesh, auf welches wir die Physik anwenden wollen.
Also gehen wir in den StaticMeshBrowser (SMB) und wählen im DropDown Menü das Packet "myLevel" aus.
Nun sollte uns auch schon unser so eben erschaffenes SM angezeigt werden, aber noch ist es nicht zum Einsatz als Karmobjekt bereit.
Um es für den Karamaeinsatz zu gebrauchen müssen wir erst KarmaPrimitives und eine Kollission hinzufügen. Ich werde im folgenden erklären, wie das für simple Objekte und einfache Effekte leicht über die Tools im SMB funktioniert, wenn ihr etwas ganz ausgefallenes mit einer nicht standardisierten Kollision habt (also alles, was sich nicht mit einer Kugel, einem Quader, oder einem Zylinder nähern lässt), könnt ihr natürlich auch über den BuilderBrush eine komplexe Kollision erstellen (erschaffen, Rechtsklick --> SaveBrushAsCollission)

Um nun über die im SMB integrierten Tools unsere Kugel karamfähig zu machen wählen wir zu erst einmal oben View aus und aktivieren:
Show Collission
Show Karma Primitives

Anschließend gehen wir auf Collission Tools und wählen folgende Option aus:
Fit 18-DOP
Das 18 gibt an, dass wir in nächster Nährung eine Kollision und Karma Primitives mit 18 Polygonen um unser SM haben wollen.
Für eine Kugel ist das eine sehr gute Nährung, denn wenn wir weniger nehmen würden, würde entweder ein Zylinder, oder einfach eine Box dabei rauskommen und wenn wir mehr nehmen, dann werden unnötige Polygone eingefügt, die die Qualität auch wieder verschlechtern, spielt ruhig etwas damit herum.
dimokarmatutorial3.jpg
Theoretisch sind wir jetzt im SMB fertig, wer aber pingelig ist, kann bei den Collision Tools noch unter Fit Karma Primitive, sphere auswählen, aber das ist nicht wirklich nötig (der UED wird euch fragen, ob ihr die vorherigen Eintragungen überschreiben wollt, klickt einfach auf ja).
Btw. SMs, die eine angepasste Kollission haben und karamafähig sind, werden mit eine * im SM Browser gekennzeichnet.

So, jetzt geht’s in die letzte Etappe.
Mit unserem SM ausgewählt machen wir einen Rechtsklick in unsere Map und wählen AddKarmaActor aus.
Nun sollte unsere Kugel erscheinen und wie üblich bewegbar sein.
Das es ein SM ist, kann es ohne einen Rebuild der Geometrie bewegt werden.
die Arbeit ist aber noch nicht ganz getan, denn noch würde es nicht funktionieren.
Um das zu beheben öffnen wir die Properties der Kugel und gehen zu
Karma --> KParms --> KarmaParms.myLevel.KarmaParms0 --> KarmaParms
Dort müssen wir folgende einträge ändern:
bHighDetailOnly --> False
bKAllowRotate --> True
bKStayUpright --> True
KStartEnabled (etwas weiter unten) --> True
Die Einstellungen sind eigentlich fast selbsterklärend.
bHighDetail sorgt dafür, dass es nur funktioniert, wenn der Spieler in den Spieleoptionen die höchste Detailstufe ausgewählt hat.
bKAllowRotate erlaub eine Rotation um die z-Achse, wenn bKStayUpright aktiviert ist
bKStayUpright sorgt dafür, dass der Actor sich wieder aufstellt (da dies bei einer Kugel nicht der Fall sein sollte stellen wir die StyUrightStiffness auf 0.1)
KStartEnabled sorgt dafür, dass das Objekt von Anfang an aktiv ist und sich bewegt (z.B. runterfällt). Ist diese Option deaktiviert wird das Karmaobjekt erst dann physikalisch berechnet, wenn man darauf schießt.
dimokarmatutorial4.jpg

So, das war’s, jetzt bleibt nur noch ein RebuildAll (eventuelle Fehlermeldungen ignorieren) und das Level starten.
Durch das eingeben von "loaded" in die Konsole können wir schnell testen, ob alles geht, denn Karmaobjekte reagieren nicht auf Kugeln aus der AssaultRifle (bei KStartEnabled = False können auch diese Kugeln das Objekt aktivieren).
Jetzt sollte eigentlich alles funktionieren.


Und wie immer am Ende meiner Tutorials kommen die bekannten Probleme (dass ich immer solche Tutorials schreibe, bei denen so ein Anhang nötig ist oO):
Karmaobjekte werden nicht online funtionieren. Zumindest nicht ohne weiteres.
Ihre Kollission wird vom Server übertragen werden, aber der Spieler sieht ihre Position nicht.
Einzige Abhilfe ist das angehängte Skript "KarmaThing", oder auch karmaonline. Wenn es im Systemordner von UT platziert wurde und im ActorClassBrowser (ACB) geladen wurde, kann man es im ACB unter KActor --> KarmaThing gefunden werden.
Einfach in die Map setzen und unter Display --> StaticMesh eure SM eintragen (im SMB markieren udn auf "Use" klicken).
Allerdings war es mir nicht möglich den Autor des Skriptes ausfindig zu machen, lediglich einen anderen Mapper, der dieses Skript in seiner Map verwendet hat und sagte, dass der Autor es zum freien gebrauch freigegeben hätte.
Die Verbreitung des Skriptes hier erfolgt mit Berufung auf diese Aussage, deren Wahrheitsgehalt ich nicht prüfen kann.

Ansonsten:
Danke fürs Lesen, viel Spaß mit der Physik und machts gut

Grüße DerDimö (aka. Pandemonium, sry. das muss sein )

Das Attachment für dieses Tutorial gibt es hier.

Autor: DerDimö
Bilder: DerDimö
Skript: Unbekannt, frei verfügbar (näheres im Tutorial)