実現したいこと
実現したいことが二つあります。
一.Stringに変数を埋め込みたい。
二.埋め込んだ変数を別のクラスから変更したい。
前提条件(実行環境)
Canvas内にTextオブジェクトを置き、「TestTextScript」コンポーネントを持たせています。
また、カラのGameObjectに「SetHensuu」コンポーネントを持たせています。
「TestTextScript」の中身を次のようにして、
C#
1using System; 2using UnityEngine; 3using UnityEngine.UI; 4 5public class TestTextScript : MonoBehaviour 6{ 7 static int hensuuint = 111; 8 static string hensuuString = "あいうえお"; 9 string testTextString = $"数字は{hensuuint}、文字列は{hensuuString}。"; 10 11 private void Start() 12 { 13 this.GetComponent<Text>().text = testTextString; 14 } 15}
実行すると、次のようになります。
ここまでは問題ない…ような気がします。
試したこと、発生している問題
①
この状態で「SetHensuu」スクリプトの中身を次のように書きます。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class SetHensuu : MonoBehaviour 6{ 7 public TestTextScript tts; 8 9 void Start() 10 { 11 tts.hensuuint = 999; 12 tts.hensuuString = "かきくけこ"; 13 } 14}
すると、
インスタンス参照でメンバー'TestTextScript.hensuuint'にアクセスできません。代わりに型名を使用してください
のエラーが発生します。
②
変数がpublicになっていないからかな?と思い「TestTextScript」の変数に「public」を付けても、
C#
1 public static int hensuuint = 111; 2 public static string hensuuString = "あいうえお";
同じエラーが発生したままでした。
③
「static」が良くないのかな?と思い「TestTextScript」の変数から「static」を削除すると、
C#
1 public int hensuuint = 111; 2 public string hensuuString = "あいうえお";
今度は
フィールド初期化子は、静的でないフィールド、メソッド、またはプロパティ'TestTextScript.hensuuint'を参照できません
という新たなエラーが発生しました。
補足情報
わざわざ「Stringに変数を埋め込む」なんてことをしたい理由は、
作品をローカライズ(多言語対応)する目的があることから
文字列どうしをくっつける方法ではなく、どうしても埋め込み変数で対応する必要があるためです。
この問題については根本的なことを解っていないような気がしており恐縮なのですが、
調べ方が悪いのか、恥ずかしながら原因や解決方法がわからない状況です…。
もしわかるかたがいらっしゃいましたら、ご教授いただければ幸いです。
よろしくお願いいたします。
※使用ソフト
Unity 2021.2.0f1 Personal
Microsoft Visual Studio Community 2019 Version 16.11.4
回答1件
あなたの回答
tips
プレビュー