关于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(, , ));//给一个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(, , ));//给它一个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(, , ));//给球体一个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上,杂重力的作用下两个物体像单摆一样运动。
关于Unity中关节的使用(一)的更多相关文章
- 关于Unity中关节的使用(二)
导入 1.创建工程 2.导入joint_scene.unitypackage 3.运行发现机械爪子摇来摇去,因为line节点下面的子节点之间相互碰撞带动的关系 4.为了消除这种乱摇,我们在右上角添加一 ...
- maya和Unity中的坐标系旋转
maya软件是用的右手坐标系,默认旋转顺序是ZYX,即先绕Z轴旋转,再绕Y轴旋转,最后绕X轴旋转. 比如在maya软件中,右侧的旋转顺序是可选的,默认的选择是“XYZ”,其实物体旋转顺序是倒着念,即上 ...
- 骨骼动画的原理及在Unity中的使用
制作骨骼动画 我们看看这几步操作后,我们得到了那些数据: 1.每个皮肤顶点的初始世界坐标. 2.每个骨骼关节顶点的初始世界坐标. 3.每个顶点被骨骼顶点的影响信息. 4.骨骼如何移动. 骨骼动画原理 ...
- Unite 2018 | 《崩坏3》:在Unity中实现高品质的卡通渲染(下)
http://forum.china.unity3d.com/thread-32273-1-1.html 今天我们继续分享米哈游技术总监贺甲在Unite Beijing 2018大会上的演讲<在 ...
- 如何在Unity中创造真实的水
你将要创造什么 Unity是由Unity Technologies开发的多平台游戏引擎,用于为控制台,移动设备,计算机甚至网站等多种设备创建视频游戏和应用程序.Unity的核心优势在于其稳健性,可移植 ...
- Unity中使用Attribute
Attribute是c#的语言特性 msdn说明如下: The Attribute class associates predefined system information or user-def ...
- 在Unity中使用UGUI修改Mesh绘制几何图形
在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...
- Unity中使用WebView
Unity中使用WebView @(设计) 需求,最近游戏中需要引入H5直播页面和更新比较频繁的赛事页面,需求包括:加密传参数.和Unity交互,在Unity框架下其实有几种方案: 内置函数Appli ...
- Unity中创建二维码
在网络上发现了一个可以把字符串转换成二维码的dll,但是我们要怎么使用他呢.不废话,直接进入主题. 用到的引用 using UnityEngine;using ZXing;using ZXing.Qr ...
随机推荐
- Atitit Seed-Filling种子填充算法attilax总结
Atitit Seed-Filling种子填充算法attilax总结 种子填充的原理,4联通与8联通区域的选择.. 三个队列 waitProcessPixList tempPixList Proces ...
- HTML5学习笔记(六):CSS基本样式
背景 需要注意:背景的所有属性都不会向下进行继承. 背景色 我们可以设定一个纯色为背景色. p {background-color: red;} a {background-color: #ff000 ...
- 生产BackPressure 的代码
public class BackPressureStatsTrackerImpl implements BackPressureStatsTracker { private static final ...
- 深度学习领域的Papers
https://github.com/songrotek/Deep-Learning-Papers-Reading-Roadmap 深度学习论文阅读路线图 Deep Learning Papers R ...
- hadoop的五个守护进程【转】
hadoop的五个守护进程 [转自]:http://xubindehao.iteye.com/blog/1395580 一般如果正常启动hadoop,我们可以在master上通过jps命令看到以下5 ...
- eclipse Maven 使用记录 ------ 建立app项目
maven 项目构建工具 , 如今已逐渐取代ant的笨拙配置方式 ,使项目管理更加简单,规范,结构更加清晰,这里记录跟eclipse集成的一些步骤 1.从apache maven项目下下载maven ...
- poj1077(康托展开+bfs+记忆路径)
题意:就是说,给出一个三行三列的数组,其中元素为1--8和x,例如: 1 2 3 现在,需要你把它变成:1 2 3 要的最少步数的移动方案.可以右移r,左移l,上移u,下移dx 4 6 4 5 67 ...
- shell脚本输出带颜色字体
#!/bin/bash # #下面是字体输出颜色及终端格式控制 #字体色范围:30-37 echo -e "\033[30m 黑色字 \033[0m" echo -e " ...
- 3. sklearn的K-Means的使用
1. K-Means原理解析 2. K-Means的优化 3. sklearn的K-Means的使用 4. K-Means和K-Means++实现 1. 前言 在机器学习中有几个重要的python学习 ...
- spark练习题
site1,user1,-- :: site1,user2,-- :: site1,user3,-- :: site1,user3,-- :: site2,user4,-- :: site3,user ...