Modelle platzieren
Aus PantheonWiki
Wenn ihr Blender nutzt, steht euch spätestens mit dem neuen Skript natürlich eine viel komfortablere Möglichkeit zur Verfügung. Aber solltet ihr aus irgendeinem Grund "von Hand" ein Model in eine Map einbauen wollen, ist das auch nicht schwierig.
Ich erkläre euch dies anhand einer der alten Ruchin-Maps und eines kleineren Models.
Inhaltsverzeichnis |
Einleitung
Also wir möchten eine Kerze auf die Theke in Ruchin stellen.
Zuerst kopieren wir alle modelrelevanten Dateien
- .mesh kommt nach \modules\common\models
- .skeleton kommt nach \modules\common\models
- .material kommt nach \modules\common\materials
- .dds kommt nach \modules\common\materials\textures
Falls eure Modelle nicht allgemeingültig sind, kommen sie in ein anderes, spezifisches Modul \modules\minidemo\ z.B.
Die Koordinaten
Als erstes schauen wir mal, wo wir ein Model brauchen. Wir laufen dazu einmal in unserer Map herum, drücken dann F2 um das Debugfenster zu bekommen, und sehen hier die "Playerposition".
Das notiert man sich.
Die Positionierung
Jetzt öffnet man ganz einfach die zur jeweiligen Map gehörigen Skriptdatei. Für die Ruchin-Map in InIngerimmsnamen ist das ruchin.rb in modules\InIngerimmsNamen\scripts\maps\. Man scrollt ganz runter und hofft, dass man ein Editor genommen hat der Scripthighlighting für RubySkripte hat.
Man fügt folgendes ein:
kerze = $AM.createMeshActor("thekenKerze","kerze02.mesh");
kerze.placeIntoScene( 762.0, 460.0, -1612.0, 1.0, 0.0, 0.0, 0.0 );
- Erklärung
kerze (eine Variable, damit man nachher noch Position ändern kann) = $AM.createMeshActor( (einfach ein Codestück das einen neuen Aktor mit einem Mesh erstellt)
"thekenKerze" (unter diesem Namen kann man den Aktor später aus anderen Skripten ansprechen) , "kerze02.mesh" (das Model dass dieser Aktor verwenden soll) );
kerze.placeIntoScene(762.0, 460.0, -1612.0 (gibt eben diese Position an, die wir in Ruchin herausgefunden haben) , 1.0, 0.0, 0.0, 0.0 (Die Rotation der Kerze) );
So das war es jetzt schon. Einfach nochmal starten, und die Kerze erwartet uns.
Wichtig ist noch, dass man nicht zwei gleiche Aktoren macht, also nicht noch einmal in der Map thekenKerze als Name nehmen sondern Kerze01 z.B.
Physik-Proxy (Kollision)
Die Models, die mehr als statischer Landschaftsschmuck sein sollen, müssel als Actor erzeugt werden. Das geht mit setActor, wobei die erste Zeile sinnigerweise die Angaben über das Model enthältsetActor($AM.createMeshActor(" ...
Beim Erstellen des MeshActors kann man neben Name und .mesh-Datei noch zwei weitere Parameter angeben: Die möglichen Physik-Proxies sind:
PhysicsManager::GT_NONE PhysicsManager::GT_BOX PhysicsManager::GT_SPHERE PhysicsManager::GT_CAPSULE PhysicsManager::GT_MESH PhysicsManager::GT_ELLIPSOID PhysicsManager::GT_CONVEXHULL
Und die "Masse" (mass) als Float. 0.0 bedeutet eine endliche Masse, der Körper läßt sich nicht bewegen (auch nicht von der Schwerkraft.
Der Wirt aus der TechDemo soll in einem undurchdringlichen Ellipsoiden stehen, seine Zeile lautet also:
setActor(
$AM.createMeshActor(
"ArnolfGrossschaedel",
"men_wirt_posed.mesh",
PhysicsManager::GT_ELLIPSOID,
0.0))
Mögliche Fehler
- Modell erscheint nicht
Das kann verschiedenste Ursachen haben. Erstmal die Konsole aufmachen und die dort vermutlich stehenden Fehlermeldungen anschauen. Möglicherweise steht dort etwas wie:
./modules/minidemo/scripts/maps/testraum.rb:27undefined method `setPosition' for nil:NilClass ./modules/minidemo/scripts/maps/testraum.rb:27:in `loadMap'./modules/minidemo/scripts/maps/testraum.rb:27undefined method `setPosition' for nil:NilClass
Dann trat beim Erschaffen des Aktors ein Fehler auf, genaueres steht dann in der ogre.log
Error #: 7 Function: ResourceManager::_findResourceData Description: Resource kerze02.mesh not found..
Liegt das Mesh im richtigen Verzeichnis (modules/[Modul]/models) und im richtigen Modul?
- Mein Modell hat keine Textur
Wieder in die ogre.log gucken
Can't assign material kerze02 to SubEntity of kerze02 because this Material does not exist. Have you forgotten to define it in a .material script?
Liegt die Material-Datei im richtigen Verzeichnis (modules/[Modul]/materials)?
