2016-12-30 8 views
0

プレーヤーが新しい場所に入るたびに一種のバナーを表示したい。これは画面の左端にあるはずです。私の問題は、私の現在のソリューションが解像度を超えて一貫して動作しないことです。より高い解像度では、バナーは必要以上に右に配置されます。Unity3D - 画面の境界にメッセージを表示する

enter image description here

私はまた、適切にテキストにそれが表示されるたびに配置するコードの一部を使用します。

public class AreaName : MonoBehaviour 
{ 
    private static AreaName instance; 

    void Start() 
    { 
     if (instance) 
      Destroy(this); 
     else 
      instance = this; 

     BannerBase = transform.FindChild("BannerBase").GetComponent<Image>(); 
     NameDisplay = BannerBase.transform.FindChild("BannerText").GetComponent<Text>(); 
    } 

    private Image BannerBase; 
    private Text NameDisplay; 

    public static void Display (string areatitle) 
    { 
     int width = TextWidth(instance.NameDisplay, areatitle); 
     instance.BannerBase.rectTransform.position = new Vector3(-305 + width, instance.BannerBase.transform.position.y, 0); 
     instance.NameDisplay.text = areatitle; 
     print(width); 
    } 

    private static int TextWidth (Text obj, string text) 
    { 
     int totalLength = 0; 

     Font myFont = obj.font; //chatText is my Text component 
     CharacterInfo characterInfo = new CharacterInfo(); 

     char[] arr = text.ToCharArray(); 

     foreach (char c in arr) 
     { 
      myFont.GetCharacterInfo(c, out characterInfo, obj.fontSize); 

      totalLength += characterInfo.advance; 
     } 

     return totalLength; 
    } 
} 

私が監視している単純なエラーはありますか?それともUnity UIシステムが間違っているのか理解していますか?

答えて

0

これを行うために何もコードを書く必要はありません。

(0,0)ピボットで画面の左下隅にバナーを配置しましたが、それはどうしてx:-320に配置されますか?

何らかの理由でバナーを置いた場合、ネイティブ解像度ではおそらく動作しますが、Canvas Resizerをアクティブにした場合、他の解像度ではその角に位置していないため移動しますすべて。

+0

問題はバナーが終了していることです。私は、テキストのサイズに合わせて位置を変えなければならないと思った。 –

+0

はい、画面からバナーの一部を取り除いた感覚は何ですか? テキストにコンテンツサイズフィッタを追加してから、画像の背景を子として配置してテキストサイズに合わせることができます。 あなたが持っているものと達成しようとしているもののイメージを添付してください。 – Vancete