news 2026/7/19 9:09:22

Unity物理系统深度解析:从碰撞检测到角色移动的实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Unity物理系统深度解析:从碰撞检测到角色移动的实战指南

1. 项目概述:为什么Unity物理系统是游戏开发的基石

如果你正在用Unity做游戏,无论是2D平台跳跃还是3D开放世界,物理系统都是你绕不开的核心。它远不止是让一个方块掉下来那么简单。一个响应灵敏、手感扎实的角色移动,一次精准的碰撞反馈,一个符合直觉的物体破碎效果,这些直接决定了玩家对你游戏的第一印象。很多新手开发者,包括几年前的我自己,都曾在这里踩过坑:角色卡墙、移动飘忽、碰撞检测失灵,或者性能莫名其妙地掉帧。这些问题,根源往往在于对Unity物理引擎的理解不够深入,只是停留在“拖个Rigidbody组件”的层面。

这篇指南的目的,就是帮你彻底搞懂Unity的物理系统,从最底层的碰撞检测原理,到最上层的角色移动控制实现,形成一个完整的知识闭环。我们会聚焦于最核心、最实用的部分,避开那些华而不实的理论,直接告诉你“怎么做”以及“为什么这么做”。无论你是想实现《蔚蓝》那样精准的平台跳跃,还是《艾尔登法环》里那种带有重量感的角色移动,这里面的核心逻辑都是相通的。接下来,我们就从物理系统的全局设计开始拆解。

1.1 核心需求解析:物理系统到底在解决什么问题?

在动手写代码之前,我们必须想清楚:我们需要物理系统来做什么?对于大多数游戏而言,物理需求可以归结为三类:

第一,模拟真实感。这是最基础的需求。重力让物体下落,摩擦力让物体减速,弹力让物体反弹。Unity内置的NVIDIA PhysX引擎(或Box2D for 2D)已经为我们封装好了这些牛顿力学定律。我们通过Rigidbody(刚体)组件来赋予游戏对象这些物理属性。但“真实”不等于“好玩”,游戏物理往往是“艺术化”的真实。

第二,实现交互与反馈。这是游戏性的核心。当玩家的剑砍中怪物(碰撞检测),怪物需要播放受击动画并扣血(碰撞响应)。当玩家按下跳跃键,角色需要以一个合适的初速度向上运动(运动控制)。物理系统在这里充当了“裁判”和“执行者”的双重角色,它检测交互事件,并驱动游戏对象的状态变化。

第三,管理性能与稳定性。这是高级需求,但至关重要。物理计算非常消耗CPU资源。一个场景里有100个动态刚体互相碰撞,和只有10个,性能开销是天壤之别。同时,不合理的参数设置(如过大的力、过小的碰撞体)会导致物体穿透、剧烈抖动甚至直接“飞”出场景的诡异现象。因此,理解如何优化物理更新、选择合适的碰撞检测精度,是项目规模扩大后的必修课。

理解了这些需求,我们就能明白,学习Unity物理系统,本质上是在学习如何配置监听干预一个复杂的模拟系统,让它为我们的游戏玩法服务,而不是被它牵着鼻子走。

2. 物理系统核心组件深度解析

Unity的物理系统由几个核心组件构成,它们各司其职,共同协作。很多人用不好物理,就是因为没搞清楚这些组件之间的关系。

2.1 Rigidbody:物理世界的“身份证”与“驱动器”

Rigidbody(刚体)是物理系统的入场券。一个GameObject只有挂载了Rigidbody(或Rigidbody2D),物理引擎才会去计算它的运动。

关键属性与实战意义:

  • Mass(质量):影响物体受力和碰撞后的运动状态。但游戏中的质量单位是“相对”的。通常将主角质量设为1,作为参考基准。一个箱子的质量可能是5,一个气球的质量可能是0.1。质量差异过大会导致轻物体被撞飞时速度过快(像炮弹一样),需要谨慎设置。
  • Drag / Angular Drag(阻力/角阻力):这是在非真空环境下的“空气阻力”。对于角色移动,适当的线性阻力可以让角色在停止输入后自然滑行一段距离停下,而不是瞬间“钉”在原地,这能增加手感。角阻力则影响旋转的停止速度。
  • Use Gravity(使用重力):勾选后受全局重力影响。对于飞行角色、太空游戏或特定状态(如被击飞)的角色,可能需要动态关闭此选项。
  • Is Kinematic(是否为运动学刚体):这是最重要的属性之一。勾选后,该刚体不再受物理引擎的力驱动,但可以通过Transform直接移动它,并且它仍然能与其他非运动学刚体发生碰撞并影响对方。常用于:
    • 移动平台:平台按固定路径移动,并可以承载站在上面的玩家。
    • 玩家控制的角色(在某些架构下):为了获得更精确、响应更快的移动控制,很多动作游戏会选择用代码直接控制Transform来移动角色(即运动学刚体),而碰撞检测则由其他方式处理(如射线投射)。这避免了物理引擎的“惯性”和“延迟”感。

注意:运动学刚体与普通刚体的碰撞是一个单向影响过程。运动学刚体撞飞普通刚体很容易,但普通刚体无法撞动运动学刚体。

2.2 Collider:物理世界的“形状”与“边界”

Collider(碰撞体)定义了物体的物理形状。物理引擎根据碰撞体的形状,而非渲染的网格(Mesh),来进行碰撞计算。这是为了性能,因为碰撞体几何通常比渲染网格简单得多。

碰撞体类型选型指南:

  1. 基本原型碰撞体(Box, Sphere, Capsule):性能最优,应作为首选。胶囊体(Capsule)尤其适合作为人形角色的碰撞体,因为它能很好地处理斜坡和台阶边缘。
  2. Mesh Collider(网格碰撞体):使用3D网格作为碰撞形状,能完美贴合复杂模型(如一块岩石)。但代价巨大:性能开销高,且默认不能与另一个Mesh Collider发生碰撞(除非勾选Convex凸包选项)。仅适用于静态的、形状复杂且不可移动的环境物体。
  3. 凸包碰撞检测逻辑:这是理解复杂碰撞的关键。一个Mesh Collider勾选Convex后,物理引擎会计算该网格的凸包(Convex Hull)——即包裹原网格的最小凸多面体。凸包碰撞的计算效率远高于凹网格碰撞。所以,对于需要移动的复杂形状物体(如一辆坦克),为其添加一个简化的凸包Mesh Collider,远比使用原始网格要高效得多。

Collider的Is Trigger属性:勾选后,该碰撞体变为“触发器”。物理引擎会检测到有其他碰撞体进入、停留或离开它,但不会产生实际的物理阻挡和反弹效果。这用于实现检测区域,如拾取物品的范围、陷阱的触发区域、关卡的检查点等。

2.3 物理材质:定义碰撞表面的“性格”

Physics Material(或Physics Material 2D)可以附加在Collider上,用于定义碰撞表面的摩擦力和弹性(反弹系数)。

  • Dynamic Friction(动摩擦) & Static Friction(静摩擦):分别影响物体滑动时和开始滑动时的阻力。冰面的摩擦力接近0,橡胶地面的摩擦力则很高。
  • Bounciness(弹性):0为无弹性(完全非弹性碰撞),1为完全弹性(能量无损失)。想实现一个弹力球,就把这个值设高。
  • Friction Combine & Bounce Combine(摩擦/弹性组合模式):当两个物体碰撞时,它们的摩擦力和弹性如何计算?是取平均值(Average)、取大(Max)、取小(Min)还是相乘(Multiply)?这个设置在处理多种材质交互时非常有用。

实操心得:对于大多数角色移动,我倾向于在角色脚下的碰撞体上使用一个低摩擦力、零弹性的物理材质。低摩擦力让转向和起跑更灵敏,零弹性避免在斜坡上反复弹跳。而墙面则可以使用高摩擦力、零弹性的材质。

3. 碰撞检测与响应的完整实现

知道了组件,我们来看看它们如何协作。碰撞检测与响应是物理系统的核心工作流。

3.1 碰撞生命周期与对应函数

当两个都带有非触发器Collider和Rigidbody的物体发生碰撞时,会触发一系列事件,对应不同的Monobehaviour函数:

  1. OnCollisionEnter:碰撞发生的第一帧调用。这是播放碰撞音效、产生粒子特效、计算伤害的绝佳位置。
  2. OnCollisionStay:碰撞持续的每一帧调用。可用于实现持续性的效果,比如站在火焰地板上持续扣血。注意性能,避免在这里做复杂计算。
  3. OnCollisionExit:碰撞分离的第一帧调用。可以用来标记状态结束。

对于触发器(Is Trigger),则有另一套函数:

  1. OnTriggerEnter:进入触发器范围。
  2. OnTriggerStay:停留在触发器内。
  3. OnTriggerExit:离开触发器。

关键区别:OnCollisionXXX函数传递的是一个Collision对象,其中包含碰撞点、法线、相对速度等详细信息。OnTriggerXXX函数只传递对方碰撞体的引用(Collider)。如果你需要知道碰撞的细节(比如从哪个方向撞的),必须用OnCollisionXXX

3.2 层碰撞矩阵:管理“谁能碰到谁”

你肯定不希望玩家的子弹能打到队友,或者角色的脚部碰撞体触发拾取物品的逻辑。这时就需要Layer Collision Matrix(层碰撞矩阵)。

Edit -> Project Settings -> Physics中,你可以看到一个矩阵表格。行和列都是所有的层(Layer)。取消勾选某个交叉点,就意味着这两个层的物体不会发生物理碰撞

标准实践:

  • 为玩家、敌人、子弹、可交互物品、环境等创建独立的层。
  • 在矩阵中,取消“玩家层”和“玩家子弹层”的交叉勾选,实现队友伤害免疫。
  • 取消“触发器层”和“触发器层”之间的勾选,避免两个触发器区域相互干扰。
  • 将只用于射线检测的层(如“地面层”、“可攀爬层”)与环境碰撞层分开,在矩阵中将其与其他所有层的碰撞都关闭,仅用于代码查询。

这是管理复杂物理交互最高效、最清晰的方式,务必在项目早期就规划好层的使用。

3.3 射线检测:更精准的查询工具

有时,我们需要的不是等待碰撞发生,而是主动去“询问”物理世界。这就是射线检测(Raycasting)。它就像从一点发射一束激光,看它击中了什么。

核心函数:Physics.Raycast

// 从当前位置,向下发射一条长度为1.5单位的射线 RaycastHit hitInfo; if (Physics.Raycast(transform.position, Vector3.down, out hitInfo, 1.5f)) { // 如果射线击中了某个碰撞体 Debug.Log(“踩在了:” + hitInfo.collider.gameObject.name + “上”); // 可以通过hitInfo.distance获取距离,hitInfo.normal获取法线(用于判断坡度) }

应用场景:

  • 角色接地检测:比用OnCollisionStay更可靠、更高效。在角色脚底向下发射短射线,判断是否接触地面。
  • 武器攻击判定:对于枪械,可以从枪口向准心方向发射射线;对于近战武器,可以在挥砍的帧间进行扇形或多次射线检测。
  • 环境查询:判断前方是否有墙(用于自动贴墙跑)、判断鼠标点击了场景中的哪个物体。

高级技巧:你可以通过LayerMask参数指定射线只检测特定的层,这能极大提升效率和准确性。例如,接地检测只检测“Ground”层,避免检测到敌人或物品。

4. 角色移动控制的三种范式与实现

这是物理系统应用中最具挑战也最有趣的部分。如何让角色按照我们的意愿移动?主要有三种主流范式。

4.1 范式一:基于力的物理驱动移动

这是最“物理”的方式。给角色的Rigidbody施加力(AddForce)或冲量(AddImpulse)来使其运动。

实现方式:

public class PlayerMovementForce : MonoBehaviour { public float moveSpeed = 10f; public float jumpForce = 5f; private Rigidbody rb; private bool isGrounded; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { // 接地检测(通常用射线) // ... // 获取输入 float horizontal = Input.GetAxis(“Horizontal”); float vertical = Input.GetAxis(“Vertical”); // 计算移动方向(相对于摄像机) Vector3 moveDirection = (Camera.main.transform.forward * vertical + Camera.main.transform.right * horizontal).normalized; moveDirection.y = 0; // 确保不向上下施力 // 施加力 rb.AddForce(moveDirection * moveSpeed); // 跳跃 if (isGrounded && Input.GetButtonDown(“Jump”)) { rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse); // 使用冲量,瞬间施加力 } } }

优点:运动效果非常自然,带有惯性、滑动感,适合模拟真实物理的角色(如球类、车辆、布娃娃)。缺点:操控感有延迟,难以实现即停即走、精准的平台跳跃。需要仔细调校质量、阻力等参数来获得“手感”。

4.2 范式二:基于速度的直接控制移动

直接设置Rigidbody的速度(velocity),完全覆盖物理引擎的计算。这是最常用、手感最直接的方式。

实现方式:

public class PlayerMovementVelocity : MonoBehaviour { public float moveSpeed = 8f; public float jumpSpeed = 10f; private Rigidbody rb; private bool isGrounded; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { // 跳跃检测(在Update中处理输入更及时) if (isGrounded && Input.GetButtonDown(“Jump”)) { rb.velocity = new Vector3(rb.velocity.x, jumpSpeed, rb.velocity.z); } } void FixedUpdate() // 物理操作务必放在FixedUpdate中! { // 接地检测... // 获取输入... // 计算目标水平速度 Vector3 targetHorizontalVelocity = moveDirection * moveSpeed; // 保留当前的垂直速度(重力或跳跃速度) Vector3 currentVelocity = rb.velocity; Vector3 newVelocity = new Vector3(targetHorizontalVelocity.x, currentVelocity.y, targetHorizontalVelocity.z); // 直接赋予速度 rb.velocity = newVelocity; } }

优点:响应极其迅速,操控精准,是大多数平台跳跃、动作游戏的首选。可以轻松实现空中横向控制、蹬墙跳等复杂操作。缺点:完全无视了物理惯性,运动可能显得“假”。需要开发者自己处理所有运动逻辑(如斜坡处理、与移动平台同步)。

4.3 范式三:运动学刚体与Transform移动

Rigidbody设为Is Kinematic,然后通过直接修改Transform.position来移动。碰撞检测完全依赖射线或Physics.SphereCast等查询方法。

实现方式(简化):

public class PlayerMovementKinematic : MonoBehaviour { public float moveSpeed = 8f; public float groundCheckDistance = 0.2f; public LayerMask groundLayer; private Rigidbody rb; private CapsuleCollider col; void Start() { rb = GetComponent<Rigidbody>(); rb.isKinematic = true; // 关键! col = GetComponent<CapsuleCollider>(); } void Update() { // 获取输入... Vector3 moveDelta = moveDirection * moveSpeed * Time.deltaTime; // 进行碰撞检测:例如,在移动前,朝移动方向发射一个胶囊体射线 if (!Physics.CapsuleCast(…, moveDelta.normalized, moveDelta.magnitude, groundLayer)) { // 如果没有障碍物,则移动 transform.position += moveDelta; } else { // 如果有障碍物,可以进行滑墙、爬坡等更复杂的处理 } // 接地检测同样使用射线... } }

优点:拥有最高的控制精度和灵活性,可以实现任何自定义的移动规则。是许多硬核动作游戏和竞技游戏(如《雷神之锤》、《守望先锋》早期版本)的底层选择。缺点:实现复杂度最高,你需要自己重新实现一套完整的碰撞检测和响应逻辑,相当于自己写一个简化的物理引擎。对开发者要求高。

如何选择?

  • 追求真实物理模拟(赛车、沙盒):选范式一
  • 追求爽快精准的操作(平台跳跃、ARPG):选范式二。这是目前Unity社区最主流、资源最多的方案。
  • 追求极限控制和自定义(竞技FPS、特殊移动机制):选范式三

5. 高级主题与性能优化实战

当你的游戏对象多起来,物理系统很容易成为性能瓶颈。以下是一些关键的优化策略和高级技巧。

5.1 固定时间步长与物理更新

Edit -> Project Settings -> Time中,有一个关键参数:Fixed Timestep(默认0.02s,即50Hz)。这是FixedUpdate()的调用间隔,也是物理引擎的更新频率。

  • 调高(如0.016667s,即60Hz):物理模拟更平滑,尤其对高速运动的物体(如子弹)碰撞检测更精确,但CPU开销更大。
  • 调低(如0.033333s,即30Hz):节省性能,但可能导致“卡顿”感,高速物体可能穿透薄墙。

Maximum Allowed Timestep用于限制一帧内用于补偿FixedUpdate的最大时间。如果游戏卡顿导致一帧真实时间很长,物理引擎会用多个FixedUpdate来追赶,直到用完这个最大时间。设置它(如0.1s)可以防止极端卡顿帧导致物理模拟“暴走”,耗尽CPU。

5.2 刚体休眠与碰撞器优化

  • 休眠(Sleeping):当一个刚体速度近乎为零且一段时间没有外力作用时,物理引擎会将其置为“休眠”状态,不再计算其物理,直到它被唤醒。这是一个非常重要的自动优化。确保你的静态环境刚体(如地形)一开始就处于休眠状态。
  • 碰撞器优化:
    • 简化形状:永远用简单的碰撞体(Box, Sphere, Capsule)去近似复杂形状。一个人物可以用胶囊体+几个小盒子(用于攻击判定)来组合。
    • 分层管理:如前所述,善用层碰撞矩阵,减少不必要的碰撞计算对。
    • 合并静态碰撞体:对于不会移动的复杂静态环境(如一整面凹凸不平的墙),可以考虑使用一个大的Mesh Collider(不勾选Convex)来代替成百上千个小盒子,但这需要测试性能,因为单个复杂网格碰撞计算量也很大。另一种方法是使用Physics.BakeMesh来预计算碰撞数据。

5.3 实现完全弹性碰撞与自定义物理效果

Unity内置的碰撞响应是符合能量损失的。如果你想实现“完全弹性碰撞”(碰撞后动能无损失),单纯调高Bounciness到1可能因为浮点精度问题无法实现理想效果。

一种更可控的方法是在OnCollisionEnter中手动计算并赋予速度:

void OnCollisionEnter(Collision collision) { // 假设与一个质量无穷大的静态墙面碰撞 ContactPoint contact = collision.contacts[0]; Vector3 incomingVelocity = rb.velocity; // 计算反射向量:V_reflect = V_in - 2 * (V_in · N) * N Vector3 reflectVelocity = Vector3.Reflect(incomingVelocity, contact.normal); // 可以在这里乘以一个系数来控制能量损失,1.0为完全弹性 reflectVelocity *= 1.0f; rb.velocity = reflectVelocity; }

通过这种方式,你可以实现台球、弹珠等需要精确能量传递的效果。

6. 常见问题排查与调试技巧

即使理解了原理,在实际开发中依然会遇到各种诡异问题。下面是一个快速排查清单。

6.1 问题:物体抖动或“抽搐”

  • 可能原因1:两个刚体相互嵌入,每帧物理引擎都试图将它们推开,导致振荡。
    • 解决:检查碰撞体大小,确保它们初始位置没有重叠。增加Physics.defaultContactOffset(一个很小的值,默认0.01)可能有助于提前解算碰撞。
  • 可能原因2:Update中修改Transform.position,同时在FixedUpdate中修改Rigidbody的速度或施加力。两套系统在争夺控制权。
    • 解决:统一在一个地方(通常是FixedUpdate)处理物理移动。如果必须用Transform移动(如过场动画),则将刚体设置为Kinematic

6.2 问题:碰撞检测延迟或穿透

  • 可能原因1:物体速度太快(如子弹),在一帧内就穿过了薄碰撞体。这就是所谓的“子弹穿透”问题。
    • 解决:
      1. 增加物理更新频率(调小Fixed Timestep)。
      2. 使用Rigidbody.interpolation(插值),它会在渲染帧之间平滑物理状态,使运动更流畅,但对解决高速穿透帮助有限。
      3. 最佳实践:使用射线检测。对于子弹,不要用碰撞体,而是在发射的帧间使用RaycastSphereCast(有一定半径的射线),并设置射线的长度为速度 * Time.deltaTime,这样就能检测到路径上的所有碰撞。
  • 可能原因2:碰撞体Is Trigger被错误勾选,导致物体直接穿过。
    • 解决:仔细检查碰撞体设置。

6.3 问题:角色在斜坡上打滑或跳不起来

  • 可能原因:角色碰撞体(如胶囊体)与斜坡的接触法线判断问题,或者角色移动逻辑没有考虑斜坡。
    • 解决:
      1. 在接地检测时,不仅检测是否接触地面,还检测地面法线与垂直方向的夹角(Vector3.Angle(hit.normal, Vector3.up))。如果夹角小于某个值(如45度),才判定为“可站立”的地面。
      2. 当在斜坡上移动时,将移动方向投影到斜坡平面(Vector3.ProjectOnPlane),使角色沿着斜坡表面移动,而不是水平移动导致“铲地”。
      // 假设groundNormal是射线检测到的地面法线 Vector3 moveDirection = (Camera.main.transform.forward * vertical + Camera.main.transform.right * horizontal).normalized; moveDirection = Vector3.ProjectOnPlane(moveDirection, groundNormal).normalized; rb.velocity = new Vector3(moveDirection.x * speed, rb.velocity.y, moveDirection.z * speed);

6.4 调试工具:Physics Debug Visualization

在Game视图右上角,点击Stats面板,可以看到物理相关的信息,如Rigidbody数量。更重要的是,在Scene视图中,你可以通过Gizmos菜单开启Colliders的显示,或者通过代码Debug.DrawRayDebug.DrawLine来可视化你发射的射线,这是调试碰撞和移动问题不可或缺的手段。

我个人在开发中,会为关键的检测射线(如接地检测、前方障碍检测)常驻一个调试绘制,只在编辑器下显示,这样任何异常都能一目了然。物理系统的调试,眼见为实。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 9:07:26

TI CC3220 LaunchPad开发板:从硬件解析到低功耗物联网应用实战

1. 项目概述与核心价值 如果你正在寻找一个能快速上手、功能全面且社区支持强大的Wi-Fi物联网开发板&#xff0c;那么德州仪器&#xff08;TI&#xff09;的CC3220 SimpleLink Wi-Fi LaunchPad开发套件&#xff08;型号CC3220-LAUNCHXL&#xff09;绝对是一个绕不开的经典选择。…

作者头像 李华
网站建设 2026/7/19 9:06:20

盘锦旧房改造选瓷砖,怎样判断质量更靠谱

旧房改造与新房装修不同&#xff0c;盘锦瓷砖选择不仅看颜色、价格和品牌&#xff0c;还要结合原有墙地面条件、采光、供暖环境、空间尺寸以及后期维护。很多旧房存在基层不平、墙面吸水率变化、地面高度受限、卫生间返潮等问题&#xff0c;如果只按展厅单片效果选砖&#xff0…

作者头像 李华
网站建设 2026/7/19 9:05:27

VS2013跨平台开发:Cordova实战与工业应用优化

1. 项目背景与核心价值在2014年前后的移动互联网爆发期&#xff0c;开发团队普遍面临一个棘手问题&#xff1a;如何用有限资源同时覆盖iOS、Android和Windows Phone三大平台&#xff1f;Visual Studio 2013推出的Tools for Apache Cordova&#xff08;以下简称TACO&#xff09;…

作者头像 李华
网站建设 2026/7/19 9:05:24

2026南平黄金回收白银回收铂金回收工商备案可查全城上门回收旧金老店联系方式推荐

2026南平黄金白银铂金回收实测榜单&#xff5c;工商备案可查全城上门回收旧金老店联系方式推荐 南平街头巷尾贵金属回收店铺近年如雨后春笋般涌现&#xff0c;但不少市民反馈遭遇虚高报价、克扣损耗、未经同意熔金压价等糟心事。为帮本地居民避开消费陷阱&#xff0c;小编实地走…

作者头像 李华
网站建设 2026/7/19 9:04:06

MCAN中断管理:从ILS/ILE寄存器到高效实时通信的实战指南

1. 项目概述与核心价值 在嵌入式开发&#xff0c;尤其是汽车电子和工业控制领域&#xff0c;控制器局域网&#xff08;CAN&#xff09;总线是连接各个电子控制单元&#xff08;ECU&#xff09;的神经系统。它负责传递油门、刹车、电池状态、电机转速等关键数据&#xff0c;其通…

作者头像 李华
网站建设 2026/7/19 9:03:22

电容器串联电抗器电压升高计算与选型指南

在电力系统无功补偿领域&#xff0c;电容器组串联电抗器是抑制谐波、限制涌流的常见配置。但工程实践中经常遇到一个关键问题&#xff1a;串联电抗器后&#xff0c;电容器两端的工作电压会升高&#xff0c;如果仍按额定电压选型&#xff0c;会导致电容器过电压运行&#xff0c;…

作者头像 李华