关于unity中关节的使用

杭者 杭者     2022-09-09     289

关键词:

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上,杂重力的作用下两个物体像单摆一样运动。

 

关于深度测试

webgl中关于深度测试开启深度测试是gl.enable(gl.DEPTH_TEST);关闭深度测试是gl.disable(gl.DEPTH_TEST);设置深度测试函数是gl.depthFunc可选的类型有NEVER、LESS、EQUAL、LEQUAL、GREATER、NOTEQUAL、GEQUAL、ALWAYS设置是否开启深度写入gl.depthMask(true/false)... 查看详情

unity与安卓⭐二androidstudio中关于通讯的使用教学

文章目录🟥AndroidStudio查看jar包内容1️⃣配置AndroidStudio2️⃣导入要查看的jar包3️⃣添加jar包到库中去4️⃣查看jar包🟧AndroidStudio查看arr包内容1️⃣将你的arr包拷到libs下2️⃣查看arr包🟨arr和jar的区别🟩AndroidStud... 查看详情

unity与安卓⭐二androidstudio中关于通讯的使用教学

文章目录🟥AndroidStudio查看jar包内容1️⃣配置AndroidStudio2️⃣导入要查看的jar包3️⃣添加jar包到库中去4️⃣查看jar包🟧AndroidStudio查看arr包内容1️⃣将你的arr包拷到libs下2️⃣查看arr包🟨arr和jar的区别🟩AndroidStud... 查看详情

unity与安卓⭐二androidstudio中关于通讯的使用教学

文章目录🟥AndroidStudio查看jar包内容1️⃣配置AndroidStudio2️⃣导入要查看的jar包3️⃣添加jar包到库中去4️⃣查看jar包🟧AndroidStudio查看arr包内容1️⃣将你的arr包拷到libs下2️⃣查看arr包🟨arr和jar的区别🟩AndroidStud... 查看详情

原创在unity中关于多态转换与序列化保存的细节

在Unity中关于多态转换与序列化保存的细节环境:在unity中为类变量分类。[System.Serializable]publicclassdllProperty{publicintnum1=1;publicstringname1="dll";publicboolisOn=false;}[System.Serializable]publicclassmyProperty:dllProperty{ 查看详情

神经网络

本节参考的是网页http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial中关于BuildingDeepNetworksforClassification一节的介绍。分下面2大部分内容:  1.从self-taught到deepnetworks:  从前面的关于self-taughtlearning介绍(Deeplearning:十 查看详情

unity---------------------关于buildassetbundles的使用(打包)

usingUnityEditor;usingUnityEngine;publicclassBuildAssetBundle{///<summary>///点击后,所有设置了AssetBundle名称的资源会被分单个打包出来///</summary>[MenuItem("AssetBundle/Build(Single)")]staticvoidBuild_AssetBund 查看详情

一文讲清楚unity中关键目录的相关知识(代码片段)

原创不易,转发请注明出处!谢谢~ 几个重要目录的平台差异Application.dataPath(ReadOnly)  Application.streamingAssetsPath(ReadOnly)        Application.persistentDataPath(Read/Write)Unityandroid目录结构(参考)UnityiOS 查看详情

关于unity中水和雾的使用

水自己来做水和雾还是有点麻烦的,不过没关系,Unity帮我们做好了很多可以用的。1.Unity自己实现了水的特效,帮助我们解决游戏中水的问题2.Unity的水集成在了Environment的环境资源包里面,导入的方法是:Assert---->Import---->En... 查看详情

关于在unity中使用序列帧动画

//动画数组publicobject[]anim;//限制一秒多少帧publicfloatfps=30;//帧序列privateintnowFram;//记录当前时间privatefloatswitchTime;publicstringpath="Texture/33";publicboolisLoop=false;publicImageimage;publicTexture2Dtexture;v 查看详情

unity中关于ngui的知识点

UICamera用于处理NGUI中的手势识别(单击、双击、拖拽) **Sprite(精灵)的创建方式:create->Sprite创建完精灵之后,指定图集(Atlas),然后为Sprite指定图片。Sprite是图集中的一张小图。特别提醒:千万不要试图通过缩放控件... 查看详情

关于unity中shader的使用

在游戏的开发过程中,程序员不太会自己去写shader,因为写起来很麻烦,而且只有Unity会报错,编译器也没有什么提示。通常是拿别人的shader改一改,当然,程序员还是要能看懂和会一点shader  Unity坐标系转换1:transform.local... 查看详情

关于unity中粒子效果的使用

粒子效果1:游戏中会有很炫酷的特效,比如爆炸,水花,火焰等;2:unity提供粒子编辑器,方便特效人员来开发很炫酷的特效;3.粒子效果一般有专门的粒子特效师来做,我们只需要拿来用就好了,很多参数没必要掌握。 ParticleSystem... 查看详情

请教关于sv中关于队列的问题

参考技术A虽然不可以将数组直接添加到队列,语法里面没有这样的规定。但是可以灵活的变动下,用foreach把数组的每个元素添加到队列后面去,应该也可以达到你说的效果吧! 查看详情

关于unity中天空盒的使用

天空盒是一个盒子,一个正方形的盒子。其实本身也是一种shader,需要材质球做载体。1:一个场景是由6幅正方形的纹理图无缝拼接而成,在视野看来位于真实的视野一样;2:两种天空盒:  场景天空盒Window->Lighting->Scene->Skybox... 查看详情

unity3d中关于tilemap的几点用法(代码片段)

上面的图片形象的展示出了unity中tilemap类的各自含义。Tilemap中的快捷键可以将tile瓦片进行旋转shift+click擦除Edit模式下可以对palette内的tile进行移动Tilemap加碰撞体添加TilemapCollider2D组件如果想要将所有的碰撞体组合成一个,再添... 查看详情

关于unity中新版动画系统的使用

Mecanim动画1:旧版动画系统只能通过代码来控制动画播放,随着动画种类变多,代码复杂度也会增加,同时动画过渡也需要非常繁琐的代码控制,为了让有经验的动画师开发动画,unity推出了针对人物角色的Mecanim动画系统;2:Mecanim支持... 查看详情

unity-------------------------关于gui绘制的编程

转载:在这篇文章中我将给读者介绍Unity中的图形用户界面(GUI)编程.Unity有一个非常强大的GUI脚本API.它允许你使用脚本快速创建简单的菜单和GUI.简介Unity提供了使用脚本创建GUI界面的能力.在写这篇文章的时候,Unity还没有提供一套... 查看详情