【问题标题】:find nearest player to line [Unity3D]找到离线最近的玩家[Unity3D]
【发布时间】:2021-09-01 18:18:52
【问题描述】:

我想找到离线最近的玩家,更具体地说,我在屏幕中心有目标指示器,并想象我的角色和目标指示器之间有一条线,如果目标指示器,我会附上图像更清楚不是完全在其他玩家身上,我想从那条线上得到最近的玩家来造成伤害。 我找不到任何解决方案,希望我解释清楚,

【问题讨论】:

  • 在下面找到一些对您的尝试有用的提示。但是,您需要尝试一些事情并在遇到困难的特定时刻分享您的问题

标签: unity3d game-physics


【解决方案1】:

您可以使用 unity 的 Ray 类,它相当于一条线的数学运算。 找到下面两个可以使用的有用函数,用叉积计算距离,然后用平方距离找到最近的距离,而不是为了提高效率。
平方根的计算效率不高,因此最好避免使用它们。对于这种情况是有意义的,因为您需要最短距离,因此您可以使用.sqrMagnitude。如果您需要距离本身,那么您将使用.magnitude(距离本身)。但是,如果您不打算使用平方根,或 Update() 中的 .magnitude,则它不是错误交易。

public float DistancePointToLineSqr(Ray ray, Vector3 point) {
    return Vector3.Cross(ray.direction, point - ray.origin).sqrMagnitude;
}

private Vector3 GetClosestToLinePoint(List<Vector3 points>) {
    Ray vertical = new Ray(transform.position, Vector3.up);
    Vector3 closestPoint = points.OrderBy(point => DistancePointToLineSqr(vertical, point)).FirstOrDefault();

    return closestPoint;
}

对于您的行,当您提到目标指标时,您可能会发现 Camera.ScreenPointToRay 很有用。

【讨论】:

  • 感谢回答,其他玩家的GetClosestToLinePoint(List points) 中的“List points”是什么?
  • 正是您想要评估的点。我推测的球员的位置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多