Farm Tractor
A utility farm tractor with big lugged rear wheels and small front wheels, each spinning at its own rate as it drives (the front pair turns exactly twice per rear turn). Glazed cab or open seat with a roll bar, optional front loader whose arms are a rotate part. Headlights, tail lights and the roof beacon glow at night. About 4 m long, 2.8 m tall with the cab.
- Size
- 2.5 × 3.0 × 4.2 m
- Triangles
- 2,292
- Kit
- Farm
Tune it
4 knobs: Paint, Cab, Front loader, Loader lift.
Specs
- Size
- 2.5 × 3.0 × 4.2 m width × height × depth
- Triangles
- 2,292 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 5.027 m of travel per cycle
- Moving parts
- 4 wheel_RL · spin, wheel_RR · spin, wheel_FL · spin, wheel_FR · spin
- Knobs
- 4 3 presets
- Night lights
- 3 headlight, taillight, beacon
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/farm-tractor.mjs';
const farmTractor = createAsset();
scene.add(farmTractor); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
farmTractor.position.z = dist;
farmTractor.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/farm-tractor.mjs';
export function FarmTractor({ 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 farm-tractor.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $FarmTractor/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 5.027 # one Loop = 5.027 m of travel// Import farm-tractor.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 5.027 // one Loop = 5.027 m of travelUse the gaitkit MCP server: get_variant({ "id": "farm-tractor", "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 | red green blue orange | red | Body colour: red (cream wheels), green (grey wheels), blue (white wheels), orange (dark wheels). Plain paint, no badges. |
cab | toggle | on / off | true | Glazed cab with a white roof and beacon. Off gives an open seat, steering wheel and a roll bar. |
loader | toggle | on / off | false | Front loader arms with a bucket. The arms are a rotate part named loader (raise it with negative x rotation). |
lift | range | 0 to 1, step 0.05 | 0 | How high the loader bucket is raised, 0 on the ground, 1 fully up. Only matters with the front loader on. |
Presets: field tractor {"paint":"green","cab":true} · yard loader {"paint":"orange","loader":true,"lift":0.35} · vintage open {"paint":"red","cab":false}
Files
| File | What |
|---|---|
| farm-tractor.glb | GLB, default look · 330 KB |
| farm-tractor.mjs | ES module, every knob live |
| farm-tractor.obj | OBJ, static, no colour |
| farm-tractor-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.