碰撞回调函数未调用

时间:2017-03-20 20:25:34

标签: unity3d unity2d

我是Unity的初学者,我目前正在研究2D Brawler。运动完美但我的对手没有做他们应该做的事情...我想检测两个GameObjects碰撞(Spear和Player2)以及是否应该通过Spears AttackDamage减少碰撞Player2s healthPoints。

GameObjects的名称也是它们的标签。 Spears预制件具有以下配置:SpriteRendered(Material Sprites-Default),BoxCollider2D(材料无物理材料2D,IsTrigger(未激活),UsedByEffector(也未激活)Rigidbody2D(运动学,无材料,模拟(激活),运动学接触(激活) ),其余的标准配置))

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;
    }
}

玩家配置 Spears配置 这是我之前尝试的代码

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

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

enter image description here

1 个答案:

答案 0 :(得分:2)

OnCollisionEnter()不起作用的原因:

<强>科里森

1 RigidbodyRigidbody2D未附加

至少,两个 GameObjects的一个如果是3D GameObject,则必须附加Rigidbody。如果它是2D GameObject / 2D对撞机,则应附加Rigidbody2D

2 拼写错误

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

正确的拼写:

对于3D MeshRenderer / Collider

OnCollisionEnter

OnCollisionStay

OnCollisionExit

对于2D SpriteRenderer / Collider2D

OnCollisionEnter2D

OnCollisionStay2D

OnCollisionExit2D

3 .Collider已IsTrigger已检查。 取消选中,以便调用OnCollisionXXX函数。

enter image description here

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

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

对于3D MeshRenderer / Collider

参数为Collision而非Collider

是:

void OnCollisionEnter(Collision collision) {} 

void OnCollisionEnter(Collider collision) {}

对于2D SpriteRenderer / Collider2D

6.碰撞的刚体有isKinematic启用。在这种情况下,不会调用回调函数。

这是完整的collison表

enter image description here