2.导入资源和模拟需求
2.1 知识点
概述
本节的目标是将角色资源导入到一个内置渲染管线工程中,并通过脚本在场景中批量实例化大量角色,构建一个高压力的测试场景。后续关于 GPU Instancing、VAT 等优化效果,都会以该场景的性能数据作为对比基线。
导入模型与动画
- 创建工程并导入资源
创建一个使用内置渲染管线的空工程,将提供的角色模型和动画资源导入到Assets目录下,并按项目习惯整理好子目录结构。 - 检查模型导入选项
选中角色模型,在Inspector的Model面板中启用与动画相关的选项,例如Import BlendShapes、Import Visibility等,以避免播放动画时出现表情不更新或部件缺失的问题。
- 确认动画片段设置
在Animations目录中找到待机动画(如Ice_Idle),勾选Loop Time以启用循环播放,这样角色在场景中会保持稳定的待机动作,而不会只播放一次后停在中间帧。
创建 Animator Controller
- 在
Assets/Resources/Anim(目录可根据项目规范调整,这里放在Resources下便于后续加载)中新建一个Animator Controller,例如命名为Hero_Ice_Body.controller。 - 双击打开该控制器,在
Animator面板中将Ice_Idle拖入Base Layer,并设置为默认状态。角色身上挂载该控制器后,进入场景会自动播放待机动画。
准备 Resources 预制体
- 在场景中拖入角色模型,将组件中的
Animator.Controller指向刚刚创建的Hero_Ice_Body.controller。 - 调整角色的缩放、朝向和初始位置,运行场景确认待机动画能够稳定循环播放。
- 将调整好的角色拖拽到
Assets/Resources/Prefabs(或项目约定的Prefabs目录)中,生成一个预制体,例如命名为TestObj,后续批量实例化将统一使用该预制体。
编写脚本批量实例化
下面通过一个简单的脚本,在场景中按网格方式实例化大量角色,形成典型的「海量同类角色 + 同步动画」压测场景。
using UnityEngine;
public class CreateObject : MonoBehaviour
{
// 角色预制体
public GameObject obj;
// X、Z 方向的实例数量
public int x = 100;
public int y = 100;
void Start()
{
// 统一父节点,便于在层级视图中管理
GameObject father = new GameObject("ObjectFather");
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
GameObject co = Instantiate(obj, father.transform);
co.transform.position = new Vector3(i, 0, j);
}
}
}
}
- 将该脚本挂在场景中的一个空物体上,在
Inspector中将obj指向上一步生成的TestObj预制体。 - 运行场景后,可以看到大量角色按网格分布在地面上,并同时播放待机动画,便于后续进行渲染统计和性能对比。

观察性能指标
- 在
Game视图中打开Stats面板,可以观察当前的Batches、SetPass Calls、Triangles等统计信息,此时数值会明显偏高,FPS也会有较大幅度下降。 - 打开
Profiler,切换到GPU或Rendering模块,可以看到渲染线程以及动画相关的开销处于高负载状态。 - 在保持相同角色数量和场景结构的前提下,后续章节将引入
GPU Instancing、VAT等手段,对比并逐步压缩 DrawCall 和渲染开销。本节构建的场景,即为这些优化实验的初始基线。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com