首页 > 解决方案 > 移动到距物体一定距离

问题描述

我的相机正在寻找一个物体A。当我向上或向下移动鼠标或滚动鼠标滚轮时,相机会靠近或远离A.

//frontal movement
Vector3 frontal = transform.forward * 
                  (Input.GetAxis("Mouse Y") + Input.mouseScrollDelta.y) * 
                  0.3f;

//distance from the camera to the object
if(Vector3.Distance(A.position, transform.position + frontal) > minDistance)
    transform.position += frontal;

关键是:我不希望相机非常接近A,所以我定义了一个浮点数minDistance,表示相机与物体的最小距离。

问题:我的代码只是说:“如果最终位置比 更接近minDistance,请不要移动”。这不是我想要的行为。如果最终位置比接近minDist,我希望它移动到 dist 所在的位置minDist。我怎样才能做到这一点?

标签: c#unity3dcameragame-physics

解决方案


您可以找到相机和对象之间相对于对象的归一化矢量差异(这给出了“角度”矢量)。检查距离是否小于minDistance,如果是,则将相机移动到目标偏移的位置angle * minDistance

Vector3 newPosition = transform.position + frontal;
Vector3 difference = newPosition - A.position;
float distance = difference.magnitude;

if (distance < minDistance) 
{
  Vector3 angle = difference.normalized;
  transform.position = A.position + (angle * minDistance);
}
else
{
  transform.position = newPosition;
}

(有几种方法可以优化这一点,例如比较距离平方而不是距离,这消除了不必要的平方根运算。)


推荐阅读