2017-09-15 70 views
0

首先,這裏是我的腳本:如果這兩個值彼此相等,然後做到這一點的C#

using UnityEngine; 
using System.Collections; 
using Steamworks; 

public class Achievements : MonoBehaviour { 

    public static int currentScore=0; 

    public static int score300 = 300; 
    public static int score1000 = 1000; 
    public static int score3600 = 3600; 
    public static int score18000 = 18000; 
    public static int score72000 = 72000; 
    public static int score180000 = 180000; 

    void Start() { 

     if(SteamManager.Initialized) { 

      string name = SteamFriends.GetPersonaName(); 
      Steamworks.SteamUserStats.SetAchievement("NEW_ACHIEVEMENT_1_0"); 
      Steamworks.SteamUserStats.StoreStats(); 

      Debug.Log(name); 

     } 
    } 

    void Update() 
    { 
     currentScore = PlayerPrefs.GetInt("highscore"); 

     if (currentScore == score300 && SteamManager.Initialized){ 

      Steamworks.SteamUserStats.SetAchievement("NEW_ACHIEVEMENT_5_0"); 
      Steamworks.SteamUserStats.StoreStats(); 

     } 

     if (currentScore == score1000 && SteamManager.Initialized) { 

      Steamworks.SteamUserStats.SetAchievement("NEW_ACHIEVEMENT_6_0"); 
      Steamworks.SteamUserStats.StoreStats(); 

     } 
     if (currentScore == score3600 && SteamManager.Initialized) { 

      Steamworks.SteamUserStats.SetAchievement("NEW_ACHIEVEMENT_7_0"); 
      Steamworks.SteamUserStats.StoreStats(); 

     } 
     if (currentScore == score18000 && SteamManager.Initialized) { 

      Steamworks.SteamUserStats.SetAchievement("NEW_ACHIEVEMENT_8_0"); 
      Steamworks.SteamUserStats.StoreStats(); 

     } 

    } 
} 

正如你所看到的,我有一個持有不同數量的公共整數。我也在使用當前的steamworks.net,我試圖看看我能否與scoreXXX匹配「高分」(已經建立並正常工作)。如果發生這種情況,我希望腳本放棄成就。

我執行if(x = x)函數是否錯誤?有人可以幫忙嗎?

+1

比較看起來不錯。你確定分數會以增量遞增,並且在'Update'時完全相等嗎?你可能想使用'> ='。在加載到調試之後,我會添加一些「currentScore」的值的記錄,並且可能在每個「if」塊的內部記錄,以驗證塊是否已輸入。 – ryachza

+0

@GiladGreen我假設基於腳本實際上沒有「落下成就」的「我想腳本放下成就」。 – ryachza

回答

4

問題是你的arent檢查如果分數比分數基準更大,只有其等於

您可以通過將這些值轉換爲Dictionary<int, string>簡化您的代碼位:

private static Dictionary<int, string> highScoreDictionary = new Dictionary<int, string>() 
{ 
    { 300, "NEW_ACHIEVEMENT_5_0" }, 
    { 1000, "NEW_ACHIEVEMENT_6_0" }, 
    { 3600, "NEW_ACHIEVEMENT_7_0" }, 
    { 18000, "NEW_ACHIEVEMENT_8_0" }, 
    { 72000, "NEW_ACHIEVEMENT_9_0" }, 
    { 180000, "NEW_ACHIEVEMENT_10_0" }  
}; 

void Update() 
{ 
    currentScore = PlayerPrefs.GetInt("highscore"); 

    if(SteamManager.Initialized) 
    { 
     //Order by high score, descending 
     foreach(var score in highScoreDictionary.OrderByDescending(x => x.Key)) 
     { 
      //If the score is greater than or equal to the benchmark 
      //Then add the achievement 
      if(currentScore >= score.Key) 
      { 
       Steamworks.SteamUserStats.SetAchievement(score.Value); 
       Steamworks.SteamUserStats.StoreStats(); 
       break; 
      } 
     } 
    } 
} 

我做了一個小提琴here。它顯然被修改了一下,因爲我沒有在那裏訪問Unity庫,但是你可以看到實際的邏輯。

+1

幹得好我的好先生 – Helpha

+0

嘿@maccettura!首先感謝您的幫助。我把它放在我的腳本中,好吧,創建一個新的,以防你的代碼,更新了一些東西,以確保所有變量的工作,運行遊戲,成就沒有下降。例如,我現在的highScore是300,但是300的成績沒有下降。沒有。 是的,它是在steamworks上定義的。有什麼建議麼? – papi

+0

嗯,我剛剛嘗試了我的小提琴300的分數,它按預期工作。我想象你的問題在於Steamworks,而不是邏輯。 – maccettura