-
Notifications
You must be signed in to change notification settings - Fork 137
7.主界面(ADBRuntimeController)介绍
(ADB控制主面板)ADBRuntimeController是你与ADB物理核心进行交互的地方.
ADBRuntimeController负责收集和生成各种节点,杆件以及碰撞体,并提供了各种用于生成的选项.
ADB控制主面板分为运行时与未运行状态
默认为当前脚本的transfrom,当然你可以更改它为你想要的起点
识别作用的关键词,如果transform的名字中包含该关键词,那么它则会被识别成带有物理效果的节点,包含该关键词的节点将会被识别,不区分大小写.
被标记的transform将不会被识别(但仍然会搜索其子节点)
被标记的关键词将不会被识别(但仍然会搜索其子节点)
根据条件生成的节点与杆件,如果生成正确,你可以看到不同颜色的线条所代表的杆件.
该项会在start()中自动运行.会在 生成碰撞体 中自动运行.
所有所识别到的transfrom与其相符合的 效果设置文件(ADBSetting) 组成的列表.
修改此列表并不能使得数据被读取,请按照正确的工作流程修改ADBSetting.
刷新碰撞体:识别角色root节点下所有的碰撞体文件并返回.
生成碰撞体:生成角色全身的碰撞体,并返回识别角色root节点下面所有的碰撞体文件列表,需要勾选 自动生成全身碰撞体 才会出现
- 请尽量在确保能够正确生成节点以后再使用此选项,碰撞体需要读取节点的数据来控制半径.
通过全身的IK关节的比例,按照一定的系数自动生成全身的碰撞体.
由于角色有所不同,所以,生成的碰撞体大部分情况下会出现偏大或者偏小的情况,我并不能保证生成的碰撞体一定就符合你的角色,但是大概能在正确的位置上.
- 该选项在Start()会被调用,假如你勾选了该选项,脚本会在启动的时候自动生成碰撞体.
- 如果你已经生成好了全身的碰撞体,请不要勾选此选项.会带来性能上的损失.
如果你勾选此选项,碰撞体将会被严格限制半径,不会与任意节点发生接触.
反之,碰撞体仍然会以固定节点为参考,保证反复抖动的情况不会发生.
所有识别到的碰撞体列表,不包括标记为全局的碰撞体.
移除碰撞体列表的内容,如果你勾选了同时删去碰撞体脚本,那么脚本会自动把列表中的碰撞体脚本删除.
脚本在延迟时间后启动物理,最小不能低于0.
画出所有的点,线,collider以及各种杂七杂八的东西
这是一个特殊的优化选项,如果你的设定中有关于刚性的系数为零,请不要采用它.
它的主要作用是优化骨骼运动的轨迹,让它看上去更加的卷曲与缓慢,更加具有动漫的质感;在高速运动下的长度会收敛的更加快速,而低速运动下则会强烈失真.
如果没有特殊要求,请不要使用该功能.
在高的迭代次数下(>=16),该选项会让你的运动轨迹变得不稳定,但是能提升大量的性能,迭代次数越多提升的越明显.同时该选项允许你在极大的迭代次数下异步运行物理.
如果你能够接受两个角色在做同一动作的时候,最终计算的物理轨迹结果不一样,你可以采用该选项.
迭代次数,核心功能.原理是对预期的路径进行切片,获得每次切片中更加精确的结果,更高的迭代次数可以减少额外的拉升,增加仿真的精确程度,提高碰撞的精确性,但是会增计算量.
添加一个风力.
抱歉我的风力写的太差了,你或许可以写的好XD.
按照性能开支从高到低,大概顺序是
全体碰撞>仅杆件碰撞>=仅节点碰撞>不计算碰撞
计算杆件碰撞与计算节点碰撞的原理不同,前者是保证杆件不会进入碰撞体内,后者则是保证节点不会进入碰撞体内.前者的精确度比后者高,但是性能开支有一点微小的提升.
恢复所有节点的初始位置,初始化内部物理系统.
恢复所有节点位置,重新计算所有节点数据,重新开始物理系统.
注意,该选项可能导致物理系统异常的bug(比如头发倾斜),这是一个逻辑上的bug(骨骼的初始位置已经变化),并不能从代码中直接解决.
如果你出现了该bug,请重启场景以结局.
如果场景中碰撞体的绘制丢失,请使用此功能刷新.
画出所有的点,线,collider以及各种杂七杂八的东西
- 该选项开销很大,关闭可以有效提高帧数
这是一个特殊的优化选项,如果你的设定中有关于刚性的系数为零,请不要采用它.
它的主要作用是优化骨骼运动的轨迹,让它看上去更加的卷曲与缓慢,更加具有动漫的质感;在高速运动下的长度会收敛的更加快速,而低速运动下则会强烈失真.
如果没有特殊要求,请不要使用该功能.
在高的迭代次数下(>=16),该选项会让你的运动轨迹变得不稳定,但是能提升大量的性能,迭代次数越多提升的越明显.同时该选项允许你在极大的迭代次数下异步运行物理.
如果你能够接受两个角色在做同一动作的时候,最终计算的物理轨迹结果不一样,你可以采用该选项.
迭代次数,核心功能.原理是对预期的路径进行切片,获得每次切片中更加精确的结果.
说了自己去改一下啦XD
按照性能开支从高到低,大概顺序是
全体碰撞>仅杆件碰撞>=仅节点碰撞>不计算碰撞
计算杆件碰撞与计算节点碰撞的原理不同,前者是保证杆件不会进入碰撞体内,后者则是保证节点不会进入碰撞体内.前者的精确度比后者高,但是性能开支有一点微小的提升.
void Awake()
{
createPhysicalControll = animatorObj.AddComponent<ADBRuntimeController>();
createPhysicalControll.generateKeyWordWhiteList = new List<string>() { "hair", "bang", "etc" };
//OYM:默认为hair,skirt,置空则会采用ADBGlobalSetting文件的default key
createPhysicalControll.generateKeyWordBlackList = new List<string>() { "mesh"};//OYM:默认为ik,可不填
createPhysicalControll.blackListOfGenerateTransform = new List<Transform>();//OYM:一般这个选项很少用到,可不填
createPhysicalControll.iteration = 16;//OYM:默认为4,可不填
createPhysicalControll.isGenerateColliderAutomaitc = true;//OYM:默认为true,可不填
createPhysicalControll.isGenerateByFixedPoint = false;//OYM:默认为true,可不填
//OYM:最好在Awake当中运行,在start当中可能会出现抢跑现象
}
void Update()
{
createPhysicalControll.AddForce(vecotr3.forward);
//OYM:你可以用AddForce来给你的物理系统添加一个力 .
}