element3ds.com
原创TA-Shader [Unity] Dynamic Bone ——Unity 3D动态骨骼插件
发布于
2021-11-9
36564
10
原创TA/Shader
Shader信息:
Shader类型: 角色 
工程信息: 仅展示 
使用的版本管线: -

您需要 登录 才可以下载或查看,没有账号?注册

x
image.png

铛~铛~铛~ !  兔纸我又来了~~今天呢,给大家分享一个动态骨骼插件,应该有不少小伙伴用过吧,名字叫—— Dynamic Bone,记得哦~    评论~! 点赞~! 转发~!(●'◡'●)以及收藏~
image.png

Dynamic Bone插件的Unity Store链接地址https://assetstore.unity.com/pac ... /dynamic-bone-16743

Dynamic Bone是一个Unity的动态骨骼插件,这个插件允许开发者指定对应的根骨骼,从而允许该骨骼的子骨骼进行物理结算,而根骨骼将不进行物理结算~~  有一点要说明哦,DynamicBone模拟的物理结算不会导致骨骼距离发生变化~~也就是说,DynamicBone并不适合模拟凝胶、橡胶等各方向形变明显的物体,这样的物理模型更加适用于模拟头发呀、绳子啊等这些不容易拉伸但容易形变的物体,运用在衣物上时,则需要看衣物材质是否容易拉伸,如果容易拉伸依然不适合用~~


这个插件内含有两个脚本,一个是Dynamic Bone,一个是Dynamic Bone Collider,好了我来一个一个的说明一下


— Dynamic Bone —

Dynamic Bone使用还是比较简单的,导入Package之后,在Unity场景中选中需要计算的带骨骼的GameObject,然后呢,在这个GameObject下面添加DynamicBone组件,然后将最上层的骨骼拖入到DynamicBone组件的Root上即可。然后设置各项参数,DynamicBone就会在物体发生运动的时候自动生效。要注意的是:

注意:因为DynamicBone组件会在启动时会记录所有骨骼的局部坐标并且在每次Update时还原局部坐标,同时会根据所在的GameObject的移动计算骨骼的位置,所以添加DynamicBone组件的 GameObject不能位于应用DynamicBone的模型的骨骼中,就算是根骨骼也不行,如果这样的话,在计算的时候会发生抖动或者直接崩溃~~

  • Dynamic Bone有四个基本属性,决定了其运动效果,四个属性的取值范围都是[0, 1]:
  • Damping (阻尼):阻止简谐运动的惯性运动,相当于弹簧的摩擦力。为0时简谐运动过程不会主动停止,为1时简谐运动过程不会发生;
  • Elasticity (弹性):决定回振移动强度,在简谐运动过程中作为额外的作用力将节点拉到还原位置,相当于弹簧的弹力。为0时系统形变不会主动还原,为1时形变不会发生;
  • Stiffness (刚性):限制最大振动幅度与方向,保证碰撞处理前节点不会跑到指定范围外,相当于弹簧的硬度。为0时不发挥作用,0到1时限制范围从2倍原始距离到0线性衰减;
  • Inert (惯性):限制形变幅度,在每一帧的简谐运动迭代发生前,无条件随物体整体运动拉动节点,拉动距离为Inert * 整体运动距离

    其他的属性说明:   
  • Update (更新频率):DynamicBone计算频率,当游戏实际帧率高于这个更新频率时,DynamicBone会在每一帧进行消极计算,会尽量保持节点形状,但不会进行简谐运动模拟;当DynamicBone更新 频率远远高于游戏帧率的时候,DynamicBone会在脚本执行时尝试追帧,但每次最多执行4次,也就是更新频率实际最高只是当前游戏帧数的4倍;
  • Radius (半径):指定每个节点与DynamicBoneCollider发生碰撞的半径,注意节点互相之间不存在碰撞关系,注意这个半径是0碰撞依然会生效;
  • Damping\Elasticity\Stiffness\Inert\Radius各属性的Distrib:指定属性随着节点深度递增发生的变化;
  • End Length\End Offset 末尾节点偏移量:指定特殊的末尾节点End Bone局部位置;
  • Gravity 重力:在DynamicBone节点上施加的重力,方向是在全局坐标系中的,注意DynamicBone的重力比较特殊,只在节点运动发生时起效,会在节点运动时把节点向重力方向拉动;
  • Force 常驻力:在DynamicBone节点上施加的额外力,方向是在全局坐标系中的,注意Force与Gravity不同,是无条件生效的,会一直把节点向指定方向拉动;
  • Colliders 碰撞体列表:会与DynamicBone各节点发生碰撞的碰撞体对象;
  • Exclusions 排除节点列表:在设置Root节点后,DynamicBone会根据节点的GameObject的父子关系沿着子GameObject方向自动生成节点树,Exclusions中所有节点及其子孙节点都不会 生成DynamicBone节点;
  • Freeze Axis 固定轴:非None的情况下,所有节点在局部坐标系的对应的轴上在值不会发生变化;
  • DistanceDisable 距离控制开关:开启或者关闭距离控制机制,开启后如果DynamicBone所在的物体超出了参考物体的参考距离范围,DynamicBone的所有行为都会停止;
  • Reference Object 参考物体:距离控制机制的参考物体,如果为空则DynamicBone会选择场景内的主摄影机作为参考对象;
  • Distance To Object 参考距离:距离控制机制的参考距离


— Dynamic Bone Collider —

DynamicBone提供了简单的碰撞功能,允许使用者禁止进入或者离开某些特定的区域,组件提供了球型和胶囊体两种区域的碰撞体。碰撞功能的使用非常简单,只需要在骨骼可能会发生碰撞交互的GameObject上添加DynamicBoneCollider组件,并且设置以下属性:

  • Center:指定区域中心与GameObject位置的偏移量;
  • Radius:区域内球形部分的半径;
  • Height:区域高度,这个值在小于2倍Radius时无效,会使区域变成球型,高于2倍Radius时生效,区域会变成胶囊体(可视化模型是两个球体);
  • Direction:胶囊体在当前GameObject局部坐标的方向,区域是球体的时候无效;
  • Bound:区域模式,Outside表示区域会作为碰撞盒与DynamicBone节点发生碰撞,阻止节点进入区域内,而Inside则会约束节点在区域内,阻止节点离开区域; 然后需要将DynamicBoneCollider对象添加至与其发生碰撞交互的DynamicBone组件的Colliders属性中。


好啦~~今天这到这里啦~~记得评论~~点赞~~转发~~~

还有要说明一下:
    使用限制和缺陷   
  • 由于DynamicBone完全不发生拉伸和压缩的特性,DynamicBone并不适合模拟凝胶、橡胶等各方向形变明显的物体,而更适合模拟头发、绳子等不容易拉伸但容易形变的物体, 衣物则要看衣物材质是否容易拉伸,如果容易拉伸依然不适合用DynamicBone模拟;
  • 虽然有简单的碰撞机制,带DynamicBone组件的骨骼之间是不存在碰撞的(当然可以通过在各骨骼都设置DynamicBoneCollider组件来实现,但因为开销会很大所以不建议),所以,这意味着DynamicBone 模拟的物体在刚性为0的时候可能会发生自我穿插;
  • DynamicBone的位置更新发生在LateUpdate节点,这意味着DynamicBone会完全控制节点的位置,其计算结果会覆盖物理和动画系统输出的位置,而不能与其融合






参与人数 7 元素币 +94 活跃度 +48

本帖被以下画板推荐:

B站: https://space.bilibili.com/11632604

使用道具 举报 登录

回复 <
雨の日曜日  发表于 2021-11-10 08:34:31  
2#
学习了
回复 收起回复
使用道具
ABC05  发表于 2021-11-10 08:44:33  
3#
谢谢分享
回复 收起回复
使用道具
好人好事  发表于 2021-11-11 07:39:52  
4#
回复 收起回复
使用道具
f_feather  发表于 2021-11-12 22:56:46  
5#
大佬的游戏进度怎么样啦, 好就没看到更新b站了
回复 收起回复
使用道具
神佛之上  发表于 2022-11-22 23:55:18  
6#
给力!元素有你更精彩
回复 收起回复
使用道具
SunlitStriver  发表于 2025-3-29 09:47:38  
7#
999
回复 收起回复
使用道具

快来发表你宝贵的意见吧!

樱花兔 实名

通过了实名认证的内容创造者

一个做单机游戏的美少女~!

主题
198
精华
176
超神
1
扩散
0
微金
2033
智慧
2846
余额
0
在线时间
57 小时

长剑 长枪 一星珠 黄色药水 火元素 魔影剑 【绝】赤影战盔 【绝】大天使权杖 学徒法袍

快速回复 返回顶部 返回列表