我给敌人分配了一个弹丸,该弹丸向玩家射击,并且这个弹丸具有collider2d,我将其标记为触发器。而且似乎无法识别我的玩家对撞机。子弹刚穿过我的玩家。
void OnTriggerEnter2d (Collider2D other)
{
Player _player = other.GetComponent<Player>();
if (_player != null)
_player.ChangeHealth(1);
Destroy(gameObject);
}
我的播放器组件:
答案 0 :(得分:1)
您的方法名称中有一个小的错字。 “ 2d”中的“ d”必须大写。
onTriggerEnter2d
---> onTriggerEnter2D
void OnTriggerEnter2D (Collider2D other)
{
Player _player = other.GetComponent<Player>();
if (_player != null)
_player.ChangeHealth(1);
Destroy(gameObject);
}
答案 1 :(得分:0)
在没有看到您的代码的情况下,我将假设您的“玩家”对象没有附加Rigidbody2D
。
我强烈建议您阅读docs上的对撞机以及它们之间的交互方式,但要非常简短。为了使两个对象之间发生碰撞,它们中至少有一个必须附着有Rigidbody
或Rigidbody2D
。
将Rigidbody2D
组件附加到播放器(您可能希望将其标记为运动学的,因此碰撞不会影响它的位置/旋转等),然后它将按预期工作。
答案 2 :(得分:0)
我会将您在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 Player中添加了组件的图像。为子弹添加相同的内容,或者至少检查以下两项: