Unity --hinge joint

关节介绍

关节一共分为5大类:链条关节,固定关节,弹簧关节,角色关节和可配置关节。

  1. 链条关节(hinge joint):将两个物体以链条的形式绑在一起,当力量大于链条的固定力矩时,两个物体就会产生相互的拉力。
  2. 固定关节(fixed joint):将两个物体永远以相对的位置固定在一起,即使发生物理改变,它们之间的相对位置也将不变。
  3. 弹簧关节(spring joint):将两个物体以弹簧的形式绑定在一起,挤压它们会得到向外的力,拉伸它们将得到向里的力。
  4. 角色关节(character joint):可以模拟角色的骨骼关节。
  5. 可配置关节(configurable joint):可以模拟任意关节的效果。
Hinge Joint

Connected Body :连接的对象,如果没有设置,则连接到世界

Anchor :自身摆动的轴的位置。该位置在本地坐标系中定义

Axis:绕着某个轴旋转。

Auto Configure Connected Anchor

如果启用此选项,则将自动计算 Connected Anchor 位置以匹配 anchor 属性的全局位置。这是默认的,如果禁用此选项,则可以手动配置连接锚点的位置。

Connected Anchor:手动配置连接对象的锚位置

Use Spring:与连接体相比,弹簧使刚体达到特定角度

Spring:使对象移动到该位置的力

Damper:阻力,该值越高,对象减速越快

Target Position:弹簧的目标角度。弹簧朝向以度为单位测量的角度拉动

Use Motor:使用电机使物体旋转

Target Velocity:对象试图达到的目标速度

Force:为了达到速度而施加的力

Free Spin:勾选后,电机永远不会用于制动旋转,只能加速。

Use Limits:勾选后,铰链的角度将限制在最小值和最大值之内

Min:旋转的最小角度。

Max:旋转可以达到的最大角度。

Bounciness:当物体达到最小或最大停止限制时,物体会反弹多少

Contact Distance:在距离极限触点的接触距离内将持续存在以避免抖动

Break Force:破坏此关节需要的力。 [默认是无限]

Break Torque:破坏此关节需要的扭矩。 [默认是无限的]

Enable Collision:选中时,这将启用与关节连接的物体的碰撞

Enable Preprocessing:禁用预处理有助于稳定不可能完成的配置。

Mass Scale:质量缩放

Connected Mass Scale:连接体的质量缩放

简单脚本
csharp 复制代码
    [RequireComponent(typeof(HingeJoint))]
	public class CreateHingesJoins : MonoBehaviour
	{
        private HingeJoint _joint;

        private void OnEnable()
        {
            _joint = GetComponent<HingeJoint>();
            InitConfig();
        }
        private void InitConfig() {
            
            _joint.autoConfigureConnectedAnchor = false;
            _joint.axis = new Vector3(0, 1, 0);
            _joint.anchor = Vector3.zero;
            // 启用并使用弹簧  
            _joint.useSpring = true;
            _joint.spring = new JointSpring
            {
                spring = 0.3f, // 弹簧力度  
                damper = 0.5f,  // 阻尼,控制弹簧返回的速度  
                targetPosition = 0f // 弹簧试图达到的位置  
            };
            _joint.useLimits = true;
            _joint.limits = new JointLimits
            {
                min = -10f, // 最小角度限制  
                max = 10f, // 最大角度限制 
            };
        }

        public void SetNextJoints(GameObject obj) {
            _joint.connectedBody = null;
            if (obj !=  null) {
                _joint.connectedBody = obj.GetComponent<Rigidbody>();
            }
        }
    }
相关推荐
蓝裕安2 小时前
伪工厂模式制造敌人
开发语言·unity·游戏引擎
谢泽浩6 小时前
Unity 给模型贴上照片
unity·游戏引擎
z2014z6 小时前
Unity Resource System 优化笔记
unity·游戏引擎
王维志6 小时前
Unity 高亮插件HighlightPlus介绍
unity·游戏引擎
zaizai10077 小时前
我的demo保卫萝卜中的技术要点
unity
菌菌巧乐兹8 小时前
Unity 百度AI实现无绿幕拍照抠像功能(详解版)
人工智能·百度·unity
孑么1 天前
C# 委托与事件 观察者模式
开发语言·unity·c#·游戏引擎·游戏程序
wangduqiang7471 天前
unity的学习
学习·unity·游戏引擎
@Sunset...1 天前
Unity程序基础框架
unity·游戏引擎
咩咩觉主2 天前
Unity实战案例全解析 :PVZ 植物脚本分析
unity·游戏引擎