猿问

区分敌人的射弹和用户的射弹

我有一个发射射弹来伤害敌人的用户。

尽管有些敌人拥有自己的射弹来伤害玩家。它们都来自相同的射弹脚本。

问题是当用户升级他的射弹(使用游戏内货币)时。用户和敌人的射弹都会升级。由于它来自同一脚本,因此它会更新DamageOnHit射弹的 。

现在我的问题是:我是否可以告诉我的脚本仅升级用户的射弹,而不创建单独的敌人射弹脚本?

升级菜单代码。正如您所看到的,我从射弹脚本升级了 DamageOnHit。这就是所有射弹受到更多伤害的方式。



using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;


public class UpgradeMenu : MonoBehaviour

{

    [SerializeField]

    private Text accuracyText;


    [SerializeField]

    private Text speedText;


    [SerializeField]

    private Text damageText;


  [SerializeField]

  private Weapon weapon;


  [SerializeField]

  public Projectile projectile;


  [SerializeField]

  private Player player;


  [SerializeField]

  private int upgradeCost = 50;


    void start ()

    {


    }


    void OnEnable()

    {

        UpdateValues();

    }


    void UpdateValues ()

    {


    }


    public void UpgradeArmor ()

    {

      Health.maxHealth += 2;


    ScoreManager.Score -= upgradeCost;


      UpdateValues();

    }


    public void UpgradeSouls ()

    {

      EnemySlime.ScoreOnDeath += 1;

      EnemySkeleton.ScoreOnDeath += 1;


    //  ScoreManager.Score -= upgradeCost;

      UpdateValues();

    }


    public void UpgradeDamage ()

    {

      Projectile.DamageOnHit += 1;


    //  ScoreManager.Score -= upgradeCost;


      UpdateValues();

    }

}



慕容3067478
浏览 112回答 3
3回答

当年话下

在您想要实现的目标中,您希望避免静态字段。您应该能够使用以下内容:player.projectile = new  Projectile();player.projectile.DamageOnHit = 5;enemy.projectile = new  Projectile(); enemy.projectile.DamageOnHit = 1;希望这可以帮助

精慕HU

这是一个更好的解决方案,但它确实意味着您总共需要 3 个类。1 个基类保存标准射弹逻辑,另外 2 个类用于继承射弹基类,用于玩家和敌方射弹。还有一种不同的方法可以做到这一点。您可以在弹丸类中创建一个名为 ProjectileType 的枚举,如下所示:public Enum ProjectileType { PlayerProjectile, EnemyProjectile }每当您创建/实例化射弹时,将此 ProjectileType 分配给projectileType 变量,如下所示:private projectileType;public Projectile(ProjectileType projectileType){    this.projectileType = projectileType;}现在,每当您升级射弹时,您都可以检查射弹是否属于玩家类型,如下所示:if(projectileType == ProjectileType.PlayerProjectile){    // Upgrade logic.}

婷婷同学_

我不确定这是否是最好的解决方案,因为这完全取决于您的游戏逻辑,但您可以创建两类射弹,一类用于敌人,一类用于玩家。这两个类都可以继承自您的 Projectile 类。public class PlayerProjectil : Projectile {...} public class AIProjectil : Projectile {...}将 Projectile 类函数设为虚拟。当您需要不同的行为时,可以在 PlayerProjectil 和 AIProjectil 中覆盖它们。
随时随地看视频慕课网APP
我要回答