Initial commit: Unity Needle AR Menu project with MenuScene and SampleScene web apps
Add root .gitignore for Unity Library/Temp/Logs, IDE folders, and node_modules. Include Assets, Needle TypeScript (MenuController, asset picker, WebXR), and project configuration. Made-with: Cursor
This commit is contained in:
87
.agents/skills/needle-engine/templates/my-component.ts
Normal file
87
.agents/skills/needle-engine/templates/my-component.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* Needle Engine — Annotated Component Template
|
||||
*
|
||||
* Copy this file and rename the class to get started.
|
||||
* Remove any lifecycle methods you don't need.
|
||||
*/
|
||||
|
||||
import { Behaviour, serializable, registerType, WaitForSeconds } from "@needle-tools/engine";
|
||||
import { Object3D } from "three";
|
||||
|
||||
// @registerType — required for GLB deserialization.
|
||||
// Without this, the component won't be instantiated from GLB.
|
||||
@registerType
|
||||
export class MyComponent extends Behaviour {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Serialized Fields
|
||||
// These values are set in the Unity Inspector and baked into the GLB.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/** A simple number field — set in Unity Inspector */
|
||||
@serializable()
|
||||
speed: number = 1;
|
||||
|
||||
/** A reference to another object in the scene */
|
||||
@serializable(Object3D)
|
||||
target?: Object3D;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Private State
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
private _elapsed: number = 0;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Lifecycle
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
awake() {
|
||||
// Called once when the component is instantiated (even if disabled).
|
||||
// Use for initialization that doesn't depend on other components being ready.
|
||||
}
|
||||
|
||||
start() {
|
||||
// Called once on the first frame the component is active.
|
||||
// Other components are initialized by now — safe to call getComponent() etc.
|
||||
console.log(`${this.name} started on ${this.gameObject.name}`);
|
||||
}
|
||||
|
||||
update() {
|
||||
// Called every frame. Use this.context.time.deltaTime for frame-rate independence.
|
||||
this._elapsed += this.context.time.deltaTime;
|
||||
|
||||
// Example: rotate this object
|
||||
this.gameObject.rotation.y += this.speed * this.context.time.deltaTime;
|
||||
}
|
||||
|
||||
onEnable() {
|
||||
// Called each time this component becomes active.
|
||||
}
|
||||
|
||||
onDisable() {
|
||||
// Called each time this component becomes inactive.
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
// Called when this component/object is destroyed (via destroy(obj)).
|
||||
// Note: NOT called by removeComponent() — only by the standalone destroy() function.
|
||||
// Clean up event listeners, timers, or external references here.
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Physics callbacks (require a Rapier Collider on this GameObject)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// onCollisionEnter(col: Collision) { }
|
||||
// onTriggerEnter(col: Collision) { }
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Example: coroutine
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
private *exampleCoroutine() {
|
||||
// yield; // wait one frame
|
||||
// yield WaitForSeconds(1); // wait 1 second
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user