Unity开发技能Skill unity-development

Unity开发技能是一个AI辅助游戏开发工具,提供Unity引擎的全面集成能力。它支持C#脚本自动生成、场景管理、预制体创建、编辑器自动化、资产管道配置和跨平台构建。通过MCP服务器与Unity编辑器直接交互,实现智能化的游戏开发工作流,特别适用于AI驱动的游戏内容生成、自动化测试和项目管理工作。关键词:Unity开发,游戏引擎,C#脚本,AI辅助开发,编辑器自动化,预制体管理,场景构建,游戏资产,跨平台构建,MCP集成

游戏开发 7 次安装 181 次浏览 更新于 2/25/2026

名称: unity-development 描述: Unity引擎集成技能,用于项目设置、C#脚本编写、场景管理、预制体创建和编辑器自动化。使LLM能够通过MCP服务器与Unity编辑器交互,进行资产操作、脚本生成和自动化工作流。 允许工具: Read, Grep, Write, Bash, Edit, Glob, WebFetch

Unity开发技能

全面的Unity引擎开发集成,用于AI辅助游戏创建、编辑器自动化和项目管理。

概述

此技能提供与Unity项目交互的能力,包括C#脚本编写、场景操作、预制体管理和构建自动化。当可用时,它利用Unity MCP生态系统进行直接编辑器集成。

能力

项目管理

  • 创建和配置Unity项目
  • 管理项目设置(玩家设置、质量设置等)
  • 通过包管理器配置包依赖
  • 为代码组织设置程序集定义

C#脚本编写

  • 生成具有适当生命周期方法的MonoBehaviour脚本
  • 创建用于数据驱动设计的ScriptableObjects
  • 实现接口(ISerializationCallbackReceiver等)
  • 编写自定义编辑器脚本和PropertyDrawers
  • 使用Unity测试框架生成单元测试

场景管理

  • 以编程方式创建和修改场景
  • 实例化和配置游戏对象
  • 设置场景层次结构和父子关系
  • 配置灯光、摄像机和后期处理

预制体系统

  • 创建和修改预制体资产
  • 处理预制体变体和覆盖
  • 生成带有修改的预制体实例
  • 管理嵌套预制体

资产管道

  • 导入和配置资产(纹理、模型、音频)
  • 设置资产包和可寻址资产
  • 为优化配置导入设置
  • 生成占位符资产

构建系统

  • 为多个平台配置构建设置
  • 创建用于自动化的构建脚本
  • 设置CI/CD构建管道
  • 管理平台特定配置

先决条件

Unity安装

  • 推荐Unity 2021.3 LTS或更高版本
  • 安装Unity编辑器及所需模块

MCP服务器(推荐)

用于直接Unity编辑器集成:

{
  "mcpServers": {
    "unity": {
      "command": "npx",
      "args": ["-y", "unity-mcp"],
      "env": {
        "UNITY_PROJECT_PATH": "/path/to/unity/project"
      }
    }
  }
}

替代MCP服务器:

  • unity-mcp (CoplayDev) - 官方Unity MCP桥接
  • Unity-MCP (IvanMurzak) - 编辑器与运行时支持
  • mcp-unity (CoderGamester) - Cursor/Claude Code集成

使用模式

创建MonoBehaviour脚本

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    [Header("移动设置")]
    [SerializeField] private float moveSpeed = 5f;
    [SerializeField] private float jumpForce = 10f;

    [Header("地面检测")]
    [SerializeField] private Transform groundCheck;
    [SerializeField] private float groundRadius = 0.2f;
    [SerializeField] private LayerMask groundLayer;

    private Rigidbody2D rb;
    private bool isGrounded;

    private void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, groundLayer);
        HandleInput();
    }

    private void FixedUpdate()
    {
        HandleMovement();
    }

    private void HandleInput()
    {
        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        }
    }

    private void HandleMovement()
    {
        float horizontal = Input.GetAxisRaw("Horizontal");
        rb.velocity = new Vector2(horizontal * moveSpeed, rb.velocity.y);
    }
}

创建ScriptableObject

using UnityEngine;

[CreateAssetMenu(fileName = "NewEnemyData", menuName = "Game/Enemy Data")]
public class EnemyData : ScriptableObject
{
    [Header("基础信息")]
    public string enemyName;
    public Sprite icon;

    [Header("属性")]
    public int maxHealth = 100;
    public float moveSpeed = 3f;
    public int damage = 10;

    [Header("战斗")]
    public float attackRange = 2f;
    public float attackCooldown = 1.5f;

    [Header("奖励")]
    public int experienceReward = 50;
    public GameObject[] lootDrops;
}

编辑器脚本示例

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(EnemyData))]
public class EnemyDataEditor : Editor
{
    public override void OnInspectorGUI()
    {
        EnemyData enemyData = (EnemyData)target;

        EditorGUILayout.BeginHorizontal();
        if (enemyData.icon != null)
        {
            GUILayout.Box(enemyData.icon.texture, GUILayout.Width(64), GUILayout.Height(64));
        }
        EditorGUILayout.BeginVertical();
        EditorGUILayout.LabelField(enemyData.enemyName, EditorStyles.boldLabel);
        EditorGUILayout.LabelField($"HP: {enemyData.maxHealth} | 伤害: {enemyData.damage}");
        EditorGUILayout.EndVertical();
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Space();
        DrawDefaultInspector();
    }
}

与Babysitter SDK集成

任务定义示例

const unityScriptTask = defineTask({
  name: 'unity-script-generation',
  description: '生成Unity C#脚本',

  inputs: {
    scriptType: { type: 'string', required: true }, // MonoBehaviour, ScriptableObject, Editor
    className: { type: 'string', required: true },
    features: { type: 'array', required: true },
    outputPath: { type: 'string', required: true }
  },

  outputs: {
    scriptPath: { type: 'string' },
    success: { type: 'boolean' }
  },

  async run(inputs, taskCtx) {
    return {
      kind: 'skill',
      title: `生成Unity脚本: ${inputs.className}`,
      skill: {
        name: 'unity-development',
        context: {
          operation: 'generate_script',
          scriptType: inputs.scriptType,
          className: inputs.className,
          features: inputs.features,
          outputPath: inputs.outputPath
        }
      },
      io: {
        inputJsonPath: `tasks/${taskCtx.effectId}/input.json`,
        outputJsonPath: `tasks/${taskCtx.effectId}/result.json`
      }
    };
  }
});

MCP服务器集成

可用MCP工具(通过unity-mcp)

工具 描述
unity_create_gameobject 在场景中创建新游戏对象
unity_modify_component 在游戏对象上添加/修改组件
unity_create_script 生成并附加C#脚本
unity_build 触发Unity构建
unity_run_tests 执行Unity测试框架测试
unity_import_asset 导入和配置资产
unity_scene_hierarchy 查询场景结构
unity_project_settings 读取/修改项目设置

配置

{
  "mcpServers": {
    "unity": {
      "command": "uvx",
      "args": ["unity-mcp"],
      "env": {
        "UNITY_PROJECT_PATH": "C:/Projects/MyGame",
        "UNITY_VERSION": "2022.3.20f1"
      }
    }
  }
}

最佳实践

  1. 程序集定义:使用.asmdef文件组织代码以加快编译速度
  2. 序列化:使用[SerializeField]在检查器中公开字段,同时保持字段私有
  3. 空值检查:始终在Awake/Start中验证组件引用
  4. 对象池:避免频繁生成对象的运行时实例化
  5. 协程:用于基于时间的操作,避免重逻辑
  6. 事件:使用UnityEvent或C#事件进行解耦通信

平台考虑

平台 关键考虑因素
PC/Mac 内存限制较少,完整着色器支持
移动端 纹理压缩、绘制调用批处理、热限制
主机 认证要求、内存预算、TCR合规性
WebGL 无线程、内存有限、着色器限制

参考资料