c# - 移动到距物体一定距离
问题描述
我的相机正在寻找一个物体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
。我怎样才能做到这一点?
解决方案
您可以找到相机和对象之间相对于对象的归一化矢量差异(这给出了“角度”矢量)。检查距离是否小于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;
}
(有几种方法可以优化这一点,例如比较距离平方而不是距离,这消除了不必要的平方根运算。)
推荐阅读
- ms-access - Access 数据拉取结果的输出在 SAS 中为 *
- image - Flutter web image_picker没有找到实现
- reactjs - 在 MUI DataGrid 中应用过滤器后显示“无行”消息
- automation - Terraform 更新访问策略
- python - 保存时的 VS Code lint 在远程 (pylint) 上不起作用
- typescript - 带有 Svelte src 的 Svelte-kit 和 NPM 模块
- c - 重新分配结构
- ipfs - ipfs 文件 ls 似乎无法配置为专用网络
- reactjs - MUI 数据表,隐藏搜索图标但仍显示搜索栏
- django - Django Form 将类添加到 div、输入字段和标签