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


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

    铰链关节

    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 给出一个力矩的极限,当关节受到力矩超过此值时关节损坏;

    创建一个空节点hinge_joint

    创建一个圆柱体Cylinicer为它的子节点

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

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

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

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

    复制代码
    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 () {
        
        }
    }
    复制代码

    固定关节

    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

  • 相关阅读:
    Task示例,多线程
    request
    do put in ruby
    Ruby零星笔记
    Git的常用操作
    如何在Rails中执行Get/Post/Put请求
    Lua中的基本函数库
    Step By Step(Lua目录)
    position:fixed失效原因
    前端性能监控-window.performance.timing篇
  • 原文地址:https://www.cnblogs.com/Godblessyou/p/7614948.html
Copyright © 2020-2023  润新知