Unity实现向量跟随/旋转跟随

最近想对人物骨骼做一些旋转操作,但遇到了一些问题,于是研究了一下如何在unity中实现向量跟随/旋转跟随

问题定义

以存在两对节点ParentJoint_master和ChildJoint_master,ParentJoint_slave和ChildJoint_slave,ChildJoint作为ParentJoint的子物体,希望实现ParentJoint_slave和ChildJoint_slave之间向量的指向与ParentJoint_master和ChildJoint_master之间向量指向方向相同,也就是一个向量能够不断跟随另一个向量。

解决方案

这个问题的难点在于ParentJoint_slave默认的旋转角度不为0,因此我们无法直接将ParentJoint_slave的旋转设置为与ParentJoint_master相同。因此需要先计算两个向量之间的旋转角度与方向,用四元数表示,再在ParentJoint_slave默认旋转角度的基础上进行与两向量之间旋转角度方向相同的旋转
具体代码如下:

Vector3 oldarmVector = childJoint_slave.position - parentJoint_slave.position;
Vector3 newarmVector = childJoint_master.position - parentJoint_master.position;
Quaternion q = Quaternion.identity;
q.SetFromToRotation(oldarmVector, newarmVector);
Debug.Log("newarmVector:  " + newarmVector.ToString("f4"));
Debug.Log("oldarmVector(before rotation):  " + oldarmVector.ToString("f4"));
parentJoint_slave.rotation = q * parentJoint_slave.rotation;
Debug.Log("oldarmVector(after rotation):  " + (childJoint_slave.position - parentJoint_slave.position).ToString("f4"));

需要注意的是四元数乘法顺序,q * parentJoint_slave.rotation代表先进行parentJoint_slave.rotation的旋转,再进行q的旋转

实验结果

ParentJoint_slave的默认旋转角度不为0

在这里插入图片描述
Play以后得到两个向量朝向相同

在这里插入图片描述
在这里插入图片描述
最终效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值