
開場Profiler 里一個(gè)詭異的場景:場景很簡單,F(xiàn)PS 卻上不去,CPU 耗時(shí)大頭落在一堆Camera.get_xxx上。你翻遍 Shader 和業(yè)務(wù)腳本都找不到元兇,直到意識到一件事——Camera的這些屬性根本不是普通的 C# 字段,每一次cam.backgroundColor的讀寫,都是一次跨過托管/原生邊界的調(diào)用。每幀訪問幾十次,開銷就是這么悄悄堆起來的。這就是 Unity 源碼里最容易被忽視的一層:托管層綁定(C# Bindings)。它不是業(yè)務(wù)代碼,而是引擎 C++ 核心與 C# 之間的"翻譯官"。本篇以Camera.bindings.cs為樣本,逐層拆解 Unity 如何把一個(gè)原生組件暴露給腳本層,以及這層橋上的成本與坑。前置知識:本文涉及的綁定機(jī)制與BindingsGenerator(綁定代碼生成器)一脈相承,可先讀本系列中《Unity BindingsGenerator 工作流程》一文,了解 icall 的注冊與 IL2CPP 差異。一、Camera.bindings.cs 是什么1.1 文件定位:生成物,不是手寫代碼在 Unity 官方公開的托管層源碼(UnityCsReference)中,Camera.bindings.cs位于Runtime/Export/Camera/目錄下。它是