2 回答
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
}
*我直接在这里编写了上面的代码,没有任何文本编辑器或其他任何东西的帮助,所以我可能错过了一些东西,但总的来说,这是它应该如何工作的想法。如果有什么不起作用,我将非常乐意为您提供进一步的帮助:)
TA贡献1797条经验 获得超6个赞
两种选择:
在射弹的
DamageOnHit
每个实例上设置每次
Instantiate
创建新的射弹预制件时,获取其Projectile
组件并将其设置DamageOnHit
为所需的值。
。每次游戏重新启动时,复制每个预制资源
我们将它们称为“ProjectileShotgunProto”和“ProjectileSkeletonProto”。
Instantiate(ProjectileShotgunProto)
当玩家射击时您将调用它们,而不是实例化您的原始预制件。
无论如何,请勿更改代码中的原始预制资源,否则会导致问题。
- 2 回答
- 0 关注
- 103 浏览
添加回答
举报