Unity 3D:从零开发2D游戏指南

以下为完整开发流程(基于Unity 2021 LTS版本),包含关键步骤和代码示例:


1. 项目初始化
  1. 创建项目

    • 打开Unity Hub → 新建项目 → 选择 2D模板
    • 命名项目(如 My2DGame)→ 设置存储路径
  2. 核心目录结构

    Assets/
    ├── Sprites    # 存放精灵图
    ├── Scripts    # C#脚本
    ├── Scenes     # 游戏场景
    └── Prefabs    # 预制体
    


2. 导入资源与场景搭建
  1. 导入精灵图

    • 将PNG素材拖入 Assets/Sprites
    • 选中图片 → Inspector窗口设置:
      Texture Type: Sprite (2D and UI)  
      Pixels Per Unit: 100 (根据素材调整)  
      

  2. 创建Tilemap地图

    // 菜单操作:
    GameObject > 2D Object > Tilemap
    

    • 使用 Tile Palette (Window > 2D > Tile Palette) 绘制关卡

3. 玩家角色控制
  1. 角色设置

    • 拖拽角色精灵到场景 → 添加组件:
      Rigidbody 2D (重力缩放 Gravity Scale: 0)  
      Capsule Collider 2D (碰撞体)  
      

  2. 移动脚本
    创建 PlayerController.cs

    using UnityEngine;
    
    public class PlayerController : MonoBehaviour
    {
        [SerializeField] float moveSpeed = 8f;
        private Rigidbody2D rb;
    
        void Start() => rb = GetComponent<Rigidbody2D>();
    
        void Update()
        {
            float horizontal = Input.GetAxis("Horizontal");
            rb.velocity = new Vector2(horizontal * moveSpeed, rb.velocity.y);
            
            // 跳跃
            if (Input.GetKeyDown(KeyCode.Space))
                rb.AddForce(Vector2.up * 10f, ForceMode2D.Impulse);
        }
    }
    


4. 2D物理与碰撞系统
  1. 平台碰撞体

    • 为平台添加 Box Collider 2D
    • 勾选 Used By Effector → 添加 Platform Effector 2D (允许从下方穿透)
  2. 碰撞检测

    // 在玩家脚本中添加:
    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Enemy"))
            Debug.Log("玩家受到伤害!");
    }
    


5. 相机跟随

创建 CameraFollow.cs

public class CameraFollow : MonoBehaviour
{
    [SerializeField] Transform target;
    [SerializeField] Vector3 offset = new Vector3(0, 0, -10);
    [SerializeField] float smoothTime = 0.25f;
    
    private Vector3 velocity = Vector3.zero;

    void LateUpdate()
    {
        Vector3 targetPosition = target.position + offset;
        transform.position = Vector3.SmoothDamp(
            transform.position, 
            targetPosition, 
            ref velocity, 
            smoothTime
        );
    }
}


6. 动画系统实现
  1. 创建动画控制器

    • 选中角色 → Window > Animation > Animation
    • 制作 Idle, Run, Jump 动画片段
  2. 状态机控制

    // 在PlayerController中添加:
    private Animator animator;
    
    void Start() {
        animator = GetComponent<Animator>();
        // ...其他初始化
    }
    
    void Update() {
        animator.SetFloat("Speed", Mathf.Abs(rb.velocity.x));
        animator.SetBool("IsGrounded", CheckGround());
    }
    
    bool CheckGround() {
        return Physics2D.Raycast(transform.position, Vector2.down, 0.1f);
    }
    


7. 游戏逻辑扩展
  1. 收集物品

    // 物品脚本 Collectible.cs
    public class Collectible : MonoBehaviour
    {
        void OnTriggerEnter2D(Collider2D other)
        {
            if (other.CompareTag("Player")) {
                GameManager.Instance.AddCoin(1);
                Destroy(gameObject);
            }
        }
    }
    

  2. 敌人生成
    使用对象池预制敌人:

    public class Spawner : MonoBehaviour
    {
        [SerializeField] GameObject enemyPrefab;
        [SerializeField] float spawnInterval = 5f;
        
        void Start() => InvokeRepeating("SpawnEnemy", 0, spawnInterval);
        
        void SpawnEnemy() {
            Instantiate(enemyPrefab, transform.position, Quaternion.identity);
        }
    }
    


8. 构建与发布
  1. 场景管理

    • File > Build Settings → 添加当前场景
    • 使用 SceneManager.LoadScene() 切换关卡
  2. 平台设置

    • 切换目标平台(PC/Mobile)
    • Player Settings中设置:
      • 分辨率
      • 图标
      • 启动画面
  3. 生成游戏
    Build Settings → Build → 选择输出文件夹


关键优化技巧

  1. 性能方面
    • 使用 Sprite Atlas 打包精灵(减少Draw Call)
    • 静态对象标记 Static 启用批处理
  2. 调试工具
    • 快捷键 Ctrl+Shift+F:居中选中对象
    • Gizmos 可视化碰撞范围
  3. 资源推荐
    • 免费素材: Kenney Assets
    • 插件:2D Pixel Perfect Camera(像素风适配)

完成基础框架后,可通过Unity Asset Store获取粒子特效、音效等资源扩展游戏性。建议每开发一个模块后立即测试,确保功能正常。

Logo

这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!

更多推荐