为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕森卡 2023-08-20 14:49:32
在我的游戏中,有多种类型的射弹。我有来自玩家和一些敌人的射弹。但所有这些射弹都是由同一个脚本引导的。为了让每个射弹有不同的行为,我为每个射弹制作了一个预制件,当“武器”触发它时,它会实例化。这样,每个预制件都有自己的损坏和其他组件的统计数据。在游戏中,我希望用户能够更改预制件“命中时造成伤害”,但是一旦用户死亡并重新启动游戏,就需要将其恢复。所以我的问题是,在我的升级菜单中,如何更改每个不同射弹的 DamageOnhit 值,因为这些射弹都附加到不同的武器上。我的 3 个不同的射弹预制件(将来会更多) 每个预制件的 int 计数器我的射弹会导致每个不同的射弹以 1 的标准伤害开始。升级菜单    public void UpgradeDamage ()    {      Projectile.DamageOnHit += 1;    //  ScoreManager.Score -= upgradeCost;      UpdateValues();    }我希望能够为每个不同的预制件升级这个值。我尝试将 DamageOnHit 更改为静态,但一旦我升级了该值。所有的射弹都会升级。这不是我想要的,因为我希望能够单独更改每个预制件。
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

您创建一个 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 editor

public 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.cs

private 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

}

*我直接在这里编写了上面的代码,没有任何文本编辑器或其他任何东西的帮助,所以我可能错过了一些东西,但总的来说,这是它应该如何工作的想法。如果有什么不起作用,我将非常乐意为您提供进一步的帮助:)


查看完整回答
反对 回复 2023-08-20
?
互换的青春

TA贡献1797条经验 获得超6个赞

两种选择:

  • 在射弹的DamageOnHit每个实例上设置

    每次Instantiate创建新的射弹预制件时,获取其Projectile组件并将其设置DamageOnHit为所需的值。

  • 每次游戏重新启动时,复制每个预制资源

    我们将它们称为“ProjectileShotgunProto”和“ProjectileSkeletonProto”。Instantiate(ProjectileShotgunProto)当玩家射击时您将调用它们,而不是实例化您的原始预制件。

无论如何,请勿更改代码中的原始预制资源,否则会导致问题。


查看完整回答
反对 回复 2023-08-20
  • 2 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信