Ambulance
A 6.2 m box-body ambulance: van cab, tall white patient box, coloured side band, roof light bar and corner beacons that glow at night (no text or emblems). Wheels spin with distance driven, the two rear doors swing open (door_L, door_R).
- Size
- 2.5 × 3.1 × 6.6 m
- Triangles
- 1,440
Tune it
4 knobs: Band colour, Beacons, Rear chevrons, Rear doors.
Specs
- Size
- 2.5 × 3.1 × 6.6 m width × height × depth
- Triangles
- 1,440 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 2.388 m of travel per cycle
- Moving parts
- 6 wheel_0 · spin, wheel_1 · spin, wheel_2 · spin, wheel_3 · spin, door_L · rotate, door_R · rotate
- Knobs
- 4 3 presets
- Night lights
- 4 headlight, taillight, redlight, bluelight
Passed the validator: real scale, rests on y = 0, front faces +Z, deterministic.
Use it
Code for the specimen as it is set up above; it follows your knobs.
import { createAsset } from 'https://gaitkit.com/cdn/ambulance.mjs';
const ambulance = createAsset();
scene.add(ambulance); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
ambulance.position.z = dist;
ambulance.userData.tick(dist); // wheels roll exactly with the distance
renderer.render(scene, camera);
});import { useMemo, useRef } from 'react';
import { useFrame } from '@react-three/fiber';
import { createAsset } from 'https://gaitkit.com/cdn/ambulance.mjs';
export function Ambulance({ speed = 1 }) {
const model = useMemo(() => createAsset(), []);
const dist = useRef(0);
useFrame((_, dt) => {
dist.current += speed * dt;
model.position.z = dist.current;
model.userData.tick(dist.current); // wheels roll exactly with the distance
});
return <primitive object={model} />;
}# Import ambulance.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $Ambulance/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 2.388 # one Loop = 2.388 m of travel// Import ambulance.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 2.388 // one Loop = 2.388 m of travelUse the gaitkit MCP server: get_variant({ "id": "ambulance", "want": "default look" })
then place the result and drive it with userData.tick(distance).
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
stripe | choice | red green orange blue | red | Colour of the side band and trim: red, green, orange or blue. |
lights | choice | red blue mixed | red | Colour of the warning lights: red, blue, or mixed (red on the left, blue on the right). |
chevrons | toggle | on / off | true | Bold diagonal stripes on the rear doors in the band colour and yellow. |
doors | range | 0 to 1, step 0.05 | 0 | How far the two rear doors are open. 0 closed, 1 swung wide (about 170 degrees) for loading a stretcher. |
Presets: city ambulance {"stripe":"red"} · rural paramedic {"stripe":"green","lights":"blue"} · loading bay {"stripe":"orange","lights":"mixed","doors":0.8}
Files
| File | What |
|---|---|
| ambulance.glb | GLB, default look · 213 KB |
| ambulance.mjs | ES module, every knob live |
| ambulance.obj | OBJ, static, no colour |
| ambulance-params.json | knob schema, presets, night zones |
Licence
Use it in games, apps, renders and client work, commercially and without credit. Do not resell it as an asset or train a 3D generator on it. The full licence.