【发布时间】:2014-04-27 13:32:13
【问题描述】:
我试图在敌人被杀死时播放粒子效果,但它似乎是在随机选择的一个上播放,而不是在被击中的那个上播放。但是被击中的敌人仍然会消失,并且仍然会增加分数。
目前我有三个脚本来执行此操作(所有脚本都已缩短,因此我只显示相关代码):
一个附加在向敌人投掷的盒子上的盒子,可以检测它们是否与敌人的预制件发生碰撞。
void OnCollisionEnter (Collision theCollision) {
if (canProjectileKill == true) {
// If the projectile hits any game object with the tag "Enemy" or "EnemyContainer".
if (theCollision.gameObject.tag == "Enemy") {
GameObject.Find("EnemyExplosion").GetComponent<enemyDeath>().ProjectileHasHitEnemy();
// Destroy the projectile itself.
Destroy (gameObject);
// Destroy the game object that the projectile has collided with (E.g. the enemy).
Destroy (theCollision.gameObject);
GameObject.Find("Manager").GetComponent<projectileSpawner>().deleteProjectile();
}
}
}
另一个附加到敌人预制件上,用于检测他们是否被盒子击中。
void OnCollisionEnter (Collision theCollision) {
if(theCollision.gameObject.tag == "Projectile") {
GameObject.Find("EnemyExplosion").GetComponent<enemyDeath>().EnemyHasBeenHit();
}
}
然后我运行一个 if 语句,询问盒子是否都击中了敌人的预制件,以及敌人的预制件是否被盒子击中,以尝试识别单个预制件而不是所有预制件。但是这仍然不起作用。
public bool HasProjectileHitEnemy;
public bool HasEnemyBeenHitByProjectile;
void Start () {
gameObject.particleSystem.Stop();
HasProjectileHitEnemy = false;
HasEnemyBeenHitByProjectile = false;
}
public void ProjectileHasHitEnemy () {
// From projectile.
HasProjectileHitEnemy = true;
}
public void EnemyHasBeenHit () {
// From enemy.
HasEnemyBeenHitByProjectile = true;
PlayParticleSystem();
}
public void PlayParticleSystem () {
if (HasEnemyBeenHitByProjectile == true && HasProjectileHitEnemy == true) {
gameObject.particleSystem.Play();
HasProjectileHitEnemy = false;
HasEnemyBeenHitByProjectile = false;
}
}
}
我知道这是一个很长的问题,但我已经坚持了一个多星期,所以任何帮助都将不胜感激。谢谢你:)
【问题讨论】:
-
长问题。完全不清楚你在问什么。
-
只是简化了它,希望它会更有意义。
标签: c# unity3d game-engine