2016-12-30 83 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?

如果您因爲某些原因將橫幅放置在-320處,則在原始分辨率下它可能會按預期工作,但是如果您已激活Canvas Resizer,則在其他分辨率下它將被移動,因爲未放置在角落所有。

+0

問題是橫幅已經結束。我認爲我將不得不根據文本的大小重新定位它。 –

+0

是的,但是將部分標語放在屏幕外面是什麼感覺? 您可以將內容大小裝配工添加到您的文本,然後將圖像背景作爲一個孩子,然後將它適合文本大小。 請附上你有什麼和你想要達到什麼樣的形象,所以我可以幫你輕鬆。 – Vancete