【问题标题】:Raytracing not responding correctly光线追踪没有正确响应
【发布时间】:2015-08-23 08:34:06
【问题描述】:

所以我是 Unity 的新手,我确信我错过了一个简单的步骤,但是在网上看了一段时间后由于某种原因我找不到解决方案。

屏幕上有两个对象,玩家和敌人。两者都附加了 Rigidbody2D 和 Box Collider 2D。在 Box Collider 2D 上,我点击了 is triggered 在 Rigidbody2D 上,我都点击了 Is Kinematic。在播放器上,我有一个简单的移动脚本。在敌人的物体上我有这个:

void Update () {
    RaycastHit2D hit = Physics2D.Raycast(transform.localPosition,transform.right,Mathf.Infinity);
    Debug.DrawRay(transform.localPosition,transform.right);
    if (hit)
      Debug.Log(hit.collider);
}

现在由于某种原因,当我将玩家移动到对象上时 if (hit) 是真的,但是如果我将播放器移动到右侧的任何位置,那就不是真的了。这会是什么原因?谢谢。

【问题讨论】:

  • 我猜这种行为的原因是因为你只是在右边进行光线投射,当你通过右边的物体时,光线投射没有任何东西可以击中。跨度>
  • 我一定不明白光线投射的原理,我认为这段代码应该做的是向其原点的右侧发送一条光线,然后如果有任何东西与该光线发生碰撞,则命中变为真实.这不是在做什么吗?

标签: unity3d collision-detection raycasting unity3d-2dtools


【解决方案1】:

首先,你不需要 Rigidbody 来进行光线投射检测,只需要对撞机。其次,Physics2D.Raycast 使用世界位置,而不是本地位置,因此将“transform.localPosition”替换为“transform.position”,如果变换是某个东西的子级,这会造成很多麻烦。请记住,您是从变换的右侧发送光线投射,所以它可能没有击中任何东西,而您获得的值实际上是正确的。

【讨论】:

  • 嘿,所以我更改了它的 transform.position,但是当我让另一个对象在右侧传递它时,它仍然无法读取。还有什么我需要做的吗?感谢您的帮助。
  • 通过修改 if 语句解决了这个问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
相关资源
最近更新 更多