亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

修改游戲中的預制件,游戲結束時恢復原狀

修改游戲中的預制件,游戲結束時恢復原狀

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 關注
  • 149 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號