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
值。你的答案很好。我只是不喜欢用这种方式获取碰撞对象,因为我过去在游戏中遇到过这种代码的问题。但它可以为他工作。你的答案很好。我只是不喜欢用那种方式为了得到碰撞的对象,我在过去制作的一个游戏中遇到过这种代码的问题,但它可以为他工作。