Pohyblivé platformy
Následuje posunující se nebo rotující tělesa a volitelně používá jejich lokální +Z jako směr nahoru.
Běžná ground velocity se používá automaticky, když postava stojí na pohyblivém tělese. set_reference_frame() navíc poskytuje explicitní sledování transformace pro rotující rámy, vozidla, lodě nebo prostředí s lokální gravitací.
Běžný pohyb platformy#
Na schůdném povrchu začne controller svou velocity hodnotou get_ground_velocity(). Posouvající se dynamic nebo kinematic platforma proto postavu unáší i bez referenčního rámce.
Rotující referenční rámec#
player.set_reference_frame(platform_body, false);
// Vstup se otáčí společně s platformou.
player.set_move(input_x, input_y);
jolt_update();- Pozice a rotace postavy následují změnu center-of-mass transform tělesa.
- Aktuální up vektor sleduje lokální +Z tělesa.
- Existující velocity postavy se otočí společně s rámcem.
- Lineární a úhlová velocity rámce se odečte z relativního contact solve, aby se pohyb neaplikoval dvakrát.
Lokální gravitace#
player.set_reference_frame(planet_body, true);
player.set_reference_frame_gravity(true);
var up = player.get_up();Při zapnuté gravitaci referenčního rámce působí gravitace proti aktuálnímu up vektoru. Jinak zůstává globálně ve směru -Z, přestože rámec otáčí pohyb.
Informace o rámci#
var platform = player.get_reference_frame();
var linear = player.get_reference_frame_velocity();
var angular = player.get_reference_frame_angular_velocity();
var desired = player.get_world_move_velocity();Opuštění rámce#
player.clear_reference_frame();Vyčištění obnoví +Z jako směr nahoru, otočí postavu zpět do world-up orientace, smaže cached frame motion a vypne režim lokální gravitace.
Čtení režimu gravitace#
var uses_local_gravity = player.get_reference_frame_gravity();get_reference_frame_gravity() čte, zda gravitace následuje lokální směr nahoru referenčního rámce. Nevrací vektor zrychlení. Pro velikost použijte get_gravity(), pro aktuální orientaci get_up().
Ověřené kontrakty operací#
Následující kontrakty rozlišují jednotky, návratové hodnoty, chyby a životnost podle aktuální implementace. Nevynechávej kontrolu výsledku: false, 0 a undefined mohou mít u různých metod odlišný význam.
| Symbol / vlastník | Signatura | Kontrakt operace |
|---|---|---|
| JoltCharacter.clear_reference_frame | JoltCharacter.clear_reference_frame() | Boolean; zruší rámec a obnoví +Z up, vyčistí transportní/externí impulsní stav, hosta nezničí. |
| JoltCharacter.get_reference_frame | JoltCharacter.get_reference_frame() | Živý uložený JoltBody nebo undefined; není vlastněný Characterem. |
| JoltCharacter.get_reference_frame_angular_velocity | JoltCharacter.get_reference_frame_angular_velocity() | Úhlová rychlost rámce: světové {x, y, z}, rad/s; undefined při chybě. Údaj podpory čti společně s ground_state. |
| JoltCharacter.get_reference_frame_gravity | JoltCharacter.get_reference_frame_gravity() | Boolean nastavení gravitace vůči rámci. Setter Boolean úspěchu, getter Boolean stavu, false i při chybě. |
| JoltCharacter.get_reference_frame_velocity | JoltCharacter.get_reference_frame_velocity() | Rychlost referenčního rámce: světové {x, y, z}, m/s; undefined při chybě. Údaj podpory čti společně s ground_state. |
| JoltCharacter.get_up | JoltCharacter.get_up() | Směr nahoru: světové {x, y, z}, jednotkový vektor / unit vector; undefined při chybě. Údaj podpory čti společně s ground_state. |
| JoltCharacter.get_world_move_velocity | JoltCharacter.get_world_move_velocity() | Požadovaný světový pohyb: světové {x, y, z}, m/s; undefined při chybě. Údaj podpory čti společně s ground_state. |
| JoltCharacter.set_reference_frame | JoltCharacter.set_reference_frame(body, local_gravity = false) | Živý JoltBody ve stejném světě, local_gravity=false výchozí. Boolean; odmítne při attachmentu. Přenáší pohyb referenčního tělesa, není to attachment k pevné místní pozici. |
| JoltCharacter.set_reference_frame_gravity | JoltCharacter.set_reference_frame_gravity(enabled) | Boolean nastavení gravitace vůči rámci. Setter Boolean úspěchu, getter Boolean stavu, false i při chybě. |