au场景搭建
Unity里搭一个AU场景,场景最耗时的搭建不是写代码,是场景反复调那堆Transform。上周帮朋友改一个VR会议室的搭建场景,光是场景把虚拟白板的锚点对齐到墙面,就折腾了四十分钟——每次移动父物体,搭建子物体的场景局部坐标就跟着漂,最后干脆把白板拖出来单独设世界坐标,搭建再重新挂回去。场景
AU场景搭建的搭建本质,是场景把抽象的空间关系翻译成层级结构。现实里你摆一张桌子,搭建不需要考虑这张桌子相对地球的场景坐标,但引擎里每个物体都必须挂在某个父节点下。搭建这个约束听起来简单,场景实际做起来到处都是坑。我见过有人把整个房间的模型全部平铺在根节点下,结果想整体旋转房间朝向时,三百多个物体得挨个改。也见过把灯光塞进家具层级里的,移动沙发时灯光跟着跑,阴影方向全乱。
合理的做法是按功能分区建空物体当容器。比如一个典型的虚拟展厅,根节点下挂Environment(地面、墙体、天花板)、Lighting(主光、补光、环境光探针)、Interactive(展品、按钮、触发区域)、UI(Canvas、文字面板)。每个容器只管自己的事,互不干扰。移动展品时不会碰到灯光,调UI时不会误触场景几何体。
坐标归零是个好习惯。新建空物体后先把它挪到世界原点,再往里放子物体。这样后续调整位置时,Inspector里看到的数值就是直观的偏移量,不用心算。Rotation和Scale同理,父节点保持单位旋转和等比缩放,子节点的数值才有参考意义。非等比缩放的父节点会引发一堆渲染和物理问题,这个坑踩过一次就记住了。
Prefab在AU场景里几乎是必须的。同一款椅子摆二十把,如果每把都是独立物体,改一次材质得改二十遍。做成Prefab后,改一次源文件,场景里所有实例同步更新。但Prefab也有反直觉的地方:在场景里选中一个实例改属性,改的是覆盖值,不会影响源文件;要改源文件必须进入Prefab Mode或者选中源资产。这个逻辑我花了挺久才形成肌肉记忆。
光照是另一个分水岭。实时渲染下,一个方向光加几个点光源就能跑,但效果很平。烘焙光照贴图后质感提升明显,代价是每次改场景布局都要重新烘焙。小场景还好,大场景烘焙一次半小时起步。混合模式是个折中方案——静态物体用烘焙,动态物体用实时,但配置起来更复杂。我的经验是,如果场景里动态物体不超过三成,直接全烘焙省心。
碰撞体别偷懒用Mesh Collider。一个复杂模型挂Mesh Collider,物理开销直接起飞。用Box Collider或者Capsule Collider拼出近似形状,性能好很多,玩家也感觉不出来。触发区域用Trigger Collider,记得勾上Is Trigger,不然物体会被弹开。
最后说个容易忽略的:场景命名和文件夹结构。Assets下建Scenes文件夹,场景文件按版本号或日期命名,比如Showroom_v3_20240512。别用New Scene 1这种名字,过两周自己都分不清哪个是最终版。场景里的空物体也起个有意义的名字,Group1、Empty这种,后期维护时想死的心都有。
搭场景这事,工具就那些,差距在细节处理上。同样一个房间,有人搭出来跑60帧,有人搭出来跑20帧还穿模。多花十分钟整理层级和命名,后面省的是几小时的调试时间。
(责任编辑:知识)














