【问题标题】:Unity Raycast2D ignored instantiated Prefab objectUnity Raycast2D 忽略了实例化的 Prefab 对象
【发布时间】:2017-07-06 04:14:06
【问题描述】:

我目前正在为大学作业制作一个小游戏。这是一款简单的 2D 游戏,您可以在其中使用鼠标射击鸟类。

我一开始是手动进行碰撞检测(检查 x/y 边界),但现在我想使用对撞机。

所以我向我的对象添加了一个 CircleCollider2D 并像这样执行 Raycast

Vector3 mousePosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);

RaycastHit2D[] hits = Physics2D.RaycastAll (mousePosition, Vector3.forward, Mathf.Infinity);
        Debug.Log (hits.Length);

现在,当我将预制件手动添加到场景中时,它可以按预期工作。日志输出 1,如果我有多只鸟叠在一起,甚至输出 2。

但是我的游戏随机实例化了很多鸟,并且在执行光线投射时没有检测到它们。我已经查过了,他们肯定有对撞机。

实例化代码如下所示:

Bird bird = Instantiate (birdPrefab, birdPosition, Quaternion.identity) as Bird;

我现在用谷歌搜索了 2 个小时,但没有什么能真正解决我的问题。

我不知道这是否重要,但碰撞检测不会发生在鸟对象的附加脚本中。

我真的很困惑,因为它适用于手动放置的对象,但不适用于实例化的对象。有没有人经历过这种情况?

编辑:

鼠标位置在 (x, y, -10) 上,小鸟在 (x, y, 0) 上,手动放置的和实例化的是场景的直接子节点。

编辑2:

鸟开始

// Use this for initialization
void Start () {
    this.animator = this.GetComponent<Animator> ();

    this.camera = Camera.main;

    this.rigidBody = this.GetComponent<Rigidbody2D> ();
    // get the ammunition script
    this.ammunition = GameObject.Find ("Ammunition").GetComponent<Ammunition> ();
    // get the score script
    this.score      = GameObject.Find("Score").GetComponent<Score>();
}

手动放置的鸟

实例化的鸟

两者都有碰撞器,并且都在 RayCast 的同一 Z 平面上。

【问题讨论】:

  • 看不出有什么问题。你能调整小鸟的大小看看会发生什么吗?

标签: c# unity3d unity5


【解决方案1】:

根据您提供的信息,您的光线投射或小鸟实例化似乎没有任何问题。这使我相信代码的其他地方或场景的设置方式存在问题,特别是如果未实例化的鸟按预期工作。

如果您可以发布手动放置的 Bird 和实例化 Bird Gameobject 信息在游戏过程中的屏幕截图,以及实例化后在“bird”上执行的任何代码,我们可以仔细查看。

【讨论】:

  • 谢谢。我添加了两个屏幕截图和启动代码
  • 这确实工作了一会儿。但它似乎工作而不是随机工作,如果我随机移动代码。,我有点添加和删除不相关的东西,比如 Debug.Log 突然它不再工作了。我太不明白了。开始编写我自己的合谋检测,但毕竟为什么要使用引擎。
  • 一切似乎都还可以。当您单击鸟类时,是否有任何内容进入日志?作为一个仅供参考, Vector3.forward 可能没有按您的意愿使用。 Physics2D.Raycast 只寻找 x 和 y 方向的光线,而 Vector3.forward 是 (0,0,1) 的简写。 Vector2.zero 是你想要的。
  • 您能否详细说明相关代码“不工作”的部分?
  • 不工作我的意思是,我点击一个 2DBoxCollider 并且它没有检测到命中。如前所述,使用 Vector2.zero 它有时可以工作,有时不能,这取决于我是否在某个地方有 Debug.Log。至少感觉是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多