第六篇:Unity专项方向

目标:根据职业方向深入专精


第27章:2D 游戏开发专项

27.1 Sprite 系统

csharp 复制代码
// SpriteRenderer 属性
SpriteRenderer sr = GetComponent<SpriteRenderer>();
sr.sprite = mySprite;
sr.color = Color.red;
sr.flipX = true;          // 水平翻转
sr.sortingOrder = 5;       // 渲染排序

// Sprite Atlas(精灵图集)
// 将多个小图合并为一张大图,减少DrawCall
// 创建:Create → 2D → Sprite Atlas
// 自动打包:设置Include目录

27.2 Tilemap 瓦片地图

复制代码
使用流程:
1. 创建 Tilemap:2D Object → Tilemap → Rectangular
2. 绘制瓦片:Window → 2D → Tile Palette
3. 添加碰撞:TilemapCollider2D → 合并碰撞 CompositeCollider2D
4. 渲染排序:Tilemap Renderer → Sort Order

多层结构:
├── Background(背景层)sortingOrder = 0
├── Ground(地面层)sortingOrder = 1
├── Objects(物件层)sortingOrder = 2
└── Foreground(前景层)sortingOrder = 3

27.3 2D 物理

csharp 复制代码
// 2D 物理组件(独立于3D物理系统)
Rigidbody2D rb2d;
rb2d.velocity = new Vector2(speed, rb2d.velocity.y);
rb2d.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
rb2d.gravityScale = 2f; // 重力缩放

// 2D 碰撞器
BoxCollider2D, CircleCollider2D, CapsuleCollider2D, PolygonCollider2D

// 2D 射线
RaycastHit2D hit = Physics2D.Raycast(origin, direction, distance, layerMask);

// 2D 碰撞回调
void OnCollisionEnter2D(Collision2D collision) { }
void OnTriggerEnter2D(Collider2D other) { }

27.4 2D 动画

复制代码
Sprite Animation:
├── 逐帧动画:将多个Sprite拖入Scene自动创建
├── Animator:与3D动画系统相同
├── DOTween:插值动画(平滑移动/缩放/旋转)
└── Spine/DragonBones:骨骼动画(角色动画标准方案)

第28章:3D 图形进阶

28.1 光照系统

复制代码
光源类型:
├── Directional Light  ← 太阳光(全局方向光)
├── Point Light        ← 点光源(灯泡)
├── Spot Light         ← 聚光灯(手电筒)
└── Area Light         ← 面光源(仅烘焙)

光照模式:
├── Realtime   ← 实时(高性能消耗)
├── Mixed      ← 混合(静态烘焙+动态实时)
└── Baked      ← 完全烘焙(仅静态物体,最佳性能)

Lightmap烘焙:
Window → Rendering → Lighting → Generate Lighting
├── 物体必须标记Static
├── 需要第二套UV(Unity自动生成)
└── 输出Lightmap纹理存储光照信息

Light Probe(光照探针):
└── 为动态物体提供烘焙光照的近似值
    在场景中放置探针点,动态物体插值获取光照

Reflection Probe(反射探针):
└── 为物体提供环境反射
    实时/烘焙模式,影响金属/光滑材质的反射效果

28.2 材质与 PBR

复制代码
PBR(Physically Based Rendering)标准材质属性:
├── Albedo       ← 基础颜色/纹理
├── Metallic     ← 金属度(0=非金属, 1=金属)
├── Smoothness   ← 光滑度(0=粗糙, 1=镜面)
├── Normal Map   ← 法线贴图(凹凸细节)
├── Height Map   ← 高度贴图(视差效果)
├── Occlusion    ← 环境遮蔽(阴影增强)
└── Emission     ← 自发光

纹理类型:
├── _MainTex     ← 主贴图(Albedo)
├── _BumpMap     ← 法线贴图
├── _MetallicGlossMap ← 金属光滑贴图
├── _OcclusionMap ← AO贴图
└── _EmissionMap  ← 自发光贴图

28.3 粒子系统

复制代码
Particle System 核心模块:
├── Main          ← 持续时间/循环/发射速率
├── Emission      ← 发射数量/突发
├── Shape         ← 发射形状(球/锥/盒)
├── Velocity      ← 速度(方向/大小)
├── Color over Lifetime  ← 颜色渐变
├── Size over Lifetime   ← 大小变化
├── Noise         ← 噪声扰动
├── Collision     ← 碰撞
├── Sub Emitters  ← 子发射器
└── Renderer      ← 渲染模式

常见特效:
├── 火焰:橙红渐变 + 上升速度 + 噪声
├── 烟雾:灰色半透明 + 扩散 + 旋转
├── 爆炸:突发发射 + 快速衰减 + 子弹片
├── 魔法:环形发射 + 颜色循环 + 拖尾
└── 血液:喷射 + 重力 + 碰撞贴花

VFX Graph(GPU粒子):
└── 支持百万级粒子,节点式编辑器
    适合:大量粒子、复杂效果、GPU计算

第29章:跨平台适配

29.1 平台差异处理

csharp 复制代码
// 预编译指令
#if UNITY_ANDROID
    Debug.Log("Android平台");
#elif UNITY_IOS
    Debug.Log("iOS平台");
#elif UNITY_WEBGL
    Debug.Log("WebGL平台");
#elif UNITY_STANDALONE
    Debug.Log("PC平台");
#endif

// 运行时平台检测
if (Application.platform == RuntimePlatform.Android)
    SetupAndroid();

// 触屏/PC输入适配
bool isMobile = Application.isMobilePlatform;

29.2 性能分级

csharp 复制代码
// 根据设备性能自动分级
public enum QualityTier { Low, Medium, High, Ultra }

QualityTier DetectTier()
{
    int mem = SystemInfo.systemMemorySize; // MB
    int gpu = SystemInfo.graphicsMemorySize;
    int cores = SystemInfo.processorCount;

    if (mem >= 8000 && gpu >= 4000) return QualityTier.Ultra;
    if (mem >= 4000 && gpu >= 2000) return QualityTier.High;
    if (mem >= 2000) return QualityTier.Medium;
    return QualityTier.Low;
}

void ApplyQuality(QualityTier tier)
{
    switch (tier)
    {
        case QualityTier.Low:
            QualitySettings.SetQualityLevel(0);
            Application.targetFrameRate = 30;
            break;
        case QualityTier.High:
            QualitySettings.SetQualityLevel(3);
            Application.targetFrameRate = 60;
            break;
    }
}

29.3 屏幕适配

csharp 复制代码
// 安全区域适配(刘海屏/折叠屏)
Rect safeArea = Screen.safeArea;
// 调整UI面板位置到安全区域内

// 分辨率适配
float aspect = (float)Screen.width / Screen.height;
// 16:9 → 1.78
// 18:9 → 2.0
// 21:9 → 2.33

// CanvasScaler适配策略
// matchWidthOrHeight = 0 → 宽度优先(横屏游戏)
// matchWidthOrHeight = 1 → 高度优先(竖屏游戏)
// matchWidthOrHeight = 0.5 → 混合(推荐)

第30章:热更新方案

30.1 资源热更新(Addressables)

复制代码
流程:
1. 配置Addressables Remote路径(CDN地址)
2. 标记需要热更的资源
3. Build Content → 上传到CDN
4. 客户端启动时检查更新

代码:
AsyncOperationHandle<List<string>> checkHandle =
    Addressables.CheckForCatalogUpdates();
yield return checkHandle;
if (checkHandle.Result.Count > 0)
{
    // 有更新,下载新资源
    AsyncOperationHandle updateHandle =
        Addressables.UpdateCatalogs(checkHandle.Result);
    yield return updateHandle;
}

30.2 代码热更新方案

复制代码
方案对比:
┌────────────┬────────────┬──────────┬──────────┐
│   方案      │   语言      │  性能     │  适用     │
├────────────┼────────────┼──────────┼──────────┤
│ Lua(xLua)  │ Lua        │ 中       │ 国内主流  │
│ HybridCLR  │ C#         │ 高       │ 新趋势   │
│ ILRuntime  │ C#         │ 中       │ 成熟方案  │
│ Puerts     │ TypeScript │ 中       │ 前端背景  │
└────────────┴────────────┴──────────┴──────────┘

HybridCLR(推荐):
├── 原理:扩展IL2CPP,支持动态加载DLL
├── 优势:原生C#开发,无需学新语言
├── 性能:接近原生IL2CPP
└── 支持:Unity 2020.3+

30.3 完整热更流程

复制代码
启动App → 检查版本号 → 对比清单(Manifest)
→ 下载差异文件 → 校验MD5 → 解压到本地
→ 加载新代码/资源 → 进入游戏

版本管理策略:
├── 大版本更新 → 整包更新(App Store)
├── 中版本更新 → 资源+代码热更
└── 小版本更新 → 仅资源热更(配置/美术)

附录:学习路线总结

复制代码
入门(1-2月):1-5章
├── C# 基础 + Unity编辑器 + 生命周期
├── 做一个简单3D场景(移动+拾取)
└── 产出:理解 MonoBehaviour 体系

中级(2-3月):6-11章
├── 物理 + UI + 动画 + 音频 + 资源
├── 做一个完整小游戏(如平台跳跃)
└── 产出:独立完成小型游戏

进阶(3-4月):12-17章
├── 架构 + 事件 + 对象池 + 存档 + AI + 编辑器
├── 做一个有AI敌人的RPG Demo
└── 产出:掌握常用设计模式

高级(4-6月):18-22章
├── 资源管理 + 异步 + Shader + 优化 + 网络
├── 参与或主导一个完整项目
└── 产出:可处理工程级问题

工程化(持续):23-30章
├── Git + 测试 + 打包 + CI/CD + 热更新
├── 在团队中实践
└── 产出:具备完整项目交付能力

🎮 本知识体系配套 Unity Demo 工程

路径:UnityLearningDemo/

使用 Unity 2023.2.12f1 打开,按 F1-F12 切换各章节 Demo

相关推荐
mxwin2 小时前
Unity Shader 屏幕空间反射 (SSR) 原理解析
jvm·unity·游戏引擎·shader
心前阳光2 小时前
Unity之利用特性给ScriptableObject分组
unity·游戏引擎
mxwin2 小时前
Unity Shader 屏幕空间法线重建 从深度缓冲反推世界法线——原理、踩坑与 URP Shader 实战
unity·游戏引擎·shader
空中海2 小时前
第五篇:Unity工程化能力
elasticsearch·unity·游戏引擎
LF男男2 小时前
TouchPad(单例)
unity·c#
天人合一peng3 小时前
Unity 3D 电脑端和手机端都实现画线与清除功能
3d·unity·智能手机
云上空3 小时前
Unity 角色“防卡墙”实战:不用动态物理材质,也能稳定解决 Wedging 问题
unity·游戏引擎·材质
不绝19114 小时前
导航系统/NavMeshAgent组件
unity
mxwin17 小时前
Unity Shader 屏幕空间 UVScreen Space UV 完全指南
unity·游戏引擎·uv