首页 文章

Unity Raycast2D忽略了实例化的Prefab对象

提问于
浏览
1

我正在为一个大学任务做一个小游戏 . 这是一个简单的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;

我现在用Google搜索了2个小时,但实际上没有什么能解决我的问题 .

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

我真的很喜欢,因为它适用于手动放置对象,但不适用于实例化的对象 . 以前有人经历过这个吗?

编辑:

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

EDIT2:

鸟开始

// 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>();
}

手动放置鸟
Manually placed bird

实例鸟
Instatiated Bird

两者都有对撞机,两者都在RayCast的Z级别上 .

1 回答

  • 0

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

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

相关问题