jpskill.com
💬 コミュニケーション コミュニティ

cocos24-ui

Cocos Creator 2.4.x のUIスクリーンショットから、UIコントロールクラスとモデルクラスのコードを自動生成するSkill。

📜 元の英語説明(参考)

根据 UI 截图生成 Cocos Creator 2.4.x 的 UI 控制类和 Model 类代码

🇯🇵 日本人クリエイター向け解説

一言でいうと

Cocos Creator 2.4.x のUIスクリーンショットから、UIコントロールクラスとモデルクラスのコードを自動生成するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-17
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[Skill 名] cocos24-ui

Cocos Creator 2.4.x ベストプラクティス

ディレクトリ構造

cocos/
├── SKILL.md          # スキル説明ドキュメント
├── LoadAsset.ts      # [再利用可能] リソース参照マネージャーコンポーネント
├── LoadSprite.ts     # [再利用可能] 動的画像読み込みコンポーネント
├── ModelValue.ts     # [再利用可能] 監視可能な数値型
├── UIManager.ts      # [再利用可能] UI ポップアップマネージャー
├── UIState.ts        # [再利用可能] UI 状態管理
├── UIExample.ts      # [サンプル] UI コントロールクラス
└── UIModelExample.ts # [サンプル] UI モデルクラス

説明

  • [再利用可能] - ベストプラクティスコードで、プロジェクトに直接コピーして使用できます。
  • [サンプル] - 参考規範で、新しい UI を作成する際にこの構造に従って記述します。

適用シナリオ

ユーザーが提供した UI スクリーンショットから、対応する TypeScript コード(UI コントロールクラス + Model クラス)を生成します。

実行フロー

  1. プロジェクト内に再利用可能なコンポーネントが存在するか確認し、なければまずプロジェクトにコピーします。
  2. UI スクリーンショットの構造を分析し、要素タイプ(Label、Button、Sprite など)を識別します。
  3. UI コントロールクラスの規範に従ってコードを生成します。

再利用可能コンポーネント

UI コードを生成する前に、以下のコンポーネントがプロジェクト内に存在するか確認し、存在しない場合はコピーしてください。

ファイル 説明
LoadAsset.ts リソース参照マネージャー。動的に読み込まれるリソースの参照カウントを一元管理し、メモリリークを防ぎます。
LoadSprite.ts 動的画像読み込みコンポーネント。LoadAsset と組み合わせて使用します。
ModelValue.ts 監視可能な数値型。ネットワーク遅延下での即時フィードバックとデータの一貫性の問題を解決します。
UIManager.ts UI ポップアップマネージャー。シングルトンパターンでポップアップのライフサイクルを管理します。
UIState.ts UI 状態管理。UIManager と組み合わせて使用します。

UI 開発規範

各 UI には、その UI に必要なすべてのデータを定義する Model クラスが付属している必要があります。UI コントロールクラスは setData(model) を介してデータを受け取ります。

UI Model クラス規範

TypeScript の class を使用してデータモデルを定義し、UI が表示する必要があるすべてのフィールドを含めます。

/** UI データモデルの例 */
export class UIModel {
    /** 一意の識別子 */
    id: number;
    /** タイトルテキスト */
    title: string = '';
    /** ロック解除されているか */
    isUnlock: boolean = false;
    /** 監視可能な数値型 */
    value: ModelValue;
    /** 最大値 */
    maxValue: number = 100;
    /** ネストされたサブモデル */
    items: SubModel[] = [];
}

要点

  • クラス名は Model で終わります。
  • プロパティには型アノテーションとデフォルト値を付けます。
  • 他の Model クラスや配列をネストできます。
  • 変化を監視する必要がある数値には ModelValue 型を使用します。

例: UIModelExample.ts


UI コントロールクラス規範

新しい UI コントロールクラスを作成する際は、以下の構造に従ってください。

1. 参照するコンポーネントの宣言

@property デコレータを使用して、エディタでバインドする必要があるすべてのコンポーネント参照を宣言します。

@property(cc.Label)
label_name: cc.Label = null;

@property(cc.Node)
node_name: cc.Node = null;

@property(I18nLabel)  // カスタムコンポーネント
custom_component: CustomComponent = null;

2. setData メソッド

UI 初期化のエントリポイントとして setData(data) を統一して使用します。

data: DataModel = null;

setData(data: DataModel) {
    this.data = data;
    this.initListen();        // イベントリスナーの初期化
    this.updateUI();          // UI 表示の更新
}

3. click によるクリックイベントの一元処理

ノードに click イベントをバインドし、currentTarget.name を介して処理を振り分けます。

click(target: cc.Event.EventTouch) {
    switch (target.currentTarget.name) {
        case 'btn_name_1':
            // ボタン1のクリックを処理
            break;
        case 'btn_name_2':
            // ボタン2のクリックを処理
            break;
        default:
            break;
    }
}

4. イベントリスニング管理

initListen()onDestroy() をペアで使用してイベント購読を管理し、メモリリークを防ぎます。

isListening: boolean = false;

initListen() {
    if (this.isListening) return;
    this.isListening = true;
    this.data.property.on('valueChanged', this.onValueChanged, this);
}

onDestroy() {
    if (!this.isListening) return;
    this.isListening = false;
    this.data.property.off('valueChanged', this.onValueChanged, this);
}

例: UIExample.ts

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Cocos Creator 2.4.x 最佳实践

目录结构

cocos/
├── SKILL.md          # 技能说明文档
├── LoadAsset.ts      # [可复用] 资源引用管理器组件
├── LoadSprite.ts     # [可复用] 动态图片加载组件
├── ModelValue.ts     # [可复用] 可监听数值类型
├── UIManager.ts      # [可复用] UI 弹窗管理器
├── UIState.ts        # [可复用] UI 状态管理
├── UIExample.ts      # [示例] UI 控制类
└── UIModelExample.ts # [示例] UI Model 类

说明

  • [可复用] - 最佳实践代码,可直接复制到项目中使用
  • [示例] - 参考规范,新建 UI 时按此结构编写

适用场景

用户提供 UI 截图,生成对应的 TypeScript 代码(UI 控制类 + Model 类)。

执行流程

  1. 检查项目中是否存在可复用组件,没有则先复制到项目
  2. 分析 UI 截图结构,识别元素类型(Label、Button、Sprite 等)
  3. 按照 UI 控制类规范生成代码

可复用组件

生成 UI 代码前,检查以下组件是否存在于项目中,不存在则复制:

文件 说明
LoadAsset.ts 资源引用管理器,统一管理动态加载资源的引用计数,防止内存泄漏
LoadSprite.ts 动态图片加载组件,配合 LoadAsset 使用
ModelValue.ts 可监听数值类型,解决网络延迟下的即时反馈与数据一致性问题
UIManager.ts UI 弹窗管理器,单例模式管理弹窗生命周期
UIState.ts UI 状态管理,配合 UIManager 使用

UI 开发规范

每个 UI 需要配套一个 Model 类,定义该 UI 所需的所有数据。UI 控制类通过 setData(model) 接收数据。

UI Model 类规范

使用 TypeScript class 定义数据模型,包含 UI 需要展示的所有字段:

/** UI 数据模型示例 */
export class UIModel {
    /** 唯一标识 */
    id: number;
    /** 标题文本 */
    title: string = '';
    /** 是否解锁 */
    isUnlock: boolean = false;
    /** 可监听的数值类型 */
    value: ModelValue;
    /** 最大值 */
    maxValue: number = 100;
    /** 嵌套子模型 */
    items: SubModel[] = [];
}

要点

  • 类名以 Model 结尾
  • 属性带类型注解和默认值
  • 可嵌套其他 Model 类或数组
  • 需要监听变化的数值使用 ModelValue 类型

示例: UIModelExample.ts


UI 控制类规范

创建新的 UI 控制类时,遵循以下结构:

1. 声明引用的组件

使用 @property 装饰器声明所有需要在编辑器中绑定的组件引用:

@property(cc.Label)
label_name: cc.Label = null;

@property(cc.Node)
node_name: cc.Node = null;

@property(I18nLabel)  // 自定义组件
custom_component: CustomComponent = null;

2. setData 方法

统一使用 setData(data) 作为 UI 初始化入口:

data: DataModel = null;

setData(data: DataModel) {
    this.data = data;
    this.initListen();        // 初始化事件监听
    this.updateUI();          // 更新 UI 显示
}

3. click 统一处理点击事件

在节点上绑定 click 事件,通过 currentTarget.name 分发处理:

click(target: cc.Event.EventTouch) {
    switch (target.currentTarget.name) {
        case 'btn_name_1':
            // 处理按钮1点击
            break;
        case 'btn_name_2':
            // 处理按钮2点击
            break;
        default:
            break;
    }
}

4. 事件监听管理

配对使用 initListen()onDestroy() 管理事件订阅,防止内存泄漏:

isListening: boolean = false;

initListen() {
    if (this.isListening) return;
    this.isListening = true;
    this.data.property.on('valueChanged', this.onValueChanged, this);
}

onDestroy() {
    if (!this.isListening) return;
    this.isListening = false;
    this.data.property.off('valueChanged', this.onValueChanged, this);
}

示例: UIExample.ts