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

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

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

C#
慕容3067478 2023-08-20 14:45:05
我有一个发射射弹来伤害敌人的用户。尽管有些敌人拥有自己的射弹来伤害玩家。它们都来自相同的射弹脚本。问题是当用户升级他的射弹(使用游戏内货币)时。用户和敌人的射弹都会升级。由于它来自同一脚本,因此它会更新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();    }}
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

在您想要实现的目标中,您希望避免静态字段。您应该能够使用以下内容:


player.projectile = new  Projectile();

player.projectile.DamageOnHit = 5;


enemy.projectile = new  Projectile(); 

enemy.projectile.DamageOnHit = 1;

希望这可以帮助


查看完整回答
反对 回复 2023-08-20
?
精慕HU

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

这是一个更好的解决方案,但它确实意味着您总共需要 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.

}


查看完整回答
反对 回复 2023-08-20
?
婷婷同学_

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

我不确定这是否是最好的解决方案,因为这完全取决于您的游戏逻辑,但您可以创建两类射弹,一类用于敌人,一类用于玩家。这两个类都可以继承自您的 Projectile 类。

public class PlayerProjectil : Projectile {...}
public class AIProjectil : Projectile {...}

将 Projectile 类函数设为虚拟。当您需要不同的行为时,可以在 PlayerProjectil 和 AIProjectil 中覆盖它们。


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

添加回答

举报

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