【问题标题】:How to have a powerup have a slight chance of spawning when killing an enemy?如何在杀死敌人时让通电有轻微的产卵机会?
【发布时间】:2016-12-16 20:34:10
【问题描述】:

所以我们有一个课堂作业,我们几乎是在完成 Unity 教程中的 Survival Shooter 项目。我已经设法制作了健康包和小盒子,它们可以让你在捡起它们时加快速度,但现在我希望强化道具在敌人死亡时有轻微的掉落几率。有人可以帮我吗?我并不是真的要完整的代码,我在下面有一些:

 public float percentDrop = 50f;
 public GameObject HealthPack;
 void Awake()
 {
     HealthPack = GetComponent<GameObject>();
 }
public void TakeDamage (int amount, Vector3 hitPoint) { if(isDead) return;

     enemyAudio.Play ();
     currentHealth -= amount;

     hitParticles.transform.position = hitPoint;
     hitParticles.Play();
     if(currentHealth <= 0)
     {
         Death ();
     }
 }
 void Death ()
 {
     isDead = true;
     capsuleCollider.isTrigger = true;
     anim.SetTrigger ("Dead");
     enemyAudio.clip = deathClip;
     enemyAudio.Play ();

     var randChance = Random.Range(0f, 100f);
     if (randChance < percentDrop)
     {
         //GameObject.Healthpack.setActice(true);           
     }
 }

我不太清楚如何让游戏对象在它们死后生成,有人可以帮我吗?

【问题讨论】:

  • 您会想要找到有关 Unity 的 Instantiate 函数的教程。不幸的是,推荐一个特定的教程超出了 Stack Overflow 的范围,但我保证有很多。

标签: c# unity3d


【解决方案1】:
  1. 从编辑器中创建一个“Health Pack”预制件。如果您需要有关预制件的更多信息,请参阅网络上的信息。要创建预制件,只需将游戏对象从场景拖放到您的项目中。它在场景中的名字会变成蓝色。您可以将其从场景中删除,它仍会在项目中。
  2. 将预制件从项目拖到敌人检查器中的 HealthPack 插槽中。敌人现在将引用预制件。
  3. 当你想创建一个新的健康包时,你可以使用 rutter 指定的 Object.Instantiate 静态方法。 Here is the official doc。当您实例化新的 Health Pack 时,我想您希望它出现在敌人所在的位置,这意味着您将要使用该方法的重载之一,该重载将 Vector3D position 作为参数,很可能是 @987654323 @。由于这些方法也需要四元数,因此只需传入 Quaternion.identity 常量即可。

这就是您的代码的外观:

 if (randChance < percentDrop)
 {
     Object.Instantiate(HealthPack, transform.position, Quaternion.identity);           
 }

另一个问题,正如我在评论中提到的,是唤醒功能:HealthPack = GetComponent&lt;GameObject&gt;();。 HealthPack 预制件应该从检查员那里分配给敌人。 Awake 函数中的那一行会将你的敌人的GameObject 组件分配给HealthPack,这在当前上下文中是不可取的。

我希望这会有所帮助!

【讨论】:

  • 这正是我所需要的!我有一个健康包预制件,我们已经开始学习 setActive 功能,但我就是不知道如何使它适用于这种情况。我一定会看看 Instantiate 功能!
  • 当我尝试将 Transform.position 放在 Vector 3 参数中时,Unity 似乎不喜欢那样...知道为什么吗?
  • 我写了Transform.position,而应该是transform.position。我的错。
  • 哦,你应该删除那个 Awake 方法。
  • 现在它说“Vector3 不包含带 1 个参数的构造函数”......如果有任何问题打扰你,我很抱歉,这只是我对 Unity 还很陌生,尤其是像这样的更大的项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多