Unity常见的比较重要的Api

《Unity 开发必知必会:这些核心 API 你掌握了吗?》

前言

经常在开发过程中对一些 Api 掌握不够深入,有些是眼熟,有些是不认识,这感觉太难受了,痛定思痛,还是记录下来比较稳妥

Animator 动画系统

API 说明 代码示例 应用场景
GetCurrentAnimatorStateInfo(0) 获取当前动画状态信息 AnimatorStateInfo info = anim.GetCurrentAnimatorStateInfo(0); 判断当前动画是否播放完毕、获取动画长度
GetNextAnimatorStateInfo(0) 获取即将播放的动画 AnimatorStateInfo next = anim.GetNextAnimatorStateInfo(0); 预判动画过渡,提前准备逻辑
IsInTransition(layerIndex) 判断动画层是否正在过渡 if (anim.IsInTransition(0)) { } 防止过渡期间重复触发行为
SetTrigger(string) 设置触发器参数 anim.SetTrigger("Attack"); 触发一次性动作(攻击、跳跃)
ResetTrigger(string) 重置触发器 anim.ResetTrigger("Attack"); 手动清除触发器,防止重复触发
Play(string, int, float) 直接播放指定动画 anim.Play("Idle", 0, 0f); 强制切换动画(忽略过渡)
CrossFade(string, float) 淡入淡出切换动画 anim.CrossFade("Run", 0.2f); 平滑过渡到目标动画
GetFloat(string) /
SetFloat()
获取/设置浮点参数 float speed = anim.GetFloat("Speed"); 控制 Blend Tree 混合权重
GetCurrentAnimatorClipInfo(0) 获取当前播放的动画片段信息 AnimatorClipInfo[] clips = anim.GetCurrentAnimatorClipInfo(0); 获取正在播放的动画片段名称和权重
Update(float deltaTime) 手动更新动画器 anim.Update(Time.deltaTime); 非 MonoBehaviour 中使用 Animator

物理与碰撞检测

API 说明 代码示例 应用场景
RaycastNonAlloc 无分配射线检测 int hits = Physics.RaycastNonAlloc(ray, hitArray, 100f); 大量射线检测,避免 GC 分配
SphereCastNonAlloc 无分配球形投射 int hits = Physics.SphereCastNonAlloc(origin, radius, dir, hitArray); 性能敏感的物理检测
RaycastCommand 批量射线检测 RaycastCommand command = new RaycastCommand(origin, dir); 多线程批量射线检测
Simulate(float) 手动模拟物理 Physics.Simulate(Time.fixedDeltaTime); 无物理更新时手动模拟
IgnoreCollision<br>(Collider, Collider) 忽略两个碰撞器 Physics.IgnoreCollision(col1, col2, true); 临时穿透(友军、弹药)
GetContacts<br>(List<ContactPoint>) 获取所有接触点 collision.GetContacts(contactList); 获取碰撞点的详细信息
ClosestPoint(Vector3) 获取碰撞器上最近点 Vector3 point = collider.ClosestPoint(targetPos); 计算距离最近点
ComputePenetration 计算穿透修正 Collider.computePenetration(colA, posA, rotA, colB, posB, rotB, out dir, out dist); 手动修正穿透物体

内存管理与资源加载

API 说明 代码示例 应用场景
Resources.UnloadUnusedAssets() 卸载未使用的资源 Resources.UnloadUnusedAssets(); 场景切换后清理内存
Addressables.LoadAssetAsync<T> Addressables 异步加载 AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>("key"); 现代资源管理
Addressables.Release 释放 Addressables 资源 Addressables.Release(handle); 释放加载的资源
ScriptableObject.CreateInstance 创建 ScriptableObject 实例 MySO so = ScriptableObject.CreateInstance<MySO>(); 运行时动态创建配置数据
Object.DontDestroyOnLoad 切换场景不销毁 DontDestroyOnLoad(gameObject); 跨场景单例管理器

性能优化

API 说明 代码示例 应用场景
Profiler.BeginSample 性能采样开始 Profiler.BeginSample("HeavyOperation"); 性能分析标记
Profiler.EndSample 性能采样结束 Profiler.EndSample(); 配合 BeginSample 使用
GPUInstancing GPU 实例化 Material.enableInstancing = true; 大量相同材质物体的渲染优化
Graphics.DrawMeshInstanced 实例化绘制网格 Graphics.DrawMeshInstanced(mesh, 0, mat, matrices, count); 大量物体高性能绘制
ComputeShader.Dispatch 执行 Compute Shader cs.Dispatch(kernel, groupsX, groupsY, groupsZ); GPU 并行计算(粒子、地形)
CommandBuffer 命令缓冲区 Graphics.ExecuteCommandBuffer(cmd); 自定义渲染流程
JobHandle.Complete 等待 Job 完成 jobHandle.Complete(); 多线程任务同步
IJobParallelFor 并行 For 循环 new MyJob().Schedule(data.Length, 64).Complete(); 批量数据处理

渲染与摄像机

API 说明 代码示例 应用场景
Camera.ViewportToWorldPoint 视口坐标转世界坐标 Vector3 world = cam.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 10f)); 屏幕中心射线检测
Camera.WorldToViewportPoint 世界坐标转视口坐标 Vector3 viewport = cam.WorldToViewportPoint(objPos); 判断物体是否在视野内
Camera.RenderToCubemap 渲染到 Cubemap cam.RenderToCubemap(cubemap); 实时反射、天空盒
RenderTexture 渲染纹理 RenderTexture rt = new RenderTexture(1024, 1024, 24); 相机画面渲染到纹理(小地图、监控)
CommandBuffer.DrawMesh 命令缓冲区绘制 cmd.DrawMesh(mesh, matrix, material); 自定义渲染队列
Shader.PropertyToID 获取 Shader 属性 ID int colorID = Shader.PropertyToID("_Color"); 性能优化,避免字符串查找
Material.SetBuffer 设置 ComputeBuffer mat.SetBuffer("_MyBuffer", buffer); GPU 数据传递

输入与交互

API 说明 代码示例 应用场景
InputSystem (新) 新版输入系统 playerInput.actions["Move"].ReadValue<Vector2>(); 跨平台统一输入
EnhancedTouch 增强触控 API Touch.activeTouches[i].position; 多点触控手势
UI.TMP_Text TextMeshPro 文本 tmpText.text = $"Score: {score}"; 高性能富文本渲染
CanvasRenderer.SetColor 设置 UI 颜色 canvasRenderer.SetColor(color); UI 颜色快速设置
LayoutRebuilder.ForceRebuildLayoutImmediate 强制重建布局 LayoutRebuilder.ForceRebuildLayoutImmediate(rect); 动态添加 UI 元素后立即刷新

音频系统

API 说明 代码示例 应用场景
AudioSource.GetSpectrumData 获取频谱数据 source.GetSpectrumData(spectrum, 0, FFTWindow.Blackman); 音乐可视化
AudioSource.GetOutputData 获取输出波形数据 source.GetOutputData(samples, 0); 音频分析
AudioSettings.GetDSPTime 获取 DSP 时间 double time = AudioSettings.dspTime; 精确音频同步
AudioMixer.SetFloat 设置混音器参数 mixer.SetFloat("Volume", value); 音量控制
Microphone.Start 麦克风录制 Microphone.Start(device, true, 10, 44100); 语音输入、录音功能

总结

这些 API 覆盖了 Unity 开发中较为高级和实用的功能,适合有一定基础的读者深入学习。

持续更新中………


Unity常见的比较重要的Api
https://zeng-ss.github.io/zeng.github.io/2026/03/30/Unity常见比较重要的Api/
作者
Zeng
发布于
2026年3月30日
更新于
2026年3月31日
许可协议