
开场Profiler 里一个诡异的场景:场景很简单,FPS 却上不去,CPU 耗时大头落在一堆Camera.get_xxx上。你翻遍 Shader 和业务脚本都找不到元凶,直到意识到一件事——Camera的这些属性根本不是普通的 C# 字段,每一次cam.backgroundColor的读写,都是一次跨过托管/原生边界的调用。每帧访问几十次,开销就是这么悄悄堆起来的。这就是 Unity 源码里最容易被忽视的一层:托管层绑定(C# Bindings)。它不是业务代码,而是引擎 C++ 核心与 C# 之间的"翻译官"。本篇以Camera.bindings.cs为样本,逐层拆解 Unity 如何把一个原生组件暴露给脚本层,以及这层桥上的成本与坑。前置知识:本文涉及的绑定机制与BindingsGenerator(绑定代码生成器)一脉相承,可先读本系列中《Unity BindingsGenerator 工作流程》一文,了解 icall 的注册与 IL2CPP 差异。一、Camera.bindings.cs 是什么1.1 文件定位:生成物,不是手写代码在 Unity 官方公开的托管层源码(UnityCsReference)中,Camera.bindings.cs位于Runtime/Export/Camera/目录下。它是