未调用碰撞回调函数

Collision callback function not called

我是 Unity 的新手,目前正在开发 2D Brawler。运动完美,但我的碰撞器没有做他们应该做的事......我想检测两个游戏对象是否发生碰撞(Spear 和 Player2)以及碰撞 Player2s healthPoints 是否应该减少 Spears AttackDamage。

游戏对象的名称也是它们的标签。 Spears Prefab 有以下配置:SpriteRendered(Material Sprites-Default), BoxCollider2D(Material None Physics Material 2D, IsTrigger(not activated), UsedByEffector(also not activated ) Rigidbody2D(Kinematic, None Material, Simulated(Activated), KinematicContacts(activated), 其余标准配置))

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpearCtr : MonoBehaviour {

    public Vector2 speed;
    public float delay;
    Rigidbody2D rb; 

    void Start ()
    {
        rb = GetComponent<Rigidbody2D>();
        rb.velocity = speed;
        Destroy(gameObject, delay);
    }
    void Update ()
    {
        rb.velocity = speed;
    }
}

球员配置 长矛配置 这是我之前尝试过的代码

OnCollision2D(Collision2D target);
{
    if (target.gameObject.tag == "Spear")
    {
        hp = -1;
        if (hp <= 0)
        {
            alive = false;
        }
    }
}

我希望有人能告诉我如何让它工作 感谢所有的答案 (顺便说一句,对不起我的英语不好,我是奥地利人) enter image description here

enter image description here

OnCollisionEnter() 不起作用的原因:

科里森:

1.Rigidbody or Rigidbody2D未附.

如果是 3D 游戏对象,两个 游戏对象中的 一个 必须附加 Rigidbody . Rigidbody2D 如果它是 2D GameObject/2D 对撞机,则应附加。

2.拼写错误

你拼错了。它的拼写也区分大小写。

正确的拼写:

对于 3D MeshRenderer/Collider:

OnCollisionEnter

OnCollisionStay

OnCollisionExit

对于二维 SpriteRenderer/Collider2D:

OnCollisionEnter2D

OnCollisionStay2D

OnCollisionExit2D

3。Collider 已检查 IsTrigger取消选中此项以调用 OnCollisionXXX 函数。

4。该脚本附加到任何碰撞游戏对象。将脚本附加到游戏对象。

5。您向回调函数提供了错误的参数。

对于 3D MeshRenderer/Collider:

参数是Collision不是Collider

是:

void OnCollisionEnter(Collision collision) {} 

不是

void OnCollisionEnter(Collider collision) {}

对于二维 SpriteRenderer/Collider2D:

6.Both 发生碰撞的刚体启用了 isKinematic。这种情况下不会调用回调函数。

这是完整的碰撞table: