{"owner":"galacean","repo":"engine","hasSkills":true,"totalSkillsCount":14,"totalTokensCount":2549,"categories":["plugin-manifest","cursor-rule"],"hasMcp":false,"mcpConfig":null,"found":["packages/core/README.md","packages/design/README.md","packages/galacean/README.md","packages/loader/README.md","packages/math/README.md","packages/physics-lite/README.md","packages/physics-physx/README.md","packages/rhi-webgl/README.md","packages/shader-lab/README.md","packages/shader/README.md","packages/ui/README.md","packages/xr-webxr/README.md","packages/xr/README.md",".cursorrules (anti-overengineering.mdc)"],"skills":{"packages/core/README.md":"A subpackage of `@galacean/engine`.","packages/design/README.md":"A subpackage of `@galacean/engine`.","packages/galacean/README.md":"# Galacean Engine\n\n<a href=\"https://www.npmjs.com/package/@galacean/engine\"><img src=\"https://img.shields.io/npm/v/@galacean/engine\"/></a>\n![npm-size](https://img.shields.io/bundlephobia/minzip/@galacean/engine)\n![npm-download](https://img.shields.io/npm/dm/@galacean/engine)\n[![codecov](https://codecov.io/gh/galacean/engine/branch/main/graph/badge.svg?token=KR2UBKE3OX)](https://codecov.io/gh/galacean/engine)\n\nGalacean is a **web-first** and **mobile-first** high-performance real-time interactive engine. Use **component system design** and pursue ease of use and light weight. Developers can independently use and write Typescript scripts to develop projects using pure code.\n\n## Features\n\n- 🖥  &nbsp;**Platform** - Suppport HTML5 and wechat minigame\n- 🔮  &nbsp;**Graphics** - Advanced 2D + 3D graphics engine\n- 🏃  &nbsp;**Animation** - Powerful animation system\n- 🧱  &nbsp;**Physics** - Powerful and easy-to-use physical features\n- 👆  &nbsp;**Input** - Easy-to-use interactive capabilities\n- 📑  &nbsp;**Scripts** - Use TypeScript to write logic efficiently\n\n## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as GALACEAN from \"@galacean/engine\";\n```\n\nor individual classes using:\n\n```javascript\nimport { Engine, Scene, Entity } from \"@galacean/engine\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\nengine.canvas.resizeByClientSize();\n\n// Get scene and create root entity\nconst scene = engine.sceneManager.activeScene;\nconst rootEntity = scene.createRootEntity(\"Root\");\n\n// Create light\nconst lightEntity = rootEntity.createChild(\"Light\");\nconst directLight = lightEntity.addComponent(DirectLight);\nlightEntity.transform.setRotation(-45, -45, 0);\ndirectLight.intensity = 0.4;\n\n// Create camera\nconst cameraEntity = rootEntity.createChild(\"Camera\");\ncameraEntity.addComponent(Camera);\ncameraEntity.transform.setPosition(0, 0, 12);\n\n// Create sphere\nconst meshEntity = rootEntity.createChild(\"Sphere\");\nconst meshRenderer = meshEntity.addComponent(MeshRenderer);\nconst material = new BlinnPhongMaterial(engine);\nmeshRenderer.setMaterial(material);\nmeshRenderer.mesh = PrimitiveMesh.createSphere(engine, 1);\n\n// Run engine\nengine.run();\n```\n\n## Links\n\n- [Official Site](https://oasisengine.cn)\n- [Examples](https://oasisengine.cn/#/examples/latest)\n- [Documentation](https://oasisengine.cn/#/docs/latest/cn/install)\n- [API References](https://oasisengine.cn/#/api/latest/core)\n\n\n## License \n\nThe engine is released under the [MIT](https://opensource.org/licenses/MIT) license. See LICENSE file.","packages/loader/README.md":"A subpackage of `@galacean/engine`.","packages/math/README.md":"A subpackage of `@galacean/engine`.","packages/physics-lite/README.md":"## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-physics-lite\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as PHYSICS_LITE from \"@galacean/engine-physics-lite\";\n```\n\nor individual classes using:\n\n```javascript\nimport { LitePhysics } from \"@galacean/engine-physics-lite\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\n\n// Initialize physics manager with LitePhysics.\nengine.physicsManager.initialize(LitePhysics);\n\n......\n\n// Run engine.\nengine.run();\n```","packages/physics-physx/README.md":"## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-physics-physx\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as PHYSICS_PHYSX from \"@galacean/engine-physics-physx\";\n```\n\nor individual classes using:\n\n```javascript\nimport { PhysXPhysics } from \"@galacean/engine-physics-physx\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\n\n// Initialize physics manager with PhysXPhysics.\nengine.physicsManager.initialize(PhysXPhysics);\n\n......\n\n// Run engine.\nengine.run();\n```","packages/rhi-webgl/README.md":"A subpackage of `@galacean/engine`.","packages/shader-lab/README.md":"## Installation\n\n```sh\nnpm install @galacean/engine-shaderlab\n```\n\n## Usage\n\n```typescript\nimport { ShaderLab } from \"@galacean/engine-shaderlab\";\n\n// Create ShaderLab\nconst shaderLab = new ShaderLab();\n\n// Create engine with shaderLab\nconst engine = await WebGLEngine.create({ canvas: \"canvas\", shaderLab });\n\n......\n\n// Create shader by galacean shader code directly\nconst shader = Shader.create(galaceanShaderCode);\n\n.......\n\n// Run engine\nengine.run()\n```\n\nThere are two versions of ShaderLab: `Release` and `Verbose`. The `Verbose` version offers more user-friendly diagnostic information for debug ShaderLab compilation errors, while the Release version provides superior performance.\n\nyou can use `Verbose` version by import:\n\n```ts\nimport { ShaderLab } from \"@galacean/engine-shaderlab/verbose\";\n```\n\n## CFG Grammar conflict detection\n\nThe Galacean ShaderLab syntax is defined using Context-Free Grammar (CFG) and is documented within the `\\*.y` file. When modifications to the ShaderLab syntax are required, it is recommended to make changes to the existing CFG syntax file, and employ [Bison](https://www.gnu.org/software/bison/manual/bison.html) to detect any potential grammar conflicts.\n\n```sh\nbison ./Parser.y -r all\n```\n","packages/shader/README.md":"A subpackage of `@galacean/engine`.","packages/ui/README.md":"# @galacean/engine-ui\n\n`@galacean/engine-ui` is a UI library designed for the `@galacean/engine`, this library enables developers to create and manage user interfaces efficiently within their **Galacean-based** applications. It is important to note that it is currently in an **experimental version**.\n\n## Features\n\n- **Rendering components**: Includes `Image` and `Text`.\n- **Interactive Components**: Include `Button`, as well as other planned basic rendering components to be added in the future.\n- **Event Handling**: Supports the dispatch and bubbling of events such as `onPointerEnter`, `onPointerExit`,`onPointerDown`, `onPointerUp`, `onPointerClick`, `onPointerDrag` and `onPointerDrop`.\n- **Optimized Performance**: Designed to run smoothly with the Galacean engine.\n\n## Installation\n\nTo use `@galacean/engine-ui` in your project, install it via npm:\n\n```bash\nnpm install @galacean/engine-ui\n```\n\n## Getting Started\n\nHere is a simple example to help you get started:\n\n```typescript\nimport { AssetType, Camera, Sprite, Texture2D, Vector3, WebGLEngine } from \"@galacean/engine\";\nimport { CanvasRenderMode, Image, ResolutionAdaptationMode, UICanvas } from \"@galacean/engine-ui\";\n\n// Initialize engine and scene\nconst engine = await WebGLEngine.create({ canvas: \"canvas\" });\nconst scene = engine.sceneManager.activeScene;\nconst rootEntity = scene.createRootEntity();\n\n// Create camera\nconst cameraEntity = rootEntity.createChild(\"Camera\");\ncameraEntity.transform.position = new Vector3(0, 0, 10);\nconst camera = cameraEntity.addComponent(Camera);\ncamera.farClipPlane = 200;\ncamera.nearClipPlane = 0.3;\n\n// Create canvas\nconst canvasEntity = rootEntity.createChild(\"canvas\");\nconst canvas = canvasEntity.addComponent(UICanvas);\ncanvas.renderMode = CanvasRenderMode.ScreenSpaceCamera;\ncanvas.resolutionAdaptationMode = ResolutionAdaptationMode.HeightAdaptation;\ncanvas.distance = 100;\ncanvas.renderCamera = camera;\n\n// Create Image\nconst imageEntity = canvasEntity.createChild(\"image\");\nconst image = imageEntity.addComponent(Image);\nengine.resourceManager\n  .load({\n    url: \"https://xxx.png\",\n    type: AssetType.Texture2D\n  })\n  .then((texture) => {\n    image.sprite = new Sprite(engine, <Texture2D>texture);\n  });\n\n// Run the engine\nengine.run();\n```\nEasier operations in the [Editor](https://galacean.antgroup.com/editor/).\n\n## Documentation\n\nFor detailed documentation, visit [the official documentation site](https://galacean.antgroup.com/engine).\n","packages/xr-webxr/README.md":"## Installation\n\n`@galacean/engine-xr-webxr` is one of the implementation backends of xr. If your XR application interface is WebXR standard, please introduce this package.\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-xr-webxr\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n```\n\n## Usage\n\n```typescript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n\n// Create engine by passing in the HTMLCanvasElement\nWebGLEngine.create({\n  canvas: \"canvas\",\n  xrDevice: new WebXRDevice(),\n}).then((engine) => {\n  // Users need to actively click the button to enter XR\n  XRButton.onClick = function () {\n    this.engine.xrManager.enterXR(XRSessionMode.AR).then(\n      () => {\n        console.log(\"Enter AR\");\n      },\n      (error) => {\n        console.log(\"Not supported AR\", error);\n      }\n    );\n  };\n});\n......\n```\n","packages/xr/README.md":"## Installation\n\n`@galacean/engine-xr` is the implementation layer of XRManager and is a necessary package for developing XR applications.\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-xr\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n```\n\n## Usage\n\n```typescript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n\n// Create engine by passing in the HTMLCanvasElement\nWebGLEngine.create({\n  canvas: \"canvas\",\n  xrDevice: new WebXRDevice(),\n}).then((engine) => {\n  // Users need to actively click the button to enter XR\n  XRButton.onClick = function () {\n    this.engine.xrManager.enterXR(XRSessionMode.AR).then(\n      () => {\n        console.log(\"Enter AR\");\n      },\n      (error) => {\n        console.log(\"Not supported AR\", error);\n      }\n    );\n  };\n});\n......\n```\n",".cursorrules (anti-overengineering.mdc)":"# Anti-Over-Engineering\n\nOnly change what was asked. Simplest solution first. When unsure, ask.\n\nDo not modify unrequested code, add abstractions without a concrete need, import unnecessary dependencies, rewrite entire files for small changes, or add error handling for impossible scenarios.\n\nBefore delivery: verify you only changed requested code, check for simpler approaches, confirm no unrequested files were touched."},"files":{"packages/core/README.md":"A subpackage of `@galacean/engine`.","packages/design/README.md":"A subpackage of `@galacean/engine`.","packages/galacean/README.md":"# Galacean Engine\n\n<a href=\"https://www.npmjs.com/package/@galacean/engine\"><img src=\"https://img.shields.io/npm/v/@galacean/engine\"/></a>\n![npm-size](https://img.shields.io/bundlephobia/minzip/@galacean/engine)\n![npm-download](https://img.shields.io/npm/dm/@galacean/engine)\n[![codecov](https://codecov.io/gh/galacean/engine/branch/main/graph/badge.svg?token=KR2UBKE3OX)](https://codecov.io/gh/galacean/engine)\n\nGalacean is a **web-first** and **mobile-first** high-performance real-time interactive engine. Use **component system design** and pursue ease of use and light weight. Developers can independently use and write Typescript scripts to develop projects using pure code.\n\n## Features\n\n- 🖥  &nbsp;**Platform** - Suppport HTML5 and wechat minigame\n- 🔮  &nbsp;**Graphics** - Advanced 2D + 3D graphics engine\n- 🏃  &nbsp;**Animation** - Powerful animation system\n- 🧱  &nbsp;**Physics** - Powerful and easy-to-use physical features\n- 👆  &nbsp;**Input** - Easy-to-use interactive capabilities\n- 📑  &nbsp;**Scripts** - Use TypeScript to write logic efficiently\n\n## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as GALACEAN from \"@galacean/engine\";\n```\n\nor individual classes using:\n\n```javascript\nimport { Engine, Scene, Entity } from \"@galacean/engine\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\nengine.canvas.resizeByClientSize();\n\n// Get scene and create root entity\nconst scene = engine.sceneManager.activeScene;\nconst rootEntity = scene.createRootEntity(\"Root\");\n\n// Create light\nconst lightEntity = rootEntity.createChild(\"Light\");\nconst directLight = lightEntity.addComponent(DirectLight);\nlightEntity.transform.setRotation(-45, -45, 0);\ndirectLight.intensity = 0.4;\n\n// Create camera\nconst cameraEntity = rootEntity.createChild(\"Camera\");\ncameraEntity.addComponent(Camera);\ncameraEntity.transform.setPosition(0, 0, 12);\n\n// Create sphere\nconst meshEntity = rootEntity.createChild(\"Sphere\");\nconst meshRenderer = meshEntity.addComponent(MeshRenderer);\nconst material = new BlinnPhongMaterial(engine);\nmeshRenderer.setMaterial(material);\nmeshRenderer.mesh = PrimitiveMesh.createSphere(engine, 1);\n\n// Run engine\nengine.run();\n```\n\n## Links\n\n- [Official Site](https://oasisengine.cn)\n- [Examples](https://oasisengine.cn/#/examples/latest)\n- [Documentation](https://oasisengine.cn/#/docs/latest/cn/install)\n- [API References](https://oasisengine.cn/#/api/latest/core)\n\n\n## License \n\nThe engine is released under the [MIT](https://opensource.org/licenses/MIT) license. See LICENSE file.","packages/loader/README.md":"A subpackage of `@galacean/engine`.","packages/math/README.md":"A subpackage of `@galacean/engine`.","packages/physics-lite/README.md":"## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-physics-lite\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as PHYSICS_LITE from \"@galacean/engine-physics-lite\";\n```\n\nor individual classes using:\n\n```javascript\nimport { LitePhysics } from \"@galacean/engine-physics-lite\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\n\n// Initialize physics manager with LitePhysics.\nengine.physicsManager.initialize(LitePhysics);\n\n......\n\n// Run engine.\nengine.run();\n```","packages/physics-physx/README.md":"## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-physics-physx\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as PHYSICS_PHYSX from \"@galacean/engine-physics-physx\";\n```\n\nor individual classes using:\n\n```javascript\nimport { PhysXPhysics } from \"@galacean/engine-physics-physx\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\n\n// Initialize physics manager with PhysXPhysics.\nengine.physicsManager.initialize(PhysXPhysics);\n\n......\n\n// Run engine.\nengine.run();\n```","packages/rhi-webgl/README.md":"A subpackage of `@galacean/engine`.","packages/shader-lab/README.md":"## Installation\n\n```sh\nnpm install @galacean/engine-shaderlab\n```\n\n## Usage\n\n```typescript\nimport { ShaderLab } from \"@galacean/engine-shaderlab\";\n\n// Create ShaderLab\nconst shaderLab = new ShaderLab();\n\n// Create engine with shaderLab\nconst engine = await WebGLEngine.create({ canvas: \"canvas\", shaderLab });\n\n......\n\n// Create shader by galacean shader code directly\nconst shader = Shader.create(galaceanShaderCode);\n\n.......\n\n// Run engine\nengine.run()\n```\n\nThere are two versions of ShaderLab: `Release` and `Verbose`. The `Verbose` version offers more user-friendly diagnostic information for debug ShaderLab compilation errors, while the Release version provides superior performance.\n\nyou can use `Verbose` version by import:\n\n```ts\nimport { ShaderLab } from \"@galacean/engine-shaderlab/verbose\";\n```\n\n## CFG Grammar conflict detection\n\nThe Galacean ShaderLab syntax is defined using Context-Free Grammar (CFG) and is documented within the `\\*.y` file. When modifications to the ShaderLab syntax are required, it is recommended to make changes to the existing CFG syntax file, and employ [Bison](https://www.gnu.org/software/bison/manual/bison.html) to detect any potential grammar conflicts.\n\n```sh\nbison ./Parser.y -r all\n```\n","packages/shader/README.md":"A subpackage of `@galacean/engine`.","packages/ui/README.md":"# @galacean/engine-ui\n\n`@galacean/engine-ui` is a UI library designed for the `@galacean/engine`, this library enables developers to create and manage user interfaces efficiently within their **Galacean-based** applications. It is important to note that it is currently in an **experimental version**.\n\n## Features\n\n- **Rendering components**: Includes `Image` and `Text`.\n- **Interactive Components**: Include `Button`, as well as other planned basic rendering components to be added in the future.\n- **Event Handling**: Supports the dispatch and bubbling of events such as `onPointerEnter`, `onPointerExit`,`onPointerDown`, `onPointerUp`, `onPointerClick`, `onPointerDrag` and `onPointerDrop`.\n- **Optimized Performance**: Designed to run smoothly with the Galacean engine.\n\n## Installation\n\nTo use `@galacean/engine-ui` in your project, install it via npm:\n\n```bash\nnpm install @galacean/engine-ui\n```\n\n## Getting Started\n\nHere is a simple example to help you get started:\n\n```typescript\nimport { AssetType, Camera, Sprite, Texture2D, Vector3, WebGLEngine } from \"@galacean/engine\";\nimport { CanvasRenderMode, Image, ResolutionAdaptationMode, UICanvas } from \"@galacean/engine-ui\";\n\n// Initialize engine and scene\nconst engine = await WebGLEngine.create({ canvas: \"canvas\" });\nconst scene = engine.sceneManager.activeScene;\nconst rootEntity = scene.createRootEntity();\n\n// Create camera\nconst cameraEntity = rootEntity.createChild(\"Camera\");\ncameraEntity.transform.position = new Vector3(0, 0, 10);\nconst camera = cameraEntity.addComponent(Camera);\ncamera.farClipPlane = 200;\ncamera.nearClipPlane = 0.3;\n\n// Create canvas\nconst canvasEntity = rootEntity.createChild(\"canvas\");\nconst canvas = canvasEntity.addComponent(UICanvas);\ncanvas.renderMode = CanvasRenderMode.ScreenSpaceCamera;\ncanvas.resolutionAdaptationMode = ResolutionAdaptationMode.HeightAdaptation;\ncanvas.distance = 100;\ncanvas.renderCamera = camera;\n\n// Create Image\nconst imageEntity = canvasEntity.createChild(\"image\");\nconst image = imageEntity.addComponent(Image);\nengine.resourceManager\n  .load({\n    url: \"https://xxx.png\",\n    type: AssetType.Texture2D\n  })\n  .then((texture) => {\n    image.sprite = new Sprite(engine, <Texture2D>texture);\n  });\n\n// Run the engine\nengine.run();\n```\nEasier operations in the [Editor](https://galacean.antgroup.com/editor/).\n\n## Documentation\n\nFor detailed documentation, visit [the official documentation site](https://galacean.antgroup.com/engine).\n","packages/xr-webxr/README.md":"## Installation\n\n`@galacean/engine-xr-webxr` is one of the implementation backends of xr. If your XR application interface is WebXR standard, please introduce this package.\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-xr-webxr\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n```\n\n## Usage\n\n```typescript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n\n// Create engine by passing in the HTMLCanvasElement\nWebGLEngine.create({\n  canvas: \"canvas\",\n  xrDevice: new WebXRDevice(),\n}).then((engine) => {\n  // Users need to actively click the button to enter XR\n  XRButton.onClick = function () {\n    this.engine.xrManager.enterXR(XRSessionMode.AR).then(\n      () => {\n        console.log(\"Enter AR\");\n      },\n      (error) => {\n        console.log(\"Not supported AR\", error);\n      }\n    );\n  };\n});\n......\n```\n","packages/xr/README.md":"## Installation\n\n`@galacean/engine-xr` is the implementation layer of XRManager and is a necessary package for developing XR applications.\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-xr\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n```\n\n## Usage\n\n```typescript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n\n// Create engine by passing in the HTMLCanvasElement\nWebGLEngine.create({\n  canvas: \"canvas\",\n  xrDevice: new WebXRDevice(),\n}).then((engine) => {\n  // Users need to actively click the button to enter XR\n  XRButton.onClick = function () {\n    this.engine.xrManager.enterXR(XRSessionMode.AR).then(\n      () => {\n        console.log(\"Enter AR\");\n      },\n      (error) => {\n        console.log(\"Not supported AR\", error);\n      }\n    );\n  };\n});\n......\n```\n",".cursorrules (anti-overengineering.mdc)":"# Anti-Over-Engineering\n\nOnly change what was asked. Simplest solution first. When unsure, ask.\n\nDo not modify unrequested code, add abstractions without a concrete need, import unnecessary dependencies, rewrite entire files for small changes, or add error handling for impossible scenarios.\n\nBefore delivery: verify you only changed requested code, check for simpler approaches, confirm no unrequested files were touched."},"items":[{"name":"README.md","path":"packages/core/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/core/README.md","title":"core Documentation","category":"plugin-manifest","format":"markdown","content":"A subpackage of `@galacean/engine`.","isInternal":false,"tokens":11,"sizeBytes":35},{"name":"README.md","path":"packages/design/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/design/README.md","title":"design Documentation","category":"plugin-manifest","format":"markdown","content":"A subpackage of `@galacean/engine`.","isInternal":false,"tokens":11,"sizeBytes":35},{"name":"README.md","path":"packages/galacean/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/galacean/README.md","title":"galacean Documentation","category":"plugin-manifest","format":"markdown","content":"# Galacean Engine\n\n<a href=\"https://www.npmjs.com/package/@galacean/engine\"><img src=\"https://img.shields.io/npm/v/@galacean/engine\"/></a>\n![npm-size](https://img.shields.io/bundlephobia/minzip/@galacean/engine)\n![npm-download](https://img.shields.io/npm/dm/@galacean/engine)\n[![codecov](https://codecov.io/gh/galacean/engine/branch/main/graph/badge.svg?token=KR2UBKE3OX)](https://codecov.io/gh/galacean/engine)\n\nGalacean is a **web-first** and **mobile-first** high-performance real-time interactive engine. Use **component system design** and pursue ease of use and light weight. Developers can independently use and write Typescript scripts to develop projects using pure code.\n\n## Features\n\n- 🖥  &nbsp;**Platform** - Suppport HTML5 and wechat minigame\n- 🔮  &nbsp;**Graphics** - Advanced 2D + 3D graphics engine\n- 🏃  &nbsp;**Animation** - Powerful animation system\n- 🧱  &nbsp;**Physics** - Powerful and easy-to-use physical features\n- 👆  &nbsp;**Input** - Easy-to-use interactive capabilities\n- 📑  &nbsp;**Scripts** - Use TypeScript to write logic efficiently\n\n## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as GALACEAN from \"@galacean/engine\";\n```\n\nor individual classes using:\n\n```javascript\nimport { Engine, Scene, Entity } from \"@galacean/engine\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\nengine.canvas.resizeByClientSize();\n\n// Get scene and create root entity\nconst scene = engine.sceneManager.activeScene;\nconst rootEntity = scene.createRootEntity(\"Root\");\n\n// Create light\nconst lightEntity = rootEntity.createChild(\"Light\");\nconst directLight = lightEntity.addComponent(DirectLight);\nlightEntity.transform.setRotation(-45, -45, 0);\ndirectLight.intensity = 0.4;\n\n// Create camera\nconst cameraEntity = rootEntity.createChild(\"Camera\");\ncameraEntity.addComponent(Camera);\ncameraEntity.transform.setPosition(0, 0, 12);\n\n// Create sphere\nconst meshEntity = rootEntity.createChild(\"Sphere\");\nconst meshRenderer = meshEntity.addComponent(MeshRenderer);\nconst material = new BlinnPhongMaterial(engine);\nmeshRenderer.setMaterial(material);\nmeshRenderer.mesh = PrimitiveMesh.createSphere(engine, 1);\n\n// Run engine\nengine.run();\n```\n\n## Links\n\n- [Official Site](https://oasisengine.cn)\n- [Examples](https://oasisengine.cn/#/examples/latest)\n- [Documentation](https://oasisengine.cn/#/docs/latest/cn/install)\n- [API References](https://oasisengine.cn/#/api/latest/core)\n\n\n## License \n\nThe engine is released under the [MIT](https://opensource.org/licenses/MIT) license. See LICENSE file.","isInternal":false,"tokens":688,"sizeBytes":2744},{"name":"README.md","path":"packages/loader/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/loader/README.md","title":"loader Documentation","category":"plugin-manifest","format":"markdown","content":"A subpackage of `@galacean/engine`.","isInternal":false,"tokens":11,"sizeBytes":35},{"name":"README.md","path":"packages/math/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/math/README.md","title":"math Documentation","category":"plugin-manifest","format":"markdown","content":"A subpackage of `@galacean/engine`.","isInternal":false,"tokens":11,"sizeBytes":35},{"name":"README.md","path":"packages/physics-lite/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/physics-lite/README.md","title":"physics-lite Documentation","category":"plugin-manifest","format":"markdown","content":"## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-physics-lite\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as PHYSICS_LITE from \"@galacean/engine-physics-lite\";\n```\n\nor individual classes using:\n\n```javascript\nimport { LitePhysics } from \"@galacean/engine-physics-lite\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\n\n// Initialize physics manager with LitePhysics.\nengine.physicsManager.initialize(LitePhysics);\n\n......\n\n// Run engine.\nengine.run();\n```","isInternal":false,"tokens":144,"sizeBytes":640},{"name":"README.md","path":"packages/physics-physx/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/physics-physx/README.md","title":"physics-physx Documentation","category":"plugin-manifest","format":"markdown","content":"## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-physics-physx\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as PHYSICS_PHYSX from \"@galacean/engine-physics-physx\";\n```\n\nor individual classes using:\n\n```javascript\nimport { PhysXPhysics } from \"@galacean/engine-physics-physx\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\n\n// Initialize physics manager with PhysXPhysics.\nengine.physicsManager.initialize(PhysXPhysics);\n\n......\n\n// Run engine.\nengine.run();\n```","isInternal":false,"tokens":153,"sizeBytes":647},{"name":"README.md","path":"packages/rhi-webgl/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/rhi-webgl/README.md","title":"rhi-webgl Documentation","category":"plugin-manifest","format":"markdown","content":"A subpackage of `@galacean/engine`.","isInternal":false,"tokens":11,"sizeBytes":35},{"name":"README.md","path":"packages/shader-lab/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/shader-lab/README.md","title":"shader-lab Documentation","category":"plugin-manifest","format":"markdown","content":"## Installation\n\n```sh\nnpm install @galacean/engine-shaderlab\n```\n\n## Usage\n\n```typescript\nimport { ShaderLab } from \"@galacean/engine-shaderlab\";\n\n// Create ShaderLab\nconst shaderLab = new ShaderLab();\n\n// Create engine with shaderLab\nconst engine = await WebGLEngine.create({ canvas: \"canvas\", shaderLab });\n\n......\n\n// Create shader by galacean shader code directly\nconst shader = Shader.create(galaceanShaderCode);\n\n.......\n\n// Run engine\nengine.run()\n```\n\nThere are two versions of ShaderLab: `Release` and `Verbose`. The `Verbose` version offers more user-friendly diagnostic information for debug ShaderLab compilation errors, while the Release version provides superior performance.\n\nyou can use `Verbose` version by import:\n\n```ts\nimport { ShaderLab } from \"@galacean/engine-shaderlab/verbose\";\n```\n\n## CFG Grammar conflict detection\n\nThe Galacean ShaderLab syntax is defined using Context-Free Grammar (CFG) and is documented within the `\\*.y` file. When modifications to the ShaderLab syntax are required, it is recommended to make changes to the existing CFG syntax file, and employ [Bison](https://www.gnu.org/software/bison/manual/bison.html) to detect any potential grammar conflicts.\n\n```sh\nbison ./Parser.y -r all\n```\n","isInternal":false,"tokens":281,"sizeBytes":1235},{"name":"README.md","path":"packages/shader/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/shader/README.md","title":"shader Documentation","category":"plugin-manifest","format":"markdown","content":"A subpackage of `@galacean/engine`.","isInternal":false,"tokens":11,"sizeBytes":35},{"name":"README.md","path":"packages/ui/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/ui/README.md","title":"ui Documentation","category":"plugin-manifest","format":"markdown","content":"# @galacean/engine-ui\n\n`@galacean/engine-ui` is a UI library designed for the `@galacean/engine`, this library enables developers to create and manage user interfaces efficiently within their **Galacean-based** applications. It is important to note that it is currently in an **experimental version**.\n\n## Features\n\n- **Rendering components**: Includes `Image` and `Text`.\n- **Interactive Components**: Include `Button`, as well as other planned basic rendering components to be added in the future.\n- **Event Handling**: Supports the dispatch and bubbling of events such as `onPointerEnter`, `onPointerExit`,`onPointerDown`, `onPointerUp`, `onPointerClick`, `onPointerDrag` and `onPointerDrop`.\n- **Optimized Performance**: Designed to run smoothly with the Galacean engine.\n\n## Installation\n\nTo use `@galacean/engine-ui` in your project, install it via npm:\n\n```bash\nnpm install @galacean/engine-ui\n```\n\n## Getting Started\n\nHere is a simple example to help you get started:\n\n```typescript\nimport { AssetType, Camera, Sprite, Texture2D, Vector3, WebGLEngine } from \"@galacean/engine\";\nimport { CanvasRenderMode, Image, ResolutionAdaptationMode, UICanvas } from \"@galacean/engine-ui\";\n\n// Initialize engine and scene\nconst engine = await WebGLEngine.create({ canvas: \"canvas\" });\nconst scene = engine.sceneManager.activeScene;\nconst rootEntity = scene.createRootEntity();\n\n// Create camera\nconst cameraEntity = rootEntity.createChild(\"Camera\");\ncameraEntity.transform.position = new Vector3(0, 0, 10);\nconst camera = cameraEntity.addComponent(Camera);\ncamera.farClipPlane = 200;\ncamera.nearClipPlane = 0.3;\n\n// Create canvas\nconst canvasEntity = rootEntity.createChild(\"canvas\");\nconst canvas = canvasEntity.addComponent(UICanvas);\ncanvas.renderMode = CanvasRenderMode.ScreenSpaceCamera;\ncanvas.resolutionAdaptationMode = ResolutionAdaptationMode.HeightAdaptation;\ncanvas.distance = 100;\ncanvas.renderCamera = camera;\n\n// Create Image\nconst imageEntity = canvasEntity.createChild(\"image\");\nconst image = imageEntity.addComponent(Image);\nengine.resourceManager\n  .load({\n    url: \"https://xxx.png\",\n    type: AssetType.Texture2D\n  })\n  .then((texture) => {\n    image.sprite = new Sprite(engine, <Texture2D>texture);\n  });\n\n// Run the engine\nengine.run();\n```\nEasier operations in the [Editor](https://galacean.antgroup.com/editor/).\n\n## Documentation\n\nFor detailed documentation, visit [the official documentation site](https://galacean.antgroup.com/engine).\n","isInternal":false,"tokens":574,"sizeBytes":2458},{"name":"README.md","path":"packages/xr-webxr/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/xr-webxr/README.md","title":"xr-webxr Documentation","category":"plugin-manifest","format":"markdown","content":"## Installation\n\n`@galacean/engine-xr-webxr` is one of the implementation backends of xr. If your XR application interface is WebXR standard, please introduce this package.\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-xr-webxr\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n```\n\n## Usage\n\n```typescript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n\n// Create engine by passing in the HTMLCanvasElement\nWebGLEngine.create({\n  canvas: \"canvas\",\n  xrDevice: new WebXRDevice(),\n}).then((engine) => {\n  // Users need to actively click the button to enter XR\n  XRButton.onClick = function () {\n    this.engine.xrManager.enterXR(XRSessionMode.AR).then(\n      () => {\n        console.log(\"Enter AR\");\n      },\n      (error) => {\n        console.log(\"Not supported AR\", error);\n      }\n    );\n  };\n});\n......\n```\n","isInternal":false,"tokens":268,"sizeBytes":1036},{"name":"README.md","path":"packages/xr/README.md","rawUrl":"https://raw.githubusercontent.com/galacean/engine/HEAD/packages/xr/README.md","title":"xr Documentation","category":"plugin-manifest","format":"markdown","content":"## Installation\n\n`@galacean/engine-xr` is the implementation layer of XRManager and is a necessary package for developing XR applications.\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-xr\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n```\n\n## Usage\n\n```typescript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n\n// Create engine by passing in the HTMLCanvasElement\nWebGLEngine.create({\n  canvas: \"canvas\",\n  xrDevice: new WebXRDevice(),\n}).then((engine) => {\n  // Users need to actively click the button to enter XR\n  XRButton.onClick = function () {\n    this.engine.xrManager.enterXR(XRSessionMode.AR).then(\n      () => {\n        console.log(\"Enter AR\");\n      },\n      (error) => {\n        console.log(\"Not supported AR\", error);\n      }\n    );\n  };\n});\n......\n```\n","isInternal":false,"tokens":256,"sizeBytes":996},{"name":".cursorrules","path":".cursorrules (anti-overengineering.mdc)","rawUrl":"https://raw.githubusercontent.com/PatrickJS/awesome-cursorrules/main/rules/anti-overengineering.mdc","title":"Prevent AI over-engineering by keeping changes scoped, simple, and directly tied to the user's request","category":"cursor-rule","format":"markdown","content":"# Anti-Over-Engineering\n\nOnly change what was asked. Simplest solution first. When unsure, ask.\n\nDo not modify unrequested code, add abstractions without a concrete need, import unnecessary dependencies, rewrite entire files for small changes, or add error handling for impossible scenarios.\n\nBefore delivery: verify you only changed requested code, check for simpler approaches, confirm no unrequested files were touched.","frontmatter":{"description":"Prevent AI over-engineering by keeping changes scoped, simple, and directly tied to the user's request","globs":["**/*"],"alwaysApply":false},"tokens":119,"sizeBytes":422}],"systemPromptSnippet":"<yakaai_skills repo=\"galacean/engine\">\n<!-- File: packages/core/README.md (Tokens: ~11 | Category: plugin-manifest) -->\nA subpackage of `@galacean/engine`.\n\n<!-- File: packages/design/README.md (Tokens: ~11 | Category: plugin-manifest) -->\nA subpackage of `@galacean/engine`.\n\n<!-- File: packages/galacean/README.md (Tokens: ~688 | Category: plugin-manifest) -->\n# Galacean Engine\n\n<a href=\"https://www.npmjs.com/package/@galacean/engine\"><img src=\"https://img.shields.io/npm/v/@galacean/engine\"/></a>\n![npm-size](https://img.shields.io/bundlephobia/minzip/@galacean/engine)\n![npm-download](https://img.shields.io/npm/dm/@galacean/engine)\n[![codecov](https://codecov.io/gh/galacean/engine/branch/main/graph/badge.svg?token=KR2UBKE3OX)](https://codecov.io/gh/galacean/engine)\n\nGalacean is a **web-first** and **mobile-first** high-performance real-time interactive engine. Use **component system design** and pursue ease of use and light weight. Developers can independently use and write Typescript scripts to develop projects using pure code.\n\n## Features\n\n- 🖥  &nbsp;**Platform** - Suppport HTML5 and wechat minigame\n- 🔮  &nbsp;**Graphics** - Advanced 2D + 3D graphics engine\n- 🏃  &nbsp;**Animation** - Powerful animation system\n- 🧱  &nbsp;**Physics** - Powerful and easy-to-use physical features\n- 👆  &nbsp;**Input** - Easy-to-use interactive capabilities\n- 📑  &nbsp;**Scripts** - Use TypeScript to write logic efficiently\n\n## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as GALACEAN from \"@galacean/engine\";\n```\n\nor individual classes using:\n\n```javascript\nimport { Engine, Scene, Entity } from \"@galacean/engine\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\nengine.canvas.resizeByClientSize();\n\n// Get scene and create root entity\nconst scene = engine.sceneManager.activeScene;\nconst rootEntity = scene.createRootEntity(\"Root\");\n\n// Create light\nconst lightEntity = rootEntity.createChild(\"Light\");\nconst directLight = lightEntity.addComponent(DirectLight);\nlightEntity.transform.setRotation(-45, -45, 0);\ndirectLight.intensity = 0.4;\n\n// Create camera\nconst cameraEntity = rootEntity.createChild(\"Camera\");\ncameraEntity.addComponent(Camera);\ncameraEntity.transform.setPosition(0, 0, 12);\n\n// Create sphere\nconst meshEntity = rootEntity.createChild(\"Sphere\");\nconst meshRenderer = meshEntity.addComponent(MeshRenderer);\nconst material = new BlinnPhongMaterial(engine);\nmeshRenderer.setMaterial(material);\nmeshRenderer.mesh = PrimitiveMesh.createSphere(engine, 1);\n\n// Run engine\nengine.run();\n```\n\n## Links\n\n- [Official Site](https://oasisengine.cn)\n- [Examples](https://oasisengine.cn/#/examples/latest)\n- [Documentation](https://oasisengine.cn/#/docs/latest/cn/install)\n- [API References](https://oasisengine.cn/#/api/latest/core)\n\n\n## License \n\nThe engine is released under the [MIT](https://opensource.org/licenses/MIT) license. See LICENSE file.\n\n<!-- File: packages/loader/README.md (Tokens: ~11 | Category: plugin-manifest) -->\nA subpackage of `@galacean/engine`.\n\n<!-- File: packages/math/README.md (Tokens: ~11 | Category: plugin-manifest) -->\nA subpackage of `@galacean/engine`.\n\n<!-- File: packages/physics-lite/README.md (Tokens: ~144 | Category: plugin-manifest) -->\n## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-physics-lite\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as PHYSICS_LITE from \"@galacean/engine-physics-lite\";\n```\n\nor individual classes using:\n\n```javascript\nimport { LitePhysics } from \"@galacean/engine-physics-lite\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\n\n// Initialize physics manager with LitePhysics.\nengine.physicsManager.initialize(LitePhysics);\n\n......\n\n// Run engine.\nengine.run();\n```\n\n<!-- File: packages/physics-physx/README.md (Tokens: ~153 | Category: plugin-manifest) -->\n## Installation\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-physics-physx\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport * as PHYSICS_PHYSX from \"@galacean/engine-physics-physx\";\n```\n\nor individual classes using:\n\n```javascript\nimport { PhysXPhysics } from \"@galacean/engine-physics-physx\";\n```\n\n## Usage\n\n```typescript\n// Create engine by passing in the HTMLCanvasElement id and adjust canvas size\nconst engine = await WebGLEngine.create({ canvas: \"canvas-id\" });\n\n// Initialize physics manager with PhysXPhysics.\nengine.physicsManager.initialize(PhysXPhysics);\n\n......\n\n// Run engine.\nengine.run();\n```\n\n<!-- File: packages/rhi-webgl/README.md (Tokens: ~11 | Category: plugin-manifest) -->\nA subpackage of `@galacean/engine`.\n\n<!-- File: packages/shader-lab/README.md (Tokens: ~281 | Category: plugin-manifest) -->\n## Installation\n\n```sh\nnpm install @galacean/engine-shaderlab\n```\n\n## Usage\n\n```typescript\nimport { ShaderLab } from \"@galacean/engine-shaderlab\";\n\n// Create ShaderLab\nconst shaderLab = new ShaderLab();\n\n// Create engine with shaderLab\nconst engine = await WebGLEngine.create({ canvas: \"canvas\", shaderLab });\n\n......\n\n// Create shader by galacean shader code directly\nconst shader = Shader.create(galaceanShaderCode);\n\n.......\n\n// Run engine\nengine.run()\n```\n\nThere are two versions of ShaderLab: `Release` and `Verbose`. The `Verbose` version offers more user-friendly diagnostic information for debug ShaderLab compilation errors, while the Release version provides superior performance.\n\nyou can use `Verbose` version by import:\n\n```ts\nimport { ShaderLab } from \"@galacean/engine-shaderlab/verbose\";\n```\n\n## CFG Grammar conflict detection\n\nThe Galacean ShaderLab syntax is defined using Context-Free Grammar (CFG) and is documented within the `\\*.y` file. When modifications to the ShaderLab syntax are required, it is recommended to make changes to the existing CFG syntax file, and employ [Bison](https://www.gnu.org/software/bison/manual/bison.html) to detect any potential grammar conflicts.\n\n```sh\nbison ./Parser.y -r all\n```\n\n<!-- File: packages/shader/README.md (Tokens: ~11 | Category: plugin-manifest) -->\nA subpackage of `@galacean/engine`.\n\n<!-- File: packages/ui/README.md (Tokens: ~574 | Category: plugin-manifest) -->\n# @galacean/engine-ui\n\n`@galacean/engine-ui` is a UI library designed for the `@galacean/engine`, this library enables developers to create and manage user interfaces efficiently within their **Galacean-based** applications. It is important to note that it is currently in an **experimental version**.\n\n## Features\n\n- **Rendering components**: Includes `Image` and `Text`.\n- **Interactive Components**: Include `Button`, as well as other planned basic rendering components to be added in the future.\n- **Event Handling**: Supports the dispatch and bubbling of events such as `onPointerEnter`, `onPointerExit`,`onPointerDown`, `onPointerUp`, `onPointerClick`, `onPointerDrag` and `onPointerDrop`.\n- **Optimized Performance**: Designed to run smoothly with the Galacean engine.\n\n## Installation\n\nTo use `@galacean/engine-ui` in your project, install it via npm:\n\n```bash\nnpm install @galacean/engine-ui\n```\n\n## Getting Started\n\nHere is a simple example to help you get started:\n\n```typescript\nimport { AssetType, Camera, Sprite, Texture2D, Vector3, WebGLEngine } from \"@galacean/engine\";\nimport { CanvasRenderMode, Image, ResolutionAdaptationMode, UICanvas } from \"@galacean/engine-ui\";\n\n// Initialize engine and scene\nconst engine = await WebGLEngine.create({ canvas: \"canvas\" });\nconst scene = engine.sceneManager.activeScene;\nconst rootEntity = scene.createRootEntity();\n\n// Create camera\nconst cameraEntity = rootEntity.createChild(\"Camera\");\ncameraEntity.transform.position = new Vector3(0, 0, 10);\nconst camera = cameraEntity.addComponent(Camera);\ncamera.farClipPlane = 200;\ncamera.nearClipPlane = 0.3;\n\n// Create canvas\nconst canvasEntity = rootEntity.createChild(\"canvas\");\nconst canvas = canvasEntity.addComponent(UICanvas);\ncanvas.renderMode = CanvasRenderMode.ScreenSpaceCamera;\ncanvas.resolutionAdaptationMode = ResolutionAdaptationMode.HeightAdaptation;\ncanvas.distance = 100;\ncanvas.renderCamera = camera;\n\n// Create Image\nconst imageEntity = canvasEntity.createChild(\"image\");\nconst image = imageEntity.addComponent(Image);\nengine.resourceManager\n  .load({\n    url: \"https://xxx.png\",\n    type: AssetType.Texture2D\n  })\n  .then((texture) => {\n    image.sprite = new Sprite(engine, <Texture2D>texture);\n  });\n\n// Run the engine\nengine.run();\n```\nEasier operations in the [Editor](https://galacean.antgroup.com/editor/).\n\n## Documentation\n\nFor detailed documentation, visit [the official documentation site](https://galacean.antgroup.com/engine).\n\n<!-- File: packages/xr-webxr/README.md (Tokens: ~268 | Category: plugin-manifest) -->\n## Installation\n\n`@galacean/engine-xr-webxr` is one of the implementation backends of xr. If your XR application interface is WebXR standard, please introduce this package.\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-xr-webxr\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n```\n\n## Usage\n\n```typescript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n\n// Create engine by passing in the HTMLCanvasElement\nWebGLEngine.create({\n  canvas: \"canvas\",\n  xrDevice: new WebXRDevice(),\n}).then((engine) => {\n  // Users need to actively click the button to enter XR\n  XRButton.onClick = function () {\n    this.engine.xrManager.enterXR(XRSessionMode.AR).then(\n      () => {\n        console.log(\"Enter AR\");\n      },\n      (error) => {\n        console.log(\"Not supported AR\", error);\n      }\n    );\n  };\n});\n......\n```\n\n<!-- File: packages/xr/README.md (Tokens: ~256 | Category: plugin-manifest) -->\n## Installation\n\n`@galacean/engine-xr` is the implementation layer of XRManager and is a necessary package for developing XR applications.\n\nTo install, use:\n\n```sh\nnpm install @galacean/engine-xr\n```\n\nThis will allow you to import engine entirely using:\n\n```javascript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n```\n\n## Usage\n\n```typescript\nimport { WebXRDevice } from \"@galacean/engine-xr-webxr\";\nimport { XRHitTest, XRSessionMode } from \"@galacean/engine-xr\";\n\n// Create engine by passing in the HTMLCanvasElement\nWebGLEngine.create({\n  canvas: \"canvas\",\n  xrDevice: new WebXRDevice(),\n}).then((engine) => {\n  // Users need to actively click the button to enter XR\n  XRButton.onClick = function () {\n    this.engine.xrManager.enterXR(XRSessionMode.AR).then(\n      () => {\n        console.log(\"Enter AR\");\n      },\n      (error) => {\n        console.log(\"Not supported AR\", error);\n      }\n    );\n  };\n});\n......\n```\n\n<!-- File: .cursorrules (anti-overengineering.mdc) (Tokens: ~119 | Category: cursor-rule) -->\n# Anti-Over-Engineering\n\nOnly change what was asked. Simplest solution first. When unsure, ask.\n\nDo not modify unrequested code, add abstractions without a concrete need, import unnecessary dependencies, rewrite entire files for small changes, or add error handling for impossible scenarios.\n\nBefore delivery: verify you only changed requested code, check for simpler approaches, confirm no unrequested files were touched.\n</yakaai_skills>"}