先回顾阻抗模型里存在的运动分离:
在此我们假设有两个物体A和B,A是力反馈设备的物理位置(上图蓝球),B是负责视觉呈现的物体的位置(上图红球),虚拟墙是绿色的。
在Unity中,直接修改物体的transform.position会导致刚体的碰撞失效,即导致穿模。
于是可以把B挂载到A上,A是kinematic的,而B是Rigidbody。这时候就发现另一个现象:不碰撞时,A和B完全重合;碰到虚拟墙后,A和B的分离呈现只增大不减小的状态。例如上图中的情况,理想情况下,如果蓝球向左运动,那么当蓝球在墙内时红球应该依然停留在墙体表面,蓝球和红球的距离应该变短,直到蓝球与虚拟墙分离,红球和蓝球保持重合。而实际情况则变成了蓝球向左运动时,即使蓝球还在墙内,红球也立即与虚拟墙分离。
目前的解决方案是在A和B之间添加弹簧连接,同时A的质量被设定为Infinity,B的质量与弹簧刚度、阻尼满足二阶欠阻尼系统的相关设定。效果如视频。
QQ录屏20240331202937
相关设定如图: