移动到距物体一定距离

Move to exactly a certain distance from an object

我的相机正在寻找一个物体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 来表示相机与物体的最小距离。

问题: 我的代码简单地说:"If the final position is closer than minDistance, don't move"。这不是我想要的行为。如果最终位置比 minDist 更近,我希望它移动到 dist 正好是 minDist 的点。我该怎么做?

你可以找到你的相机和物体相对于物体的归一化向量差异(这给出了 "angle" 向量)。检查距离是否小于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;
}

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