0

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

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

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

我希望有人能告诉我如何让这个工作感谢所有的答案(顺便说一句,对不起我的英语不好,我是奥地利人) 在此处输入图像描述

在此处输入图像描述

4

1 回答 1

2

OnCollisionEnter()不起作用的原因:

科里森

1 . RigidbodyRigidbody2D不附

至少,如果它是 3D 游戏对象,则两个游戏对象之一必须附加到它。如果它是 2D GameObject/2D Collider,则应附加。RigidbodyRigidbody2D

2 . 拼写错误

你没有拼写正确。它的拼写也区分大小写。

正确拼音:

对于 3D MeshRenderer/Collider

OnCollisionEnter

OnCollisionStay

OnCollisionExit

对于 2D SpriteRenderer/Collider2D

OnCollisionEnter2D

OnCollisionStay2D

OnCollisionExit2D

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

在此处输入图像描述

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

5、你给回调函数提供了错误的参数。

对于 3D MeshRenderer/Collider

参数Collision不是Collider

这是:

void OnCollisionEnter(Collision collision) {} 

不是

void OnCollisionEnter(Collider collision) {}

对于 2D SpriteRenderer/Collider2D

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

这是完整的 collison 表

在此处输入图像描述

于 2017-03-20T21:55:43.393 回答