Kezdőoldal » Számítástechnika » Programozás » Unity - Configurable Joint...

Unity - Configurable Joint -al működő autó kerék inog, kipördül, remeg, létezik más megoldás a meglévő mellett?

Figyelt kérdés

A probléma látom közismert, és eddig úgy tűnik, hogy egyetlen olyan megoldást találtam, ami látszólag helyrehozza a problémát, még ha nem is 100% -ban, de ezzel már el tudom érni a kívánt hatást.

Egyszerűen Configurable Joint -al ellátott négy gyerek kereket rögzítek egy szülő objektumhoz, ami az autó fő testét reprezentálja. Tehát ilyen a hierarchia:


Car:

-Body

-Wheel1

-Wheel2

-Wheel3

-Wheel4


A Car mint szülő tartalmaz egy Rigidbody -t 1500 kg, egy box collidert, valamint egy egyszerű scriptet, amivel vezérlem az autót. A Car -ban található gyerek Body csak a vizuális megjelenítésért felel, tehát Mesh Filtert és Mesh Renderert használ, ez egy Cube, ami megfelel a Car -ban megadott box collider méretének. Mind a 4 darab kerék Configurable Joint -ot használ, ezek egyenként 20 kg. Ezek vizuálisan hengerek, amik 90 fokban vannak elforgatva, de gömb collidert használnak. A hátsó két kerék mindene Locked, kivéve az "Angular Y Motion" az Free, mivel első kerék meghajtású az autó, így az első két kerék legtöbb tulajdonsága szintén Locked, kivéve az "Angular Y Motion" és az "Angular X Motion" az Free. A további finomhangolásokat elvégeztem, vagyis mind a 4 kerék egyéb tulajdonságai:


Angular X Drive:

-Position Spring: 1000

-Position Damper: 100


Angular YZ Drive:

-Position Spring: 0

-Position Damper: 10


A többi alap, nem nyúltam semmihez, an Anchor értékek természetes 0, 0, 0, és a Connected Body a Car (Rigidbody). A Script a következőt tartalmazza, néhány változó és referencia a Rigidbody és Joint -ra:


float horizontalInput;

float verticalInput;

[SerializeField] Rigidbody wheel1Rigid;

[SerializeField] Rigidbody wheel2Rigid;

[SerializeField] ConfigurableJoint wheel1Joint;

[SerializeField] ConfigurableJoint wheel2Joint;


Majd FixedUpdate -n belül kezelem a forgásokat:


horizontalInput = Input.GetAxisRaw("Horizontal");

verticalInput = Input.GetAxisRaw("Vertical");


wheel1Joint.targetAngularVelocity = new Vector3(0f, verticalInput * 300f, 0f);

wheel2Joint.targetAngularVelocity = new Vector3(0f, verticalInput * 300f, 0f);

wheel1Joint.targetRotation = Quaternion.Euler(horizontalInput * 35f, 0f, 0f);

wheel2Joint.targetRotation = Quaternion.Euler(horizontalInput * 35f, 0f, 0f);



A probléma az, hogy a kerekek kibillennek olyan irányba is, amik tiltottak, ez főleg kanyarodsnál nagyon szembetűnő, jobbik esetben csak nagyon remegnek, billegnek, de a legzavaróbb, amikor teljesen kipördülnek a saját tengelyük körül, ekkor a jármű vezetése is használhatatlan kb. A megoldás, ami látszólag jól működik, az az, ha a projekt beállításainál a 'Time' fülön belül a 'Fixed Timestep' értékét alap 0.02 -ről átállítom 0.01 -re. Ezt a megoldást egy fórumon találtam, ahol a kérdezőnek nagyon hasonló problémája van (egy gif -et is feltöltött mellé, ami nagyon jól illusztrálja), kivéve, hogy nála nem kerék okozza, hanem a játékos karakterének a kezéhez rögzített eszköz remeg:


[link]


Pontosan ez, sőt még rosszabb dolgok történnek nálam a kerekekkel, ha nem alkalmazom az első megoldást, miszerint:


"Increase the physics simulation rate. For this configure a smaller value in Project Settings > Time > Fixed Timestep. Default value is 0.02, that is 50Hz. Try with 0.01 for 100Hz, or 0.005 for 200Hz.


Ensure the connected objects have similar mass. “Connected Mass Scale” is not really relevant, as it has the same exact effect as multiplying the mass in the rigidbody (i.e. the connected object actually weights more)."


Azt nem tartom normálisnak, hogy nekem manipulálnom kell a kilókat, hisz pont ez a lényeg, hogy a valóságot szimuláljam, amikor meghajtom az autót. Mégis hogy lehetne hasonló súlyban a 4 kerék, meg az autó test?


Tehát a kérdésem, létezik -e a Timestep növelése mellett más módszer is, amivel nem kell a gyári beállításokat buherálni a projektben mind a Fizika, mind az Idő beállításainál? Vagy nincs más megoldás, csak az, hogy ne a valóságot próbáljam leutánozni (vagyis kerekek forgatásával meghajtani az autót), hanem egyszerűen gyakoroljak nyomást az autó Rigidbody -ra, a kerék elforgatását meg csak vizuálisan szimuláljam, de valójában nem az hajtja meg az autót? Remélem valakinek van tapasztalata benne.



márc. 27. 21:59
Sajnos még nem érkezett válasz a kérdésre.
Te lehetsz az első, aki segít a kérdezőnek!

További kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!