移动到距物体一定距离
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;
}
(有几种方法可以对此进行优化,例如比较距离的平方而不是距离,这样可以消除不必要的平方根运算。)
我的相机正在寻找一个物体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;
}
(有几种方法可以对此进行优化,例如比较距离的平方而不是距离,这样可以消除不必要的平方根运算。)