【发布时间】: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 平面上。
【问题讨论】:
-
看不出有什么问题。你能调整小鸟的大小看看会发生什么吗?