使用以下代码以后,发现同一场景里的两个标签均为Enemy的物体A、B,第一个物体A在player碰撞两次以后销毁,但是第二个物体B碰撞一次以后就会消失,如何解决: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Attack : MonoBehaviour { public int MaxCollisionCount; private int collisionCount=0; void OnCollisionEnter2D(Collision2D collision) { Debug.Log(collisionCount); if (collision.gameObject.CompareTag("Enemy")) { collisionCount++; if (collisionCount == MaxCollisionCount) { Destroy(collision.gameObject); Debug.Log(collisionCount); } else if(collisionCount > MaxCollisionCount) { Destroy(collision.gameObject); Debug.Log(collisionCount); } } } }
时间: 2024-02-14 19:33:00 浏览: 184
etlegacy:ET:Legacy是一个基于Wolfenstein:Enemy Territory的代码的开源项目,该代码于2010年根据GPLv3许可证发布。
这个问题可能是由于两个标签为Enemy的物体A和B共用了同一个Attack脚本所导致的。当第一个物体A碰撞两次后,其collisionCount变量已经达到了MaxCollisionCount的值,因此在第三次碰撞时就会执行Destroy(collision.gameObject)语句将物体A销毁。但是由于物体B也共用了同一个Attack脚本,因此其collisionCount变量也会被累加,当碰撞第一次时,collisionCount的值就已经等于了MaxCollisionCount,因此物体B会在第一次碰撞时就被销毁了。
解决这个问题的方法是给每个标签为Enemy的物体都添加一个独立的Attack脚本,这样就可以确保每个物体的collisionCount变量都是独立的,不会相互影响。如果需要共用Attack脚本,可以将MaxCollisionCount变量改为静态变量,这样所有物体共用的都是同一个静态变量,不会相互影响。以下是修改后的代码示例:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Attack : MonoBehaviour
{
public static int MaxCollisionCount;
private int collisionCount = 0;
void OnCollisionEnter2D(Collision2D collision)
{
Debug.Log(collisionCount);
if (collision.gameObject.CompareTag("Enemy"))
{
collisionCount++;
if (collisionCount == MaxCollisionCount)
{
Destroy(collision.gameObject);
Debug.Log(collisionCount);
}
else if (collisionCount > MaxCollisionCount)
{
Destroy(collision.gameObject);
Debug.Log(collisionCount);
}
}
}
}
阅读全文