关于Unity中关节的使用(一)

1: 刚体的形状大小在物理世界里面是不变的,但是不少时候,咱们须要多个刚体来配合使用;
2: 关节: 链接刚体与刚体的对应的物理模拟;
3: 关节类型: 铰链关节,弹簧关节, 固定关节, 角色关节,可配置关节html

 

铰链关节spring

1: 将两个刚体束缚在一块儿,在二者之间产生铰链效果;
2: 铰链关节属性
connect Body:目标链接的刚体;
Anchor 本体锚点,链接目标旋转时围绕的中心点;
Connect Anchor 链接目标的锚点,本体旋转时围绕的中心点;自动计算出来的。
Axis 锚点和目标锚点的方向,指定了本体和链接目标的旋转方向;绕哪一个轴旋转
Auto Configure Connected Anchor: 勾选时,仅给出锚点的坐标,系统将自动计算出目标锚点坐标;
Using Spring: 是否使用弹簧;
Sprint 弹力;
Damper: 阻尼,物体移动受到阻碍的大小,越大物体越慢;
Target Postion: 目标位置,弹簧旋转的目标角度;
Use Moto 使用电机,规定关节肿是否使用电机;
TargetVelocity: 目标速率,对象试图达到的速度,会以此速度与目标速度进行加速和减速;
Force 此属性是达到目标速率的力;
Free Spine 规定了收控制对象的旋转是否会破坏,若启用,马达将永远不会破坏旋转,只会加速;
Use Limits规定了关节在旋转的时候是否受限;
Min 规定了刚体旋转的达到的最小角度
Max 规定了刚体旋转的达到的最大角度
Min Bonus 规定了刚体旋转的达到的最小弹跳值
Max Bonus 规定了刚体旋转的达到的最小弹跳值
Break Force 给出一个力的限值,当关节受到的力超过这个,关节损坏;
Break Torque 给出一个力矩的极限,当关节受到力矩超过此值时关节损坏;this

 

 

建立一个空节点hinge_jointspa

建立一个圆柱体Cylinicer为它的子节点3d

建立一个立方体Cube为它的子节点,为了区分,给它一个材质,颜色为红色code

给圆柱体Cylinicer和立方体Cube都增长刚体组件Rigidbody,都去掉重力,设置圆柱体Cylinicer的Constraint约束Freeze PositionX,Y,Z,RotationX,Y,Zhtm

给圆柱体Cylinicer增长Hinge Joint组件,里面的Connected Body属性设置为Cube 对象

建立一个脚本test_hinge_joint挂载到Cube上,要给它一个力blog

复制代码
using UnityEngine; using System.Collections; public class test_hinge_joint : MonoBehaviour { Rigidbody body; // Use this for initialization void Start () { this.body = this.GetComponent<Rigidbody>(); this.body.AddForce(new Vector3(0, 0, 100));//给一个z轴方向的力  } // Update is called once per frame void Update () { } }
复制代码

 

 

固定关节ci

1: 将两个刚体束缚在一块儿, 相对位置保持不变,永远不会变化;
2: 固定关节属性
connect Body:目标链接的刚体;
Break Force 给出一个力的限值,当关节受到的力超过这个,关节损坏;
Break Torque 给出一个力矩的极限,当关节受到力矩超过此值时关节损坏;
Enable collision 容许碰撞检测;
Enable Preprocess 容许进行预处理;

 

建立一个空节点fixed_joint

建立一个球体Sphere1为它的子节点,建立一个球体Sphere2为它的子节点,为了区分,给Sphere2一个材质,颜色为红色

给球体Sphere1和Sphere2都增长刚体组件Rigidbody,都去掉重力

给球体Sphere1增长fixed_joint组件,里面的Connected Body属性设置为Sphere2

建立一个脚本test_fix_joint挂载到Sphere2上,要给它一个力

复制代码
using UnityEngine; using System.Collections; public class test_fix_joint : MonoBehaviour { Rigidbody body; // Use this for initialization void Start() { this.body = this.GetComponent<Rigidbody>(); this.body.AddForce(new Vector3(0, 0, 100));//给它一个z轴方向的力  } // Update is called once per frame void Update () { } }
复制代码

二者开始旋转,可是彼此之间的位置距离都没有变化,你到哪里我到哪里

若是固定二者或其中一个的Freeze RotationX,Y,Z,那么二者会朝着Z轴方向直线运动

 

 

弹簧关节

1: 将两个刚体束缚在一块儿, 相对位置保持不变,永远不会变化;
2: 弹簧关节属性
connect Body:目标链接的刚体;
Anchor 本体锚点,链接目标旋转时围绕的中心点;
Connect Anchor 链接目标的锚点,本体选择时围绕的中心点;
Axis 锚点和目标锚点的方向,指定了本体和链接目标的旋转方向;
Auto Configure Connected Anchor: 勾选时,仅给出锚点的坐标,系统将自动计算出目标锚点坐标;
Sprint 弹力;
Damper: 阻尼,物体移动受到阻碍的大小,越大物体越慢;
Min distance 弹簧两端最小距离
Max distance 弹簧两端最大距离
Break Force 给出一个力的限值,当关节受到的力超过这个,关节损坏;
Break Torque 给出一个力矩的极限,当关节受到力矩超过此值时关节损坏;
Enable collision 容许碰撞检测;
Enable Preprocess 容许进行预处理;

 

建立一个空节点spring_joint

建立一个正方体Cube为它的子节点,建立一个球体Sphere为它的子节点,为了区分,给Sphere一个材质,颜色为红色

给正方体Cube和球体Sphere都增长刚体组件Rigidbody,都去掉重力,设置正方体Cube的Constraint约束Freeze PositionX,Y,Z,RotationX,Y,Z,设置球体Sphere的Constraint约束Freeze RotationX,Y,Z。

给球体Cube增长spring_joint组件,里面的Connected Body属性设置为Sphere

建立一个脚本test_spring_joint挂载到Sphere上,要给它一个力

复制代码
using UnityEngine; using System.Collections; public class test_spring_joint : MonoBehaviour { Rigidbody body; // Use this for initialization void Start() { this.body = this.GetComponent<Rigidbody>(); this.body.AddForce(new Vector3(200, 0, 0));//给球体一个x轴方向的力,它会像弹簧同样在正方体面前弹来弹去  } // Update is called once per frame void Update () { } }
复制代码

 

 

可配置关节

建立一个空节点config_joint

建立一个正方体Cube为它的子节点,建立一个球体Sphere为它的子节点,为了区分,给Sphere一个材质,颜色为红色

给正方体Cube和球体Sphere都增长刚体组件Rigidbody,都保留重力,设置正方体Cube的Constraint约束Freeze PositionX,Y,Z,设置球体Sphere的Constraint约束Freeze PositionX,Y,Z。

给球体Cube增长config_joint组件,修改X Motion, Y Motion, Z Motion 为Locked,里面的Connected Body属性设置为Sphere,

建立一个脚本test_spring_joint挂载到Sphere上,杂重力的做用下两个物体像单摆同样运动。

 

来自:http://www.cnblogs.com/HangZhe/p/7214731.html

相关文章
相关标签/搜索