Slime
A knee-high hopping slime, 60 cm tall by default: a glossy jelly drop, dome or cube with a face. Travels by distance in hops: it squashes flat, springs up stretched tall, rounds out at the top of the arc and splats down again. Uses the fly contract at altitude 0, so engines move it along the ground; the jelly glows softly at night.
- Size
- 0.59 × 0.60 × 0.60 m
- Triangles
- 912
Tune it
5 knobs: Colour, Shape, Face, Bounce, Height.
Specs
- Size
- 0.59 × 0.60 × 0.60 m width × height × depth
- Triangles
- 912 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 1.32 m of travel per cycle
- Altitude
- 0 m above the ground
- Moving parts
- 2 body · slide, jelly · rotate
- Knobs
- 5 3 presets
- Night lights
- 1 glow
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/slime.mjs';
const slime = createAsset();
scene.add(slime); // rests on y = 0, front faces +Z
let dist = 0;
renderer.setAnimationLoop(() => {
dist += speed * clock.getDelta();
slime.position.set(0, groundY + slime.userData.altitude, dist);
slime.userData.tick(dist); // wings beat 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/slime.mjs';
export function Slime({ speed = 1 }) {
const model = useMemo(() => createAsset(), []);
const dist = useRef(0);
useFrame((_, dt) => {
dist.current += speed * dt;
model.position.set(0, groundY + model.userData.altitude, dist.current);
model.userData.tick(dist.current); // wings beat with the distance
});
return <primitive object={model} />;
}# Import slime.glb (download below). It carries an in-place "Loop" animation.
@onready var anim: AnimationPlayer = $Slime/AnimationPlayer
func _physics_process(delta):
velocity = transform.basis.z * speed
move_and_slide()
anim.play("Loop")
anim.speed_scale = speed / 1.32 # one Loop = 1.32 m of travel// Import slime.glb with glTFast (com.unity.cloud.gltfast).
animator.Play("Loop");
animator.speed = speed / 1.32 // one Loop = 1.32 m of travelUse the gaitkit MCP server: get_variant({ "id": "slime", "want": "default look" })
then place the result.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
goo | choice | lime aqua berry amber violet tar | lime | Jelly colour (it glows this colour at night): lime (classic green), aqua (water blue), berry (pink-red), amber (honey orange), violet (arcane purple), tar (near-black with a purple shine, a nasty late-game slime). |
shape | choice | drop dome cube | drop | Body shape: drop (a teardrop with a little peak on top, the classic RPG slime), dome (a round jelly mound), cube (a soft-cornered jelly cube that fills a corridor). |
face | choice | cute grumpy none | cute | Expression: cute (big shiny eyes and a small smile), grumpy (narrow eyes under angry brows and a frown), none (a faceless blob of goo). |
bounce | range | 0.2 to 1.2, step 0.05 | 0.6 | Hop height as a fraction of the slime's height. 0.2 is a lazy slither-hop; 1.2 is a springy leap. |
size | range | 0.25 to 2.5, step 0.05 | 0.6 | Body height in metres at rest. 0.25 is a palm-sized slimeling; 2.5 is a boss slime taller than a person. |
Presets: slimeling {"goo":"aqua","size":0.3,"bounce":1.1} · jelly cube {"goo":"lime","shape":"cube","face":"none","size":2.2,"bounce":0.25} · tar ooze {"goo":"tar","shape":"dome","face":"grumpy","size":1.2}
Files
| File | What |
|---|---|
| slime.glb | GLB, default look · 103 KB |
| slime.mjs | ES module, every knob live |
| slime.obj | OBJ, static, no colour |
| slime-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.