【发布时间】:2021-08-08 16:38:11
【问题描述】:
你好!
我想为一个项目制作一个关卡编辑器,为此我需要 3D 轴来移动一个对象。我有axes,但我希望用户能够通过拖动一个轴来移动它们:单击 X 轴(红色),拖动轴并移动(如 unity、blender 或UE 做到了)。
我的问题是我不知道如何让鼠标输入在正确的轴上移动。其实我们可以移动它,但是当你移动X轴时,鼠标不必跟随世界中的X轴而是在屏幕上,所以你只需要从左到右移动鼠标即可。
Blublub。
【问题讨论】:
你好!
我想为一个项目制作一个关卡编辑器,为此我需要 3D 轴来移动一个对象。我有axes,但我希望用户能够通过拖动一个轴来移动它们:单击 X 轴(红色),拖动轴并移动(如 unity、blender 或UE 做到了)。
我的问题是我不知道如何让鼠标输入在正确的轴上移动。其实我们可以移动它,但是当你移动X轴时,鼠标不必跟随世界中的X轴而是在屏幕上,所以你只需要从左到右移动鼠标即可。
Blublub。
【问题讨论】:
这是一种方法:
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;
}
【讨论】: