创建 3D 轴以移动对象(在 Unity 中)

Create 3D axis to move object (in Unity)

您好!

我想为项目制作关卡编辑器,为此我需要 3D 轴来移动对象。我有 axes 但我希望用户能够通过拖动一个轴来移动它们:单击 X 轴(红色),拖动轴并移动 (就像 unity、blender 或 UE 一样)。

我的问题是我不知道如何让鼠标输入在正确的轴上移动。实际上,我们可以移动它,但是当你移动X轴时,鼠标在世界上不必跟随X轴,而是在屏幕上,所以你只需要从左到右移动鼠标。

Blublub.

这是一种方法:

  • 针对 XZ 平面的光线投射
  • 找到从箭头中心开始到命中点结束的方向向量
  • 由于该方向向量可以在 XZ 平面中观察任何方向,因此将其投影到 X 轴上以将其约束到该轴
  • 按生成的向量移动箭头
Vector3 xAxis = Vector3.right;
Vector3 yAxis = Vector3.up;
Vector3 arrowsCenterPosition = ...;
Plane plane = new Plane( yAxis, arrowsCenterPosition ); // Create a virtual plane on XZ directions
Ray ray = Camera.main.ScreenPointToRay( Input.mousePosition );
if( plane.Raycast( ray, out float enter ) ) // Raycast against that plane
{
    Vector3 hitPoint = ray.GetPoint( enter ); // The point that hit the virtual plane
    Vector3 directionToHitPoint = hitPoint - arrowsCenterPosition;

    // We want to move in X axis but our directionToHitPoint can be in any direction in XZ plane,
    // so we need to project it onto X axis
    Vector3 xAxisMovement = Vector3.Project( directionToHitPoint, xAxis );

    // You can move the arrows by xAxisMovement amount
    arrowsCenterPosition += xAxisMovement;
}