修改游戏中的预制件,游戏结束时恢复原状

在我的游戏中,有多种类型的射弹。我有来自玩家和一些敌人的射弹。但所有这些射弹都是由同一个脚本引导的。

为了让每个射弹有不同的行为,我为每个射弹制作了一个预制件,当“武器”触发它时,它会实例化。这样,每个预制件都有自己的损坏和其他组件的统计数据。

在游戏中,我希望用户能够更改预制件“命中时造成伤害”,但是一旦用户死亡并重新启动游戏,就需要将其恢复。

所以我的问题是,在我的升级菜单中,如何更改每个不同射弹的 DamageOnhit 值,因为这些射弹都附加到不同的武器上。

我的 3 个不同的射弹预制件(将来会更多) 

https://img4.mukewang.com/64e1b79c0001b6eb02830061.jpg

每个预制件的 int 计数器

https://img4.mukewang.com/64e1b7ac0001e34a03800066.jpg

我的射弹会导致每个不同的射弹以 1 的标准伤害开始。

升级菜单



    public void UpgradeDamage ()

    {

      Projectile.DamageOnHit += 1;


    //  ScoreManager.Score -= upgradeCost;


      UpdateValues();

    }

我希望能够为每个不同的预制件升级这个值。我尝试将 DamageOnHit 更改为静态,但一旦我升级了该值。所有的射弹都会升级。这不是我想要的,因为我希望能够单独更改每个预制件。


慕森卡
浏览 104回答 2
2回答

宝慕林4294392

您创建一个 BulletManager.cs(将其附加到始终处于活动状态的对象或空游戏对象)public static BulletManager instance;private void Awake{  if ( instance == null ) //this creates a Singleton so you can access it directly from everywhere, won't go deep into explaining how it works exactly    {        instance = this;    }    else    {        Destroy (gameObject);    }}public int machinegunDmg; //set the initial values in the editorpublic int shotgunDmg;public int skeletonDmg;现在用适当的标签标记所有预制件,假设您为机枪射弹预制件使用“MachineGunProj”标签。您附加到所有预制件的相同脚本应该会受到该 BulletManager 脚本的损坏,具体取决于您实例化的预制件。private int DamageOnHit;  //this will get called everytime you instantiate a new prefab that holds this script; it will check for its own tag and depending on it will set the damage in this script to be equal to the appropriate value from BulletManager.csprivate void Start{    if(this.gameObject.CompareTag("MachineGunProj"))    {      this.DamageOnHit = BulletManager.instance.machinegunDmg;    }    else if(this.gameObject.CompareTag("ShotgunProj"))    {      this.DamageOnHit = BulletManager.instance.shotgunDmg;    }    //else if -- do the same for every prefab you have}至于升级,您需要更改 BulletManager.cs 中的值。例如:public void UpgradeMachineGun(){   BulletManager.instance.machinegunDmg++; //next time you spawn a machinegun prefab it will take the upgraded value}*我直接在这里编写了上面的代码,没有任何文本编辑器或其他任何东西的帮助,所以我可能错过了一些东西,但总的来说,这是它应该如何工作的想法。如果有什么不起作用,我将非常乐意为您提供进一步的帮助:)

互换的青春

两种选择:在射弹的DamageOnHit每个实例上设置每次Instantiate创建新的射弹预制件时,获取其Projectile组件并将其设置DamageOnHit为所需的值。。每次游戏重新启动时,复制每个预制资源我们将它们称为“ProjectileShotgunProto”和“ProjectileSkeletonProto”。Instantiate(ProjectileShotgunProto)当玩家射击时您将调用它们,而不是实例化您的原始预制件。无论如何,请勿更改代码中的原始预制资源,否则会导致问题。
打开App,查看更多内容
随时随地看视频慕课网APP