我有一个球员,还有一个盾牌包围着他。当防护罩存在时,它可以阻挡枪弹。我的CollisionEnter代码是
if ((col.collider.gameObject.tag == "hurt") && (col.collider.IsTouching(shield) == false))
{hurt();}这是非常好的,如果我开始的水平已经从默认启用的盾牌。它能阻挡伤害,射弹消失。但如果我从一开始就禁用它然后再启用它,它是...不管怎么说都会伤害到我。即使“盾牌”仍然被标记到Collider2D上,并且该对撞机已启用。我不知道该怎么办。感谢您的帮助!
这是我的播放器属性的图像:

下面是禁用/启用屏蔽后的不正确行为的GIF:

这是碰撞检查的完整代码。
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);
//}
}但它肯定是按原样工作的--当它从一开始就被启用时,它就没有问题。它只有在启动关卡时没有立即唤醒时才会发生。
发布于 2016-09-22 20:30:08
我又试了几次,它似乎真的被修复了-所以,出于某种原因,我在IsTouching中询问的对象需要一个RIGIDBODY。我仍然不理解它,因为如果我开始游戏时带着盾牌,它就能完美地工作!尽管如此,还是解决了这个问题!
谢谢大家!
https://stackoverflow.com/questions/39625110
复制相似问题