未调用碰撞回调函数
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:
对于二维 SpriteRenderer/Collider2D:
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:
我是 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:
对于二维 SpriteRenderer/Collider2D:
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: