我给我的敌人分配了一个向玩家射击的投射物,这个投射物有一个我标记为触发器的collider2d。它似乎不能识别我的播放器对撞机。子弹就会穿过我的播放器。
void OnTriggerEnter2d (Collider2D other)
{
Player _player = other.GetComponent<Player>();
if (_player != null)
_player.ChangeHealth(1);
Destroy(gameObject);
}我的播放器组件:

发布于 2019-05-16 21:48:37
你的方法名中有一个小的拼写错误。"2d“中的"d”需要大写。
onTriggerEnter2d -> onTriggerEnter2D
void OnTriggerEnter2D (Collider2D other)
{
Player _player = other.GetComponent<Player>();
if (_player != null)
_player.ChangeHealth(1);
Destroy(gameObject);
}发布于 2019-05-16 19:33:00
在看不到你的代码的情况下,我会假设你的“player”对象没有附加Rigidbody2D。
我强烈建议您阅读关于对撞机的docs以及它们是如何相互作用的,但作为一个非常简短的摘要;为了在两个对象之间发生碰撞,至少其中一个对象必须附加了Rigidbody或Rigidbody2D。
将Rigidbody2D组件附加到您的播放器(您可能希望将其标记为运动学,以便碰撞不会影响其位置/旋转等)。然后它应该会像你所期望的那样工作。
发布于 2019-05-16 20:31:48
我会将您在OnTriggerEnter2D中的代码更改为:
void OnTriggerEnter2D (Collider2D other)
{
// In your scene you have just two objects, so not really required now
// may be interesting for you when you have more objects there
if(other.gameObject.CompareTag("Player"))
{
//Here add .gameObject to refer the GameObject which contains the collider2D
Player _player = other.gameObject.GetComponent<Player>();
if (_player != null)
_player.ChangeHealth(1);
Destroy(gameObject);
}
}除此之外。您已经在GameObject播放器中添加了组件的图像。为项目符号添加相同的内容,或者至少检查以下两件事:
https://stackoverflow.com/questions/56167358
复制相似问题