360 Secure SkillHub
360 安全技能中心

cocos-helper

面向 Cocos Creator 游戏开发的辅助技能:说明 assets/settings/native 等目录结构,给出单例管理器、事件管理器、对象池三段 TypeScript 组件模板,并列出纹理压缩、图集合批、分包加载等构建优化建议。不含构建脚本、依赖配置或编辑器自动化操作。

guyulong
热度 0.00
最近更新 2026-10-18 23:40:10
分类:开发依赖:纯提示词应用场景:代码生成 / 模板

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add guyulong/cn-agent-skills/cocos-helper
Metadata
name
cocos-helper
description
Cocos Creator游戏开发助手
category
游戏开发
tags
["cocos","游戏引擎","2d","3d"]
tools
["claude-code","cursor"]

Cocos Creator 开发助手

使用场景

辅助Cocos Creator游戏开发,提供常用组件和最佳实践。

项目结构

├── assets/
│   ├── scenes/        # 场景文件
│   ├── scripts/       # 脚本文件
│   │   ├── manager/   # 管理器
│   │   ├── ui/        # UI组件
│   │   ├── game/      # 游戏逻辑
│   │   └── utils/     # 工具函数
│   ├── prefabs/       # 预制体
│   ├── textures/      # 纹理
│   ├── audio/         # 音频
│   └── animations/    # 动画
├── settings/          # 项目设置
└── native/            # 原生平台配置

常用组件模板

单例管理器

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

@ccclass('GameManager')
export class GameManager extends Component {
    private static _instance: GameManager = null;
    
    public static get instance(): GameManager {
        return this._instance;
    }
    
    onLoad() {
        if (GameManager._instance) {
            this.node.destroy();
            return;
        }
        GameManager._instance = this;
        // 不销毁节点
        // cc.game.addPersistRootNode(this.node);
    }
}

事件管理器

import { EventTarget } from 'cc';

export class EventManager {
    private static _eventTarget = new EventTarget();
    
    static on(event: string, callback: Function, target?: any) {
        this._eventTarget.on(event, callback, target);
    }
    
    static off(event: string, callback: Function, target?: any) {
        this._eventTarget.off(event, callback, target);
    }
    
    static emit(event: string, ...args: any[]) {
        this._eventTarget.emit(event, ...args);
    }
}

对象池

import { NodePool, Prefab, instantiate } from 'cc';

export class PoolManager {
    private static pools: Map<string, NodePool> = new Map();
    
    static getPool(name: string, prefab: Prefab): NodePool {
        if (!this.pools.has(name)) {
            this.pools.set(name, new NodePool(name));
        }
        return this.pools.get(name);
    }
    
    static spawn(name: string, prefab: Prefab) {
        const pool = this.getPool(name, prefab);
        if (pool.size() > 0) {
            return pool.get();
        }
        return instantiate(prefab);
    }
    
    static recycle(name: string, node: any) {
        const pool = this.pools.get(name);
        if (pool) {
            pool.put(node);
        }
    }
}

构建优化

  • 开启纹理压缩(ETC2/ASTC)
  • 合并图集减少DrawCall
  • 使用分包加载
  • 音频使用合适的格式和比特率
  • 移除未使用的资源