Managing Existing Components
Description: Everything in awe- 3D models, avatars, images, audio—already exists as Components.
The Components manager lets you find, duplicate, or destroy these built-in Components in your scene.
import { Components } from "@oo/scripting"- Find by ID
Assign an ID in the Studio’s Scripting menu, then retrieve it:const boss = Components.byId("firstboss") - Find by Tag
Assign tag to items in the Studio’s Scripting menu, then retrieve a list:const enemies = Components.byTag("enemies") - Find by Filter
Query by any property:const pickups = Components.filter(it => it.data.name?.startsWith("pickup")) - Duplicate
const original = Components.byId("enemy") const clone = await original.duplicate() - Destroy
myCoin.destroy() - Create a new instance at runtime:
await Components.create({ type: "model", url: "/path/model.glb", position: { x: 0, y: 1, z: 0 } })
Creating Custom Components
Description: Extend ScriptComponent to build your own reusable, modular Components. You can add 3D geometry, parameters, triggers, and more. These can soon be published to a shared marketplace.
import { ScriptComponent } from '@oo/scripting'
export default class MyCube extends ScriptComponent {
static config = { transform: true } // makes it draggable in the editor
onRenderInit() {
// Add geometry (e.g. a box mesh) here
}
}Adding Parameters
Expose editable properties in the Studio UI:
import { ScriptComponent, $Param as P } from '@oo/scripting'
export default class MyCube extends ScriptComponent {
color = P.Color("#ffffff");
onRenderUpdate() {
// e.g. update material color
}
}See all available param types (opens in a new tab)
Custom Config & Methods
export default class MyCube extends ScriptComponent {
static config = {
title: "My Cube",
description: "A customizable cube",
singleton: false,
draggable: true,
transform: true
}
onReady() {}
}
const myCube = await MyCube.create({ color: "#f00" })
const allCubes = MyCube.getInstances()
const mainCube = MyCube.getMain()Use these building blocks to craft specialized Components that can be dropped into any oncyber scene.