ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Godot 3D物理关节3步实战:做出自动开门、摆动链条与机械臂

Godot 3D物理关节3步实战:做出自动开门、摆动链条与机械臂 Godot 3D物理关节3步实战做出自动开门、摆动链条与机械臂【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot本文是Godot 3D物理关节的实战指南依次做出门、链条、抽屉3个场景最后组合成3轴机械臂。每步只给最小代码、3个关键参数和1个常见坑新手可照做。第一关做一扇会自己开的门铰链关节 先说清原理关节Joint3D是一个连接两个刚体RigidBody3D即受力后会动起来的物理物体的约束件它的职责就是规定这两个物体之间允许怎样的相对运动。铰链关节HingeJoint3D是其中最常用的类型它只放行一个自由度——绕指定轴旋转其余方向全部锁死正好就是一扇门的门轴。所以做法很简单门框挂 StaticBody3D静态、不受力影响的物体门板挂 RigidBody3D再往场景里加一个 HingeJoint3D 把它们连起来。var hinge : HingeJoint3D.new() hinge.node_a $DoorFrame # 固定端门框 hinge.node_b $Door # 可动端门板 hinge.axis Vector3(0, 1, 0) # 旋转轴Y轴即竖直门 hinge.set_flag(HingeJoint3D.FLAG_ENABLE_MOTOR, true) hinge.set_param(HingeJoint3D.PARAM_MOTOR_TARGET_VELOCITY, 0.8) hinge.set_param(HingeJoint3D.PARAM_LIMIT_UPPER, deg_to_rad(100)) add_child(hinge)axis旋转轴在关节局部坐标中的方向竖直门的门轴写Vector3(0, 1, 0)方向反了门就朝外开。PARAM_LIMIT_UPPER / LOWER开合角度上下限单位是弧度务必用deg_to_rad()换算。PARAM_MOTOR_TARGET_VELOCITY开启电机旗标后关节会以这个角速度主动转动这就是门自己开的动力来源。常见坑限位角度直接写数字而不换算弧度-90会被当成 -90 弧度约 -5156 度门从出生起就焊死在关闭位怎么调都不动。第二关挂出一条会摆的链条销钉关节 销钉关节PinJoint3D只把两个物体钉在同一个点上这个点叫 pivot白话就是钉眼物体可以绕这个点向任意方向转相当于手腕或球窝。链条是它的最佳练习对象每节链环做成一个 RigidBody3D用销钉关节首尾串起来整条链就能自然摆动。# 在 _process 的构建循环里把相邻链环逐一钉住 var pin : PinJoint3D.new() pin.node_a prev_link # 上一节链环 pin.node_b link # 当前链环 pin.pivot_a Vector3(0, -0.5, 0) # 上钉眼 pin.pivot_b Vector3(0, 0.5, 0) # 下钉眼 pin.set_param(PinJoint3D.PARAM_BIAS, 0.5) # 位置回拉力度 add_child(pin)pivot_a / pivot_b钉眼在各物体局部坐标里的位置两节链环的钉眼必须恰好落在连接处。PARAM_BIAS位置回拉力链条被甩开时负责往回拉0.50.7 比较稳。PARAM_DAMPING摆动阻尼数值越大链条摆得越慢越驯服。常见坑链环实际长度是 1 米两个 pivot 却只隔了 0.8 米钉点比环还短物理引擎会立刻把链条炸成一团麻花——先对齐钉眼再谈参数。第三关做一个能拉出的抽屉滑动关节 ️滑动关节SliderJoint3D可以看成铰链的镜像它只放行沿一条轴的平移其余五个方向的运动和旋转全部锁住功能上等同抽屉的滑轨。把柜体StaticBody3D和抽屉盒RigidBody3D之间加一个 SliderJoint3D抽屉就能拉出推回而且永远不会飞走。var slide : SliderJoint3D.new() slide.node_a $CabinetFrame # 固定端柜体 slide.node_b $DrawerBody # 可动端抽屉盒 slide.axis Vector3(1, 0, 0) # 沿X轴水平滑动 slide.set_param(SliderJoint3D.PARAM_LINEAR_LIMIT_UPPER, 0.8) slide.set_param(SliderJoint3D.PARAM_LINEAR_MOTION_DAMPING, 1.0) add_child(slide)axis滑动方向横向抽屉通常取 X 轴。PARAM_LINEAR_LIMIT_UPPER最大拉出距离相当于行程上限防止抽屉脱柜。PARAM_LINEAR_MOTION_DAMPING滑动阻尼调大后松手回弹更沉、更像实木抽屉。常见坑抽屉盒的碰撞形状比柜口还宽拉到行程末端时边角顶住柜沿发出咔咔声——给碰撞形状留出 12cm 余量。进阶组合3轴机械臂的关节层级 三种关节拼起来就是机械臂每个铰链贡献一个旋转自由度末端用滑动关节做夹爪行程。层级关系如下机械臂底座 (StaticBody3D) └─ 腰部 HingeJoint3DY轴 └─ 大臂 (RigidBody3D) └─ 肩部 HingeJoint3DX轴 └─ 小臂 (RigidBody3D) └─ 肘部 HingeJoint3DX轴 └─ 爪座 (RigidBody3D) └─ 夹爪 SliderJoint3DZ轴在脚本里给各级铰链开启电机并按比例设置PARAM_MOTOR_TARGET_VELOCITY再按目标点方向分配各轴角速度就是一个无需 IK 也能演示效果的准机械臂。排错与调优速查 问题现象可能原因调法关节发软、连接点慢慢漂移位置回拉太弱把对应关节的 BIAS 提到 0.50.8关节处剧烈抖动、能量爆炸求解器迭代不足或约束互相打架项目设置里把物理求解迭代次数加到 16运动飘忽、收不住没设阻尼给对应运动组补上 DAMPING 值关联物体从钉点穿出碰撞形状中心与 pivot 没对齐平移形状使中心落在钉点上门/抽屉焊死不动限位角度忘了转弧度所有角度统一deg_to_rad()资源与练习三种关节的完整参数都在scene/3d/physics/joints/目录的源码里逐个对照即可读懂各参数说明以官方文档的 Joint3D、HingeJoint3D、SliderJoint3D、PinJoint3D 类页面为准。练习题做一个可开合的抽屉柜——用滑动关节实现抽屉拉出 70% 后自动推回柜门再用一组铰链关节做成可开合结构完成后分别把 BIAS 设为 0.3 和 0.7 各跑一次记录哪种手感更像真家具。【免费下载链接】godotGodot Engine – Multi-platform 2D and 3D game engine项目地址: https://gitcode.com/GitHub_Trending/go/godot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表