AgentSkillsCN

cocos-creator-dev

全面覆盖 TypeScript 脚本编写、组件系统、节点层级、场景管理、资源加载与事件处理的 Cocos Creator 3.x 开发指南。适用于以下场景:(1) 编写或调试 Cocos Creator 3.x 的 TypeScript 脚本;(2) 创建并管理组件及其生命周期;(3) 操作节点、层级与场景组织;(4) 加载并管理游戏资源;(5) 实现事件系统与输入处理;(6) 优化 Cocos Creator 项目的性能与内存;(7) 从 2.x 版本迁移到 3.x 版本。

SKILL.md
--- frontmatter
name: cocos-creator-dev
description: Comprehensive Cocos Creator 3.x development guide covering TypeScript scripting, component system, node hierarchy, scene management, resource loading, and event handling. Use this skill when: (1) Writing or debugging Cocos Creator 3.x TypeScript scripts, (2) Creating and managing components and their lifecycle, (3) Working with nodes, hierarchy, and scene organization, (4) Loading and managing game resources, (5) Implementing event systems and input handling, (6) Optimizing performance and memory in Cocos Creator projects, (7) Migrating from 2.x to 3.x versions

Cocos Creator 3.x Development Guide

Guide for Cocos Creator 3.x game development using TypeScript.

Quick Start

Basic Component Template

typescript
import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('MyComponent')
export class MyComponent extends Component {
    @property(Node)
    targetNode: Node = null;

    @property
    speed: number = 10;

    onLoad() {
        // Initialization
    }

    start() {
        // First frame update
    }

    update(deltaTime: number) {
        // Per-frame update
    }
}

Common Operations

Add component dynamically:

typescript
this.node.addComponent(MyComponent);

Get component:

typescript
const comp = this.node.getComponent(MyComponent);

Load scene:

typescript
director.loadScene('SceneName');

Load resource:

typescript
resources.load('textures/sprite', SpriteFrame, (err, asset) => {
    this.node.getComponent(Sprite).spriteFrame = asset;
});

Reference Documentation

For detailed information on specific topics, consult these reference files:

Development Guidelines

Version Check

Always confirm the user is working with Cocos Creator 3.x, not 2.x. APIs and workflows differ significantly.

Code Style

  • Use TypeScript exclusively (JavaScript not supported in 3.x)
  • Follow decorator pattern: @ccclass, @property
  • Use type annotations for all properties
  • Prefer this.node for current node access

Performance Best Practices

  • Release unused resources with assetManager.releaseAsset()
  • Use object pooling for frequently created/destroyed nodes
  • Cache component references instead of repeated getComponent() calls
  • Use scheduleOnce instead of timers for one-time delays

Common Pitfalls

  • Lifecycle order: onLoadstartupdate. Don't access other components in onLoad if they might not be ready.
  • Resource leaks: Always release dynamically loaded assets
  • Node activation: Check node.active before accessing components
  • Scene switching: Use persist nodes for data that needs to survive scene changes

Key APIs Reference

Node Operations

  • this.node - Current node
  • this.node.parent - Parent node
  • this.node.children - Child nodes array
  • this.node.addChild(child) - Add child node
  • this.node.removeFromParent() - Remove from parent
  • this.node.destroy() - Destroy node
  • this.node.setPosition(x, y, z) - Set position
  • this.node.setRotation(x, y, z) - Set rotation
  • this.node.setScale(x, y, z) - Set scale

Component Operations

  • this.node.addComponent(T) - Add component
  • this.node.getComponent(T) - Get component
  • this.getComponentInChildren(T) - Get component in children
  • this.getComponentsInChildren(T) - Get all components in children

Scene Operations

  • director.loadScene(name) - Load scene
  • director.preloadScene(name) - Preload scene
  • director.getScene() - Get current scene
  • game.addPersistRoot(node) - Add persist node
  • game.removePersistRoot(node) - Remove persist node

Resource Operations

  • resources.load(path, type, callback) - Load resource
  • assetManager.loadRemote(url, type, callback) - Load remote resource
  • assetManager.releaseAsset(asset) - Release resource
  • resources.loadDir(path, type, callback) - Load directory

Event Operations

  • this.node.on(type, callback, target) - Register event
  • this.node.off(type, callback, target) - Unregister event
  • this.node.emit(type, detail) - Emit event
  • input.on(type, callback, target) - Register input event

External Resources

Troubleshooting

Component Not Found

  • Verify component is attached in editor
  • Check node is active: if (this.node.active)
  • Use getComponentInChildren() for nested components

Scene Not Loading

  • Check scene name in Build Settings
  • Verify scene is added to build
  • Use preloadScene() for large scenes

Memory Leaks

  • Release assets after use
  • Destroy unused nodes
  • Remove event listeners in onDestroy
  • Use Asset Bundles for modular loading

Performance Issues

  • Profile with Chrome DevTools
  • Reduce draw calls with batching
  • Use object pooling
  • Optimize sprite atlases
  • Check script execution time in updates

When to Read References

Read specific reference files when:

  • script-basics.md: Creating new components, defining properties, configuring TypeScript
  • component-system.md: Implementing lifecycle callbacks, managing component dependencies
  • node-hierarchy.md: Creating/destroying nodes, building scene hierarchy, coordinate transformations
  • scene-management.md: Loading scenes, passing data between scenes, managing game flow
  • resource-management.md: Loading assets, managing memory, using Asset Bundles
  • event-system.md: Handling user input, implementing custom events, component communication

Decision Guide

Multiple valid approaches? Use high freedom - provide options and let context guide choice.

Standard pattern exists? Use medium freedom - provide template code with parameters.

Error-prone operation? Use low freedom - provide specific, validated code pattern.