Autós szimuláció Blenderben
A blender GE tartalmaz egy beépített autó szimulátort. Az őszintét megmondva nem vagyok elszálva tőle, de azért nem annyira katasztrófa.
A használata viszont nem egyszerű, és igényel némi jártasságot a programozásban. Hogy azok is tudjanak szimulációt készíteni, akik nem kívánnak elmélyedni a programozásban, ősszeállítottam egy kis kódot, amit felhasználva mindenki saját szája íze szerint készíthet auós játékokat programozás nélkül.
A kaszni
A Blenderben el kell készíts egy nem túl sok poly-ból álló vázat, és 4 kereket ezeket fel kell textúrázd. Tegyél alá valamilyen pályát. Legrosszabb esetben egy plane-t, amin textúrában van az út megrajzolva.
A kerekeket pontosan így kell elnevezned: jobbelso, balelso, jobbhatso, balhatso. (Igen, csupa kis betűvel!) Ha nincsenek ilyen nevű objektumok, akkor a kocsi nem igazán fog menni.
(Előfordulhat, hogy más nevet akarsz adni a kerekeknek (pl. mert több autód is van egy kétjátékosos versenyhez), ekkor a property-k közé sztring típussal fel kell venni a kerék átnevezéseket. Például, ha a jobb hátsó kereket te auto2_jh -nak akarod hívni, akkor egy jobbhatso sztring property-be az auto2_jh szöveget kell felvenni.)
Ezek után már csak hozzá kell adni a python scriptet. Menj a text editor-ba, kattints az ADD NEW-ra, nevezd el kocsi -nak és másold be ezt a kódot:
# MsV 2010 v0.2 import PhysicsConstraints import GameLogic cont = GameLogic.getCurrentController() chassis = cont.owner chassis.applyImpulse([0.0, 0.0, 0.0], [0.0, 0.0, 0.0]) try: init = chassis["init"] except: init = False if not init: chassis["init"] = True chassis["cid"] = PhysicsConstraints.createConstraint(chassis.getPhysicsId(),0,11).getConstraintId() vehicle = PhysicsConstraints.getVehicleConstraint(chassis["cid"]) scene = GameLogic.getCurrentScene() try: felfuggesztes = chassis["felfuggesztes"] except: felfuggesztes = 1.2 try: oldaltav = chassis["oldaltav"] except: oldaltav = 1.1 try: elsotav = chassis["elsotav"] except: elsotav = 2.0 try: hatsotav = chassis["hatsotav"] except: hatsotav = 1.7 try: je = chassis["jobbelso"] except: je = "jobbelso" try: be = chassis["balelso"] except: be = "balelso" try: jh = chassis["jobbhatso"] except: jh = "jobbhatso" try: bh = chassis["balhatso"] except: bh = "balhatso" try: vehicle.addWheel(scene.objects[ "OB"+je ], [oldaltav, elsotav, 0.0], [0, 0, -1], [-1, 0, 0], felfuggesztes, 0.5, 1) vehicle.addWheel(scene.objects[ "OB"+be ], [-oldaltav, elsotav, 0.0], [0, 0, -1], [-1, 0, 0], felfuggesztes, 0.5, 1) vehicle.addWheel(scene.objects[ "OB"+jh ], [oldaltav, -hatsotav, 0.0], [0, 0, -1], [-1, 0, 0], felfuggesztes, 0.5, 0) vehicle.addWheel(scene.objects[ "OB"+bh ], [-oldaltav, -hatsotav, 0.0], [0, 0, -1], [-1, 0, 0], felfuggesztes, 0.5, 0) except: chassis["init"] = False else: vehicle = PhysicsConstraints.getVehicleConstraint(chassis["cid"]) try: iranytartas = chassis["iranytartas"] except: iranytartas = 0.95 try: fordulekonysag = chassis["fordulekonysag"] except: fordulekonysag = 0.99 chassis["fordulas"] *= iranytartas if chassis["fordulas"] < -1: chassis["fordulas"] = -fordulekonysag if chassis["fordulas"] > 1: chassis["fordulas"] = fordulekonysag for x in range(2): vehicle.setSteeringValue(chassis["fordulas"],x) for x in range(4): vehicle.applyEngineForce(chassis["nyomatek"]*.4,x) try: hatekonysag = chassis["hatekonysag"] except: hatekonysag = 0.1 try: merevseg = chassis["merevseg"] except: merevseg = 10.0 try: csillapitas = achassis["csillapitas"] except: csillapitas = 1.3 try: nyomas = chassis["nyomas"] except: nyomas = 2.4 try: surlodas = chassis["surlodas"] except: surlodas = 100.0 for x in range(4): vehicle.setRollInfluence(hatekonysag,x) vehicle.setSuspensionStiffness(merevseg,x) vehicle.setSuspensionDamping(csillapitas,x) vehicle.setSuspensionCompression(nyomas,x) vehicle.setTyreFriction(surlodas,x)
Állítsuk be, hogy a kasznihoz mindig fusson ez a kód, és állítsuk be a kaszni GE paramétereit a kép alapján:
A kasznihoz fel kell venni a képen látható 2 proprty-t: nyomatek, fordulas. A nyomaték a motor nyomatéka, negadív szám esetén lassul, ill. hátrafelé megy. A fordulás azt jelenti, hogy merre fordul (-1 és + között).
Ha hiszed, ha nem a kocsi már működik. Ha megnyomod a -t a kocsi szépen araszol. (Ha fordítva tetted fel a kasznit, akkor hátrafelé :) )
Persze azért csak jobb lenne, ha irányítani is lehetne... de nemsokára az is meg lesz.
Ha a kerekek nincsenek jó helyen, akkor 3 property-vel igazíthatod be: oldaltav, elsotav, hatsotav, felfuggesztes. Ezek rendre a kerekek távolsága a középvonaltól, az első kerekek mennyivel legyenek előrébb a középpontnál, a hásó kerekek mennyivel legyenek hátrébb a középpontnál, és a kerekek milyen magasan legyenek.
Mire minden jó méretű lesz, az eltarthat egy darabig, de nem vészes. Viszont fogadj el egy jó tanácsot. Ha összeraktad eddig, és nem klappol, mert más méretekkel dolgoztál, akkor ne a paraméreteket állogasd először, mert mindent (magasság, nyomaték, rádiusz, stb.) újra be kell hangolnod és az nagy meló, inkább lépj edit módba, és a kocsit méretezd át, hogy a kerekek nagyjából jó helyen legyenek, majd a kerekek méretét is növeld arányosra, és ha itt még mindig korrigálni kell, akkor állíts (mostmár sokkal kisebbet) a paramétereken. Így nem kell mindent átállítanod.
Kormányzás
A kormányozáshoz a fordulas property-t kell a billentyűleütéseknek megfelelően változtatni a kasznin.Mostmár forgolódhatunk is a kocsival...
Gáz, fék
A motor nyomatékát tudod állítani a billentyűlenyomásoknak megfelelően. Ehhez a nyomatek property-t kell változtatni a kasznin, méghozzá úgy, hogy amíg nyomjuk a gombot, addig magas legyen a nyomaték, amikor elengedjük, akkor viszont essen le nullára. (A kocsi nem fog megállni, mert viszi a lendület, csak a gázról vettük le a lábunkat.)
Nincs más hátra, egy fifikás pályát kell építenünk, hogy élvezkedhessünk kicsit :)
Extrák
Néhány extra paramétert is felvehetsz:
iranytartas (0.95) - minél kisebb, annál gyorsabban áll egyenesbe a kocsi
fordulekonysag (0.99) - mennyire lehet eltekerni a kormányt (radiánban)
hatekonysag (0.1) - a motor milyen arányban adja át a nyomatékot a kerekeknek
merevseg (10.0) - felfüggesztés merevsége
csillapitas (1.3) - lengéscsillapító eggyütt hatója
nyomas (2.4) - keréknyomás
surlodas (100.0) - a kerekek súrlódása
Ezeket nem kell felvenni, de ha felveszed, akkor a program figyelembe veszi. Így akár dinamikusan is tudod változtatni a súrlódását, ha a kocsi le-touch-csol egy jeges elemet...
Feltettem egy minta fájlt tutor__car.blend néven a letölthető fájlok közé. (Vigyázz, nagyon gagyi a modell!)