我是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
答案 0 :(得分:2)
OnCollisionEnter()
不起作用的原因:
<强>科里森强>:
1 。 Rigidbody
或Rigidbody2D
未附加。
至少,两个 GameObjects的一个如果是3D GameObject,则必须附加Rigidbody
。如果它是2D GameObject / 2D对撞机,则应附加Rigidbody2D
。
2 。拼写错误
你拼错了。它的拼写也区分大小写。
正确的拼写:
对于3D MeshRenderer / Collider :
对于2D SpriteRenderer / Collider2D :
3 .Collider已IsTrigger
已检查。 取消选中,以便调用OnCollisionXXX函数。
4 。剧本不附加到任何碰撞游戏对象。将脚本附加到GameObject。
5 。您为回调函数提供了错误的参数。
对于3D MeshRenderer / Collider :
参数为Collision
而非Collider
。
是:
void OnCollisionEnter(Collision collision) {}
不
void OnCollisionEnter(Collider collision) {}
对于2D SpriteRenderer / Collider2D :
6.碰撞的刚体有isKinematic
启用。在这种情况下,不会调用回调函数。
这是完整的collison表: