【发布时间】:2016-09-22 20:30:08
【问题描述】:
我有一个球员,他周围有一个盾牌。当存在盾牌时,它会阻挡炮弹。我的 CollisionEnter 代码是
if ((col.collider.gameObject.tag == "hurt") && (col.collider.IsTouching(shield) == false))
{hurt();}
如果我在默认情况下已启用盾牌的情况下开始关卡,那就太好了。它可以阻挡伤害,弹丸消失。但是,如果我从一开始就禁用它然后启用它,它……无论如何都会伤害我。即使“盾牌”仍被标记为 Collider2D,并且该 Collider 已启用。我不知道该怎么做。感谢您的帮助!
这是碰撞检查的完整代码。
void OnCollisionEnter2D(Collision2D col)
{
if ((col.collider.gameObject.tag == "hurt_insta") && (col.collider.IsTouching(shield) == false))
{
Instantiate(prefab,transform.position,transform.rotation);
transform.position = new Vector3 (300, 300, transform.position.z);
Vector2 tempxy = new Vector2 (transform.position.x, transform.position.y);
GameObject.Find ("Main Camera").GetComponent<CameraFollow> ().target = null;
PlayerSolid.GetComponent<Renderer> ().enabled = false;
StartCoroutine (Death_prodleva4bit ());
}
if ((col.collider.gameObject.tag == "hurt") && (col.collider.IsTouching(shield) == false))
{
Instantiate(prefab,transform.position,transform.rotation);
//if (PlayerSolid.transform.localScale.y > 0f) {
// PlayerSolid.transform.localScale -= new Vector3 (0f, 0.36f);
//}
//if (actual_bit == player_bits [8] ) {
if (n > 6) {
transform.position = new Vector3 (300, 300, transform.position.z);
Vector2 tempxy = new Vector2 (transform.position.x, transform.position.y);
GameObject.Find ("Main Camera").GetComponent<CameraFollow> ().target = null;
PlayerSolid.GetComponent<Renderer> ().enabled = false;
StartCoroutine (Death_prodleva4bit ());
}
else {
hit = true;
HURT (2);
//if (n < 7) {
// HURT(3);
//}
}
但它确实可以正常工作 - 从一开始就启用它没有问题。只有在开始关卡时没有立即唤醒它才会发生。
【问题讨论】:
-
您能否提供播放器属性的图像,以及调用此代码的更完整示例?这将为问题可能是什么提供一些线索。
-
puu.sh/rje0M/90a5b4ea63.png 这是玩家(粉红色)、盾牌和玩家属性。 Player_collisions 中有“盾牌”公共 Collider2D,它被分配给盾牌多边形对撞机。碰撞代码也在 Player_collisions_4bit 中,它在 void OnCollisionEnter2D(Collision2D col) 中,每次带有 HURT 标签的射弹碰到我时都会调用它,它恰好不是盾牌。由于一些碰撞原因,盾牌在 Player 中是一个孩子。
-
我想到了一个快速添加 - 一个 gif:puu.sh/rjezQ/4d34afd244.gif
-
如何启用/禁用它?什么代码?还有什么时候启用禁用它?
-
我基本上禁用/启用它,就像它在 gif 中一样。在游戏中,我让触发器为我做这件事。但它做同样的事情。