C# 在团结中射击多个敌人大约4次时出现问题

C# 在团结中射击多个敌人大约4次时出现问题,c#,unity3d,C#,Unity3d,当我有多个敌人时,他们的生命值有一个浮点数,大约为250.0f。所以当我向其中一个射击时,每次向敌人射击时,这个数字应该减少50。但我的问题是:第一个敌人死了大约4/5枪,但当我开始向另一个敌人射击时(在第一个敌人之后),它只需要1枪就死了 这是玩家子弹的子弹脚本,叫做Bullet.cs: public class Bullet : MonoBehaviour { public GameObject BulletObject; public GameObject GlobelObjectExp

当我有多个敌人时,他们的生命值有一个浮点数,大约为
250.0f
。所以当我向其中一个射击时,每次向敌人射击时,这个数字应该减少50。但我的问题是:第一个敌人死了大约4/5枪,但当我开始向另一个敌人射击时(在第一个敌人之后),它只需要1枪就死了

这是玩家子弹的子弹脚本,叫做Bullet.cs:

public class Bullet : MonoBehaviour {

public GameObject BulletObject;
public GameObject GlobelObjectExplosion;
public GameObject GlobelBulletExplosion;
public float life = 3.0f;
private EnemyAI enemy;


private Transform bulletTransform;
// Use this for initialization
void Start () {

}

void OnTriggerEnter(Collider other)
{
    if(other.gameObject.tag == "Enemy")
    {

        EnemyAI.currEnemyLife -= 50;
        Player.score += 50;

        //Creates an explosion on collision
        GameObject objBullet = Instantiate(GlobelBulletExplosion, transform.position, Quaternion.identity) as GameObject;
        Destroy(objBullet, 2.0f);

        Debug.Log("ColliderWorking");

        if(EnemyAI.currEnemyLife <= 0.0f)
        {
            Destroy(other.gameObject);

            //creates an explosion when enemy is destoryed
            GameObject obj = Instantiate(GlobelObjectExplosion, other.gameObject.transform.position, Quaternion.identity) as GameObject;

            Destroy(obj, 2.0f);
            Player.score += 250;
        }
        Destroy(gameObject);
    }
}

// Update is called once per frame
void Update () {

    life -= Time.deltaTime;

    transform.Translate(0, 0, Player.bulletSpeed * Time.deltaTime);

    if(life <= 0.0)
    {

        Destroy(gameObject);

    }

}
公共类项目符号:单一行为{
公共游戏对象;
公共游戏对象全局对象爆炸;
公共游戏对象GlobalBulletExplosion;
公众浮标寿命=3.0f;
私人敌人;
私有变换;
//用于初始化
无效开始(){
}
无效对撞机(对撞机其他)
{
如果(other.gameObject.tag==“敌人”)
{
EnemyAI.curreneylife-=50;
球员得分+=50分;
//在碰撞时创建爆炸
GameObject objBullet=实例化(GlobalBulletExplosion、transform.position、Quaternion.identity)为GameObject;
销毁(objBullet,2.0f);
Log(“ColliderWorking”);

如果(EnemyAI.curreneyLife,
敌方
中的属性都是
静态
,这意味着整个应用程序之间只共享其中一个。因此,下一个直接死亡的敌人将使用上一个已经死亡的敌人的生命

curreneylife
curreneybullets
curreneyfuel
属性中删除
static
修饰符

然后,您需要更改在
Bullet
中修改这些值的方式,因为您无法再通过
EnemyAI
直接访问这些值。我对Unity3D了解不多,但在阅读了一些内容后,我认为您需要这样做:

var enemy = otherObject.GetComponent<EnemyClass>();
enemy.currEnemyLife -= 50f;
// etc...
var=otherObject.GetComponent();
敌方当前寿命-=50f;
//等等。。。

敌方
中的属性都是静态的,这意味着整个应用程序之间只有一个共享的属性。因此,下一个直接死亡的敌人将使用上一个已经死亡的敌人的生命

curreneylife
curreneybullets
curreneyfuel
属性中删除
static
修饰符

然后,您需要更改在
Bullet
中修改这些值的方式,因为您无法再通过
EnemyAI
直接访问这些值。我对Unity3D了解不多,但在阅读了一些内容后,我认为您需要这样做:

var enemy = otherObject.GetComponent<EnemyClass>();
enemy.currEnemyLife -= 50f;
// etc...
var=otherObject.GetComponent();
敌方当前寿命-=50f;
//等等。。。

我不是统一专家,但我怀疑屏幕上所有敌人的
curreneyLife
值都在降低。每个
敌人的
对象都需要包含自己特定的
curreneyLife
值。我不是统一专家,但我怀疑屏幕上所有敌人的
curreneyLife
值都在降低屏幕。每个
敌人
对象都需要包含自己特定的
curreneyLife
值。你的答案很好。我只是不喜欢用这种方式获取碰撞对象,因为我过去在游戏中遇到过这种代码的问题。但它可以为他工作。你的答案很好。我只是不喜欢用那种方式为了得到碰撞的对象,我在过去制作的一个游戏中遇到过这种代码的问题,但它可以为他工作。