2017-09-15 67 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