请允许我详细说明一下,因此我在 python 中预处理帧并提取一个大致对应于吉他指板的矩形。
然后我将此位置信息发送到 Unity 以便在那里将其可视化。
虽然我也想让我的 3D 吉他模型将标记的点与通过 python 获得的点相匹配,这意味着它应该根据这些点来定位、缩放和旋转自身,但效果很迷人。
我怎样才能实现这个目标?
我对 Unity 还很陌生,坦率地说,我不知道如何才能实现这样的壮举。以前有人做过类似的事情吗?
最佳答案
这是您想要的理想设置。您有两个点 X 和 Y 作为目标,吉他上有引用点 A 和 B。 O是质心位置
首先,设置比例。
// dist(X,Y) = scale * dist(A,B)
float scale = Vector3.Distance(posX,posY) / Vector3.Distance(posA, posB);
transform.localScale = Vector3.Scale(baseScale, scale);
您必须知道吉他的基本(初始)音阶。这通常是 1,1,1
但在某些情况下(例如从 Blender 导入时)它往往类似于 100,100,100
因此只需确保您拥有正确的值即可。
接下来,您需要旋转吉他。我们可以简单地修改吉他的transform.up
。
Vector3 delXY = posY - posX;
transform.up = delXY.normalized;
最后,您需要将吉他移动到所需的位置。我们希望 A
与 X
一致,B
与 Y
一致。让我们求解 A
。
Vector3 movementVector = posX - posA;
transform.Translate(movementVector, Space.World);
吉他现在应该与矩形对齐。
需要注意的几点:
- 变量
posX
、posY
、posA
和posB
必须位于世界空间 - 我们假设矩形与吉他的正面位于同一平面上
这就是我的全部。祝您的项目一切顺利。我希望这有帮助!
关于unity-game-engine - 使用一组点控制 3D 对象的变换属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76781201/