我正在为大学任务制作一个小游戏。这是一款简单的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:
Bird start
// 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级别。
答案 0 :(得分:0)
根据您提供的信息,您的光线投影或Bird实例化似乎没有任何问题。这让我相信代码中的其他地方或场景的设置方式存在问题,特别是如果未实例化的鸟按预期工作。
如果您可以在游戏过程中发布手动放置的Bird和实例化的Bird Gameobject信息的屏幕截图,以及在实例化后对“bird”执行的任何代码,我们可以仔细查看。