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