Battle Tank
A generic, stylised tracked battle tank, 7.4 m hull and about 9.8 m with the gun forward. The turret turns on its ring (turret, spin about y) and the gun elevates (barrel, rotate x, 20 degrees up to 8 down); road wheels, drive sprockets and idlers roll with distance inside the track loops (tracks are static geometry). Headlights, tail lights and the gunner sight glow at night. No national markings or insignia.
- Size
- 3.8 × 4.1 × 10.7 m
- Triangles
- 2,276
Tune it
4 knobs: Paint, Turret, Gun elevation, Side skirts.
Specs
- Size
- 3.8 × 4.1 × 10.7 m width × height × depth
- Triangles
- 2,276 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 2.136 m of travel per cycle
- Moving parts
- 18 wheel_0 · spin, wheel_1 · spin, wheel_2 · spin, wheel_3 · spin, wheel_4 · spin, wheel_5 · spin, wheel_6 · spin, wheel_7 · spin, wheel_8 · spin, wheel_9 · spin, wheel_10 · spin, wheel_11 · spin, wheel_12 · spin, wheel_13 · spin, wheel_14 · spin, wheel_15 · spin, turret · spin, barrel · rotate
- Knobs
- 4 3 presets
- Night lights
- 3 headlight, taillight, sight
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/battle-tank.mjs';
const battleTank = createAsset();
scene.add(battleTank); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
battleTank.position.z = dist;
battleTank.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/battle-tank.mjs';
export function BattleTank({ 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 battle-tank.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $BattleTank/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 2.136 # one Loop = 2.136 m of travel// Import battle-tank.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 2.136 // one Loop = 2.136 m of travelUse the gaitkit MCP server: get_variant({ "id": "battle-tank", "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 |
|---|---|---|---|---|
paint | choice | olive desert grey winter woodland | olive | Finish: olive drab, desert tan, grey, winter white or woodland camouflage (blotches of green, brown and black). No markings. |
turret | range | -180 to 180, step 5 | 0 | Turret traverse in degrees: 0 gun forward, 90 to the left (+X), -90 to the right, 180 over the back deck. |
elevation | range | -0.4 to 1, step 0.05 | 0 | Gun elevation: 0 level, 1 raised 20 degrees, -0.4 depressed 8 degrees. |
skirts | toggle | on / off | true | Armour skirt plates hanging over the upper track run. Off shows the road wheels and return run fully. |
Presets: parade {"paint":"olive","elevation":0.3} · desert patrol {"paint":"desert","turret":30} · woodland ambush {"paint":"woodland","turret":-40,"elevation":0.15}
Files
| File | What |
|---|---|
| battle-tank.glb | GLB, default look · 319 KB |
| battle-tank.mjs | ES module, every knob live |
| battle-tank.obj | OBJ, static, no colour |
| battle-tank-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.