存储 Raycast 命中信息

Store Raycast hit info

在我的游戏中,玩家使用虚拟模拟物瞄准特定物体,当他释放模拟物时,角色应该向该物体移动。 我想将该对象的位置(更像是玩家应该根据对象的位置移动的方向)存储在一个变量中,但前提是它是射线碰撞的最后一件事:

Vector3 targetPos;

RaycastHit hit;
if (Physics.Raycast (pos, dir, out hit, 10, targetLayer)) {

    Vector3 moveDir = (hit.point - transform.position).normalized;
    targetPos = moveDir;
} else {
    targetPos = Vector3.zero;   
}

通过这样做,即使最后碰撞的物体是那个特定物体,targetPos 变量在释放模拟后总是 returns 为零。

编辑: 根据@MukeshSaini 评论解决。谢谢大家

我认为即使在用户发布 analog 之后您仍在使用光线投射,这可能会为 Physics.Raycast 返回 false 并在 else 块中将 targetPos 设置为 Vector3.zero

您可以仅在用户使用模拟时为光线投射设置条件,这将在用户释放模拟后停止执行不必要的 else 块,并且 targetPos 将保留其正确值。