2016-11-18 13 views
1

私はこのクラスに「DialogueLines.cs」という名前をつけています。ここにはパブリック静的文字列のリストがあります。私は、この特定の文字列にアクセスする際の問題がされていること:変数値が文字列内で更新されない

public static volatile string cutscene_introHurt7 = "* " + Manager.playerName + " huh?\n That's a nice name."; 

Manager.playerNameの値が正しくありません。最初は、playerNameの値が "Garrett"に設定されています。 "Zip"のような別のものに更新された場合、ダイアログには次のようなメッセージが表示されます: * Garrett, huh? That's a nice name.また、Debug.Log()ステートメントで名前が正しく変更されていることを確認しました。文字列が正しい変数値で更新されていないためだと思います。ご覧のとおり、私はすでに揮発性のキーワードを運のない文字列に貼りつけることを試みました。何か案は?ありがとう。

+0

で静的な解決策を参照するには、サンプルコンソールアプリケーション下に

? – A3006

+0

IEnumeratorにあります。この値は、値に関してはDebug.Logステートメントで示されているように細かく更新され、更新される他のテキストフィールドも正常に更新されます。何とか正しい値を持たないこの文字列です。それが静的であるか、リフレッシュまたは強制的に強制することができますか? – GMR516

答えて

3

これは、動作がstaticであるためです。 staticは文字列をあらかじめコンパイルします。つまり、ユーザー名を変更しても、あらかじめコンパイルされた文字列は変更されません。

ただし、文字列を変更することはできます。

cutscene_introHurt7 = "* " + Manager.playerName + " huh?\n That's a nice name."; 

ただし、できるだけ静的にすることを検討することをお勧めします。その後、あなたの意図した動作はうまくいくでしょう。あなたはManager.playerNameの値を設定しているアクション

using System; 

class Program 
{ 
    public static string playerName = "GARRET"; 
    // This will be concatonated to 1 string on runtime "* GARRET huh? \m That's a nice name." 
    public static volatile string cutscene_introHurt7 = "* " + playerName + " huh?\n That's a nice name."; 

    static void Main(string[] args) 
    { 
     // We write the intended string 
     Console.WriteLine(cutscene_introHurt7); 
     // We change the name, but the string is still compiled 
     playerName = "Hello world!"; 
     // Will give the same result as before 
     Console.WriteLine(cutscene_introHurt7); 
     // Now we overwrite the whole static variable 
     cutscene_introHurt7 = "* " + playerName + " huh?\n That's a nice name."; 
     // And you do have the expected result 
     Console.WriteLine(cutscene_introHurt7); 
     Console.ReadLine(); 
    } 
} 
+0

面白い、ありがとう。残念なことに、リフレッシュを強制する簡単な方法はありませんが、まあまあです。 – GMR516

関連する問題