unity-game-engine - 使用一组点控制 3D 对象的变换属性

标签 unity-game-engine

请允许我详细说明一下,因此我在 python 中预处理帧并提取一个大致对应于吉他指板的矩形。 enter image description here

然后我将此位置信息发送到 Unity 以便在那里将其可视化。
enter image description here

虽然我也想让我的 3D 吉他模型将标记的点与通过 python 获得的点相匹配,这意味着它应该根据这些点来定位、缩放和旋转自身,但效果很迷人。
enter image description here

我怎样才能实现这个目标?

我对 Unity 还很陌生,坦率地说,我不知道如何才能实现这样的壮举。以前有人做过类似的事情吗?

最佳答案

Image with 5 points: X,Y are the targets; A,B are reference points on the guitar's fretboard; O is the centre of mass of the guitar

这是您想要的理想设置。您有两个点 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;

最后,您需要将吉他移动到所需的位置。我们希望 AX 一致,BY 一致。让我们求解 A

Vector3 movementVector = posX - posA;
transform.Translate(movementVector, Space.World);

吉他现在应该与矩形对齐。


需要注意的几点:

  • 变量 posXposYposAposB 必须位于世界空间
  • 我们假设矩形与吉他的正面位于同一平面上

这就是我的全部。祝您的项目一切顺利。我希望这有帮助!

关于unity-game-engine - 使用一组点控制 3D 对象的变换属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76781201/

相关文章:

ios - 在免费应用程序上将 Apple In App Purchases 的银行信息放在哪里

unity-game-engine - 未将对象引用设置为对象 UnityEngine 的实例

java - Unity3D - 由于 Firebase Messaging SDK 设置失败而导致 Android 崩溃

android - 如何将Unity APK发布到Play商店?在 Debug模式下签名?

android - Unity3D Android 应用程序在所有手机上立即崩溃。

unity-game-engine - Unity3d 无法在 Mac OS high Sierra 上正常工作

c# - 澄清我对 C# 封装的理解

c# - IOS 中奇怪的统一错误

unity-game-engine - Unity不同屏幕尺寸下的不同物理行为

unity-game-engine - Android资源链接失败: Unity Error :unexpected element <queries> found in <manifest>