Godot 2D 物理关节 PinJoint2D 完全指南:铰链、摇杆与马达驱动实现
文档教程游戏开发【免费下载链接】godot-docsGodot Engine official documentation项目地址https://gitcode.com/GitHub_Trending/go/godot-docs点击查看免费下载PinJoint2D 是 Godot 2D 物理引擎中最基础的关节节点它把两个 2D 物理体如 RigidBody2D、StaticBody2D钉在一个单点上让它们可以自由旋转是制作钟摆、跷跷板、绳索、连杆机构与 2D 布偶动画的核心工具。本文将基于官方文档类参考结合 Godot 源码文档中的底层物理服务器 API系统讲解 PinJoint2D 的节点搭建、六个核心属性、角度限位与马达的实战配置以及低阶 RID 编程用法。PinJoint2D 是什么PinJoint2D销钉关节是一种 2D 物理关节它将两个物理体在一个点位上连接起来允许二者围绕该点自由旋转。官方类参考原文classes/class_pinjoint2d.rst给出的定义是A physics joint that attaches two 2D physics bodies at a single point, allowing them to freely rotate.例如把一个 RigidBody2D 附加到 StaticBody2D 上就可以轻松做出钟摆pendulum或跷跷板seesaw。关节本身不传递位移约束以外的信息——销钉点两侧的物体只被限制在一点上保持重合而旋转角度不受限制除非你开启角度限位。继承关系与节点类型PinJoint2D 的完整继承链为PinJoint2D Joint2D Node2D CanvasItem Node Object它直接继承自Joint2D所有 2D 物理关节的抽象基类。在 Godot 编辑器中与它同属 Joint2D 子类的还有DampedSpringJoint2D阻尼弹簧和GrooveJoint2D沟槽关节三者共用一个基类约束接口。详细继承关系见 classes/class_joint2d.rst。由于 PinJoint2D 继承自 Node2D它自带 2D 变换位置、旋转、缩放。关节的锚点位置由该节点自身的位置决定因此创建时把 PinJoint2D 节点放在两个物理体连接处的坐标上即可。快速上手搭建一个钟摆最经典的应用是把一个 RigidBody2D 钉到 StaticBody2D 上形成单摆。步骤如下在场景中创建一个StaticBody2D作为固定支点如天花板。在支点下方创建一个RigidBody2D作为摆锤并为其添加CollisionShape2D与合适的碰撞形状如CapsuleShape2D或RectangleShape2D。新建一个PinJoint2D节点将它的位置放在支点与摆锤连接处即摆杆的悬挂点。在 PinJoint2D 的检查器中把Node Anode_a设为 StaticBody2D 的路径Node Bnode_b设为 RigidBody2D 的路径。运行场景摆锤即围绕销钉点往复摆动。使用 GDScript 动态创建同样直观extends Node2D func _ready() - void: # 假设场景中已有两个物理体节点 var pin : PinJoint2D.new() pin.position Vector2(320, 120) # 销钉锚点 pin.node_a pivot_body.get_path() # 支点StaticBody2D pin.node_b pendulum_body.get_path() # 摆锤RigidBody2D add_child(pin)注意node_a/node_b指向的节点必须继承自 PhysicsBody2DRigidBody2D、StaticBody2D、CharacterBody2D、AnimatableBody2D 等皆可。如果两者未设置或类型不符关节不会生效。此约束来自基类 Joint2D 的官方属性说明classes/class_joint2d.rst。基类 Joint2D 的通用属性所有 2D 关节共享四个通用属性PinJoint2D 同样继承它们理解这些属性是正确使用销钉关节的前提属性类型默认值说明node_aNodePathNodePath()被连接的第一个物理体 A必须继承 PhysicsBody2Dnode_bNodePathNodePath()被连接的第二个物理体 B必须继承 PhysicsBody2Dbiasfloat0.0关节回正速度设为 0 时使用项目级默认值disable_collisionbooltrue为 true 时被连接的两个物理体彼此不碰撞bias回正系数是最容易忽略的参数当 node_a 与 node_b 朝不同方向运动时bias 控制关节把它们拉回原始相对位置的快慢。bias 越低两个物体拉扯关节的空间越大关节显得越松弛bias 越高关节约束越刚性。当 bias 为0时将回退到项目设置physics/2d/solver/default_constraint_bias的默认值0.2见 classes/class_projectsettings.rst。disable_collision默认开启意味着被同一关节绑定的两个物理体不会互相碰撞——这通常正是我们想要的例如摆锤不会与支点本身发生碰撞响应。若需要它们碰撞可将其关闭。此外 Joint2D 还提供get_rid()方法返回该关节在PhysicsServer2D内部的 RID 句柄供低阶物理服务器 API 调用详见下文底层原理一节。六大专属属性详解PinJoint2D 自己的六个属性官方类参考 Properties 表classes/class_pinjoint2d.rst如下属性类型默认值含义angular_limit_enabledboolfalse是否启用角度限位angular_limit_lowerfloat0.0最小旋转角弧度angular_limit_upperfloat0.0最大旋转角弧度motor_enabledboolfalse是否启用马达驱动motor_target_velocityfloat0.0马达目标角速度弧度/秒softnessfloat0.0销钉连接的柔性程度角度限位angular_limit_enabled / lower / upper销钉关节默认允许 360° 自由旋转。若希望限制旋转范围如门铰链只允许开合 90°需要将angular_limit_enabled设为true用angular_limit_lower定义最小旋转角angular_limit_upper定义最大旋转角。两个限位值均以弧度为单位。当限位被启用后销钉连接的物体只能在[lower, upper]区间内旋转超出即被约束力阻挡。官方描述明确指出这两个限位值仅在angular_limit_enabled为 true 时生效。GDScript 中对应的 setter/getter 为set_angular_limit_enabled/is_angular_limit_enabled、set_angular_limit_lower/get_angular_limit_lower、set_angular_limit_upper/get_angular_limit_upper。一个实用的摆动门示例——让门在 −60° 到 60° 之间开合var pin : PinJoint2D.new() pin.node_a wall.get_path() # 门框StaticBody2D pin.node_b door_body.get_path() # 门板RigidBody2D pin.angular_limit_enabled true pin.angular_limit_lower deg_to_rad(-60.0) pin.angular_limit_upper deg_to_rad(60.0) add_child(pin)提示deg_to_rad()是 GDScript 内置函数用于把角度换算成弧度限位参数要求弧度值。马达motor_enabled / motor_target_velocitymotor_enabled为true时关节内置的马达会驱动销钉旋转——官方表述是 a motor turns the pin马达转动销钉。旋转的目标速度由motor_target_velocity决定单位是弧度每秒rad/s。典型用途制作持续转动的轮轴、绞盘、传送带转轮。例如让轮子以每秒 2 弧度约 114.6°/s匀速旋转pin.motor_enabled true pin.motor_target_velocity 2.0 # rad/s马达是一个目标速度追踪器它会持续施加力矩试图让连接体达到目标角速度而不是直接设定绝对角度。因此结合角度限位使用可以实现转动到限位处自动停住的效果。柔性softnesssoftness控制销钉连接的柔韧度数值越高销钉与配对物体之间的连接可以弯曲/弹性变形的程度越大。官方原文为The higher this value, the more the bond to the pinned partner can flex.默认值0.0表示刚性连接两点严格重合。在需要模拟绳索、软连接或链条类效果时可以适度提高 softness 获得弹性松弛感但过高的值会让连接明显发飘、产生抖动需要配合调参。底层原理PhysicsServer2D 中的销钉关节PinJoint2D 节点本质上是PhysicsServer2D低阶 API 的封装。理解底层调用链有助于排查问题与做高阶定制。关节的创建与 RID所有 Joint2D 派生节点在内部都会通过PhysicsServer2D创建一个关节 RID。基类的get_rid()方法即返回这个 RID。低阶创建流程见 classes/class_physicsserver2d.rstjoint_create()在物理服务器中创建关节返回 RIDjoint_make_pin(joint, anchor, body_a, body_b RID())把关节设为销钉类型。若body_b为空 RID则body_a被钉在世界坐标anchor点上否则body_a与body_b在anchor全局坐标处互相钉住。PinJointParam 与 PinJointFlag 枚举销钉关节特有的参数与开关在 PhysicsServer2D 中分别以枚举表示PinJointParam参数用于pin_joint_set_param/pin_joint_get_param常量值对应节点属性PIN_JOINT_SOFTNESS0softnessPIN_JOINT_LIMIT_UPPER1angular_limit_upperPIN_JOINT_LIMIT_LOWER2angular_limit_lowerPIN_JOINT_MOTOR_TARGET_VELOCITY3motor_target_velocityPinJointFlag开关用于pin_joint_set_flag/pin_joint_get_flag常量值对应节点属性PIN_JOINT_FLAG_ANGULAR_LIMIT_ENABLED0angular_limit_enabledPIN_JOINT_FLAG_MOTOR_ENABLED1motor_enabled可以看到节点层六个属性与底层枚举一一对应softness、上下限位、马达目标速度是参数限位开关与马达开关是标志位。这些枚举及方法签名均记录在 classes/class_physicsserver2d.rst。运行时动态调整示例借助 RID 可以在运行时直接读写底层参数避免反复切换节点属性var pin: PinJoint2D get_node(PinJoint2D) var rid: RID pin.get_rid() var server : PhysicsServer2D # 读取当前 softness var soft: float server.pin_joint_get_param(rid, server.PIN_JOINT_SOFTNESS) # 运行时开启马达并提速 server.pin_joint_set_flag(rid, server.PIN_JOINT_FLAG_MOTOR_ENABLED, true) server.pin_joint_set_param(rid, server.PIN_JOINT_MOTOR_TARGET_VELOCITY, 3.0)这种写法适合需要高频微调关节行为如物理模拟中的动态机构的场景。实战应用跷跷板与铰链机构跷跷板把一块 RigidBody2D 面板的中央钉在一个 StaticBody2D 支点上即构成跷跷板。与钟摆的唯一区别是销钉锚点位于面板中部而非端点两端会因重量差异上下摆动。开启角度限位可以让跷跷板摆动幅度受限如 ±20°避免翻转。连杆 / 四杆机构串联多个 PinJoint2D 即可组成连杆机构每个销钉连接一对物理体整体形成链条状结构。制作时注意每个 PinJoint2D 的锚点必须精确落在相邻两体的连接处disable_collision保持默认 true避免相邻环节互相穿透产生抖动若需要整体结构松弛可适当调大 softness。2D 布偶ragdoll在 2D 骨骼物理中PinJoint2D 是连接各物理骨骼的默认关节选择。classes/class_physicalbone2d.rst 明确指出PhysicalBone2D 节点不会自动创建 Joint2D 节点来连接骨骼必须手动创建。大多数情况下应使用 PinJoint2D 节点一旦 Joint2D 被添加为其子节点PhysicalBone2D 会自动配置该关节。即把PinJoint2D添加为PhysicalBone2D的子节点前者会自动填入 node_a/node_b 并完成连接然后可通过PhysicalBone2D.get_joint()获取该关节进行后续调节classes/class_physicalbone2d.rst。作为对照3D 场景的 ragdoll 教程中也提到 PinJoint 是保持两体连接的默认关节但容易导致骨骼皱缩crumpling通常建议角色改用 HingeJoint 或 ConeJoint——2D 中则没有这种取舍压力PinJoint2D 即为标准选择。详见 tutorials/physics/ragdoll_system.rst。调参与常见问题1. 关节没有生效 / 物体直接掉落检查 node_a、node_b 是否指向正确的 PhysicsBody2D 派生节点检查 PinJoint2D 的锚点位置是否与被连接体的连接点重合——节点位置即销钉点确认连接的两个物理体至少有一个是动态体如 RigidBody2D两个 StaticBody2D 之间没有可模拟的关节运动。2. 摆动物体剧烈抖动降低bias0 时使用项目默认physics/2d/solver/default_constraint_bias 0.2检查softness是否设得过大确认两个物理体的碰撞形状没有互相穿插且disable_collision为 true检查物理帧步长与刚体质量比是否悬殊。3. 限位不生效确认angular_limit_enabled true确认 lower upper且数值以弧度为单位可先用deg_to_rad()换算验证记住限位描述的是销钉两侧的相对旋转。4. 马达不转确认motor_enabled true且motor_target_velocity非 0若同时启用了限位注意旋转到限位边界时马达力矩会被限位约束抵消。结语PinJoint2D 虽小却是 Godot 2D 物理游戏机构设计的基石从钟摆、跷跷板到连杆机构与 2D 布偶几乎一切绕点旋转的机械结构都建立在它之上。掌握其六个核心属性角度限位、马达、柔性与基类 Joint2D 的 bias/disable_collision 语义再结合 PhysicsServer2D 的低阶 RID API即可在运行时对关节做精细控制。官方类参考是最终权威建议直接阅读 classes/class_pinjoint2d.rst、classes/class_joint2d.rst 与 classes/class_physicsserver2d.rst 获取完整方法签名与枚举定义更系统的 2D 物理入门可参考 tutorials/physics/physics_introduction.rst。赞分享文档教程游戏开发【免费下载链接】godot-docsGodot Engine official documentation项目地址https://gitcode.com/GitHub_Trending/go/godot-docs点击查看免费下载相关推荐3步解锁Cocos物理关节从铰链到马达的动态交互3步解锁Cocos物理关节从铰链到马达的动态交互 你还在为游戏角色关节卡顿、物体连接不自然而烦恼吗本文将通过Cocos引擎物理关节系统的三大核心组件——铰链游戏开发图形学3D渲染Godot 3D 铰链关节 HingeJoint3D 完全指南旋转约束、角度限制与电机驱动原理Godot 3D 铰链关节 HingeJoint3D 完全指南旋转约束、角度限制与电机驱动原理 本篇指南基于 Godot 官方文档仓库中的 HingeJoin文档教程游戏开发如何掌握Cocos引擎物理关节驱动从基础到高级力控制实现指南如何掌握Cocos引擎物理关节驱动从基础到高级力控制实现指南 Cocos引擎作为一款免费开源的跨平台游戏引擎提供了强大的物理系统支持其中物理关节是实现复杂游戏开发图形学3D渲染上一篇Gravitee API 网关 Docker Compose 一键部署指南APIM 门户、AM 认证与 Prometheus 监控实战下一篇pacsomatic Agent 技能基于 BAM 输入可复现运行 nf-core/pacsomatic 的完整操作手册创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

RVM `fix-permissions` 命令完全指南:修复被 sudo / chef 破坏的 RVM 目录权限

RVM `fix-permissions` 命令完全指南:修复被 sudo / chef 破坏的 RVM 目录权限

开发工具CLI 【免费下载链接】rvm Ruby enVironment Manager (RVM) 项目地址: https://gitcode.com/gh_mirrors/rv/rvm 点击查看 免费下载 导读 rvm fix-permissions 是 RVM(Ruby enVironment Manager)提供的一个排障命令,用于在…

2026/10/13 6:45:50 阅读更多 →
CC Workflow Studio 实现计划模板 plan-template.md 深度解析:Spec 驱动开发中的技术决策与结构设计

CC Workflow Studio 实现计划模板 plan-template.md 深度解析:Spec 驱动开发中的技术决策与结构设计

AI 应用Agent 工作流开发工具MCP 服务 【免费下载链接】cc-wf-studio CC Workflow Studio 项目地址: https://gitcode.com/gh_mirrors/cc/cc-wf-studio 点击查看 免费下载 plan-template.md 是 CC Workflow Studio 仓库内 Spec 驱动开发(Spec-Driven De…

2026/10/13 6:45:50 阅读更多 →
5G+智慧文旅落地实操:专网切片、边缘GPU与客流融合避坑指南

5G+智慧文旅落地实操:专网切片、边缘GPU与客流融合避坑指南

简介:本资源是一份聚焦5G技术与文旅产业深度融合的行业应用型课件,面向通信、文旅、政企解决方案等领域的从业者、高校师生及数字化转型研究者,旨在系统解析5G如何破解出行难、停车难、入园难、赏景难、如厕难等文旅服务痛点,并支…

2026/10/13 6:45:50 阅读更多 →

最新新闻

Java Pattern.compile 原理与性能优化:从编译到复用 Matcher 的实践

Java Pattern.compile 原理与性能优化:从编译到复用 Matcher 的实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 9:00:51 阅读更多 →
轻智能全彩海螺摄像机选型与调试:从型号编码看懂夜间监控实战

轻智能全彩海螺摄像机选型与调试:从型号编码看懂夜间监控实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 9:00:51 阅读更多 →
把接口测试交给AI:Cursor与Kiro接入Apifox MCP的完整实践

把接口测试交给AI:Cursor与Kiro接入Apifox MCP的完整实践

先说一个我最近改动比较大的工作流调整:把接口测试从“开着 Apifox 手动点 切到 AI 编辑器写断言”改成了“直接在 Cursor 或 Kiro 里让 AI 通过 Apifox 的 MCP Server 跑接口测试和管理用例”。这个改动听起来不大,但实际用下来完全是两种体验。原来我…

2026/10/13 9:00:51 阅读更多 →
信号时域分析:从采样触发到瞬态特征的工程实践指南

信号时域分析:从采样触发到瞬态特征的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 9:00:51 阅读更多 →
2026年机器人行业最缺的4类嵌入式工程师:不是ROS2,是硬功夫

2026年机器人行业最缺的4类嵌入式工程师:不是ROS2,是硬功夫

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 9:00:51 阅读更多 →
跨境电商独立站运营实战:从选品到流量获取

跨境电商独立站运营实战:从选品到流量获取

1. 项目背景与市场机会跨境电商独立站近年来成为许多创业者的首选赛道,相比平台电商模式,独立站具有更高的利润空间和品牌溢价能力。根据行业数据显示,成功运营的独立站平均毛利率可达50-70%,远高于亚马逊等第三方平台的15-25%。这…

2026/10/13 8:59:49 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →