2014-10-17 15 views
14

enter image description hereCome modificare le proprietà RectTransform in caratteri [Unità 4.6 beta]

Ciao, sto usando il nuovo sistema di interfaccia utente da Unity 4.6 beta ...

codici diversi provato, guardò la documentazione e cercato in giro ma non riesce a trovare la risposta ...

Ad esempio. Ho un'immagine e voglio cambiare larghezza e altezza durante il runtime.

public GameObject image4; 
image4.GetComponent<RectTransform>().rect.Set(0,0,100, 300); 

che non funziona. E image4.GetComponent(). Rect.y è GET solo così non può essere modificato in fase di runtime.

Ho anche provato:

image4.transform.localScale.y = 15; 

che non funziona neanche.

qual è il modo corretto per modificare le dimensioni in fase di esecuzione? Puoi darmi un esempio in JS o C#, non importa.

+0

Non so perché i setter non funzionano come previsto, ma puoi farlo: image4.GetComponent (). LocalScale = new Vector3 (1,15,1); – vsenik

risposta

31

Un giorno di ricerca. Ho trovato un'estensione che può aiutarci a gestire il nuovo sistema di interfaccia utente. puoi migliorare questa estensione se vuoi.

public static class RectTransformExtensions 
{ 
    public static void SetDefaultScale(this RectTransform trans) { 
     trans.localScale = new Vector3(1, 1, 1); 
    } 
    public static void SetPivotAndAnchors(this RectTransform trans, Vector2 aVec) { 
     trans.pivot = aVec; 
     trans.anchorMin = aVec; 
     trans.anchorMax = aVec; 
    } 

    public static Vector2 GetSize(this RectTransform trans) { 
     return trans.rect.size; 
    } 
    public static float GetWidth(this RectTransform trans) { 
     return trans.rect.width; 
    } 
    public static float GetHeight(this RectTransform trans) { 
     return trans.rect.height; 
    } 

    public static void SetPositionOfPivot(this RectTransform trans, Vector2 newPos) { 
     trans.localPosition = new Vector3(newPos.x, newPos.y, trans.localPosition.z); 
    } 

    public static void SetLeftBottomPosition(this RectTransform trans, Vector2 newPos) { 
     trans.localPosition = new Vector3(newPos.x + (trans.pivot.x * trans.rect.width), newPos.y + (trans.pivot.y * trans.rect.height), trans.localPosition.z); 
    } 
    public static void SetLeftTopPosition(this RectTransform trans, Vector2 newPos) { 
     trans.localPosition = new Vector3(newPos.x + (trans.pivot.x * trans.rect.width), newPos.y - ((1f - trans.pivot.y) * trans.rect.height), trans.localPosition.z); 
    } 
    public static void SetRightBottomPosition(this RectTransform trans, Vector2 newPos) { 
     trans.localPosition = new Vector3(newPos.x - ((1f - trans.pivot.x) * trans.rect.width), newPos.y + (trans.pivot.y * trans.rect.height), trans.localPosition.z); 
    } 
    public static void SetRightTopPosition(this RectTransform trans, Vector2 newPos) { 
     trans.localPosition = new Vector3(newPos.x - ((1f - trans.pivot.x) * trans.rect.width), newPos.y - ((1f - trans.pivot.y) * trans.rect.height), trans.localPosition.z); 
    } 

    public static void SetSize(this RectTransform trans, Vector2 newSize) { 
     Vector2 oldSize = trans.rect.size; 
     Vector2 deltaSize = newSize - oldSize; 
     trans.offsetMin = trans.offsetMin - new Vector2(deltaSize.x * trans.pivot.x, deltaSize.y * trans.pivot.y); 
     trans.offsetMax = trans.offsetMax + new Vector2(deltaSize.x * (1f - trans.pivot.x), deltaSize.y * (1f - trans.pivot.y)); 
    } 
    public static void SetWidth(this RectTransform trans, float newSize) { 
     SetSize(trans, new Vector2(newSize, trans.rect.size.y)); 
    } 
    public static void SetHeight(this RectTransform trans, float newSize) { 
     SetSize(trans, new Vector2(trans.rect.size.x, newSize)); 
    } 
} 

Il codice sorgente che ho trovato da qui: http://orbcreation.com

1

tenta di utilizzare una cosa del genere [in C#]:

... 

    RectTransform rTrans = (RectTransform) transform.GetComponent<RectTransform>(); 

    // set new width and height 

    rTrans.anchoredPosition = new Vector2(15, 200); 

    ... 
3

Quando si cambia genitore (ad esempio dopo Instantiate), le cose si fanno disordinato, ho trovato che ripristinare alcuni parametri mi è stato di grande aiuto (ho passato un po 'di tempo a cercare di capirlo):

this.transform.SetParent(content.transform); 
this.transform.localScale = Vector3.one;    
this.rectTransform.sizeDelta = Vector2.zero; 
this.rectTransform.anchoredPosition = Vector2.zero; 

Speranza che aiuta a qualcun altro :)

+0

grazie, mi ha aiutato molto! –

0

Normalmente non si desidera modificare direttamente quei valori, ancora di più se provengono da un prefabbricato avete già impostato con le coordinate corrette, se si desidera solo per aggiungerlo correttamente in tela (o altro), ma "cambia posizione" fare questo:

GameObject instance; 

void Start() { 
    GameObject canvas = GameObject.Find ("Canvas"); 
    if (canvas != null) { 
     GameObject go = Resources.Load<GameObject>("MyPrefab"); 
     if(go != null){ 
      instance = Instantiate(go); 
      instance.GetComponent<Transform>().SetParent(canvas.GetComponent<Transform>(), false); 
     } 
    } 
} 

Passando false il genitore insieme eviterà il rettangolo trasformare essere cambiato in forme strane quando si crea un'istanza del prefabbricato.

1

La riproduzione di seguito può aiutare: GetComponent.sizeDelta = new Vector (new_size.x, new_size.y);

Ho raggiunto con successo lo zoom in una nuova GUI impostando questa proprietà.

Ecco il mio codice per il ridimensionamento:

void Start() 
{ 
    // Store initial Size and Position; 
    ZoomedOutSize = new Vector2(GetComponent<RectTransform>().rect.width, GetComponent<RectTransform>().rect.height); 
    ZoomedOutPos = new Vector2(GetComponent<RectTransform>().localPosition.x, GetComponent<RectTransform>().localPosition.y); 
} 

void Update() 
{ 
    // Calculate the total delta at runtime cause it depends on parent (yah i know it's not optimal to have new vector ecery Update) 
    ZoomSizeRate = new Vector2(gameObject.GetComponentInParent<ZoomDialog>().MaxSize.x - ZoomedOutSize.x, gameObject.GetComponentInParent<ZoomDialog>().MaxSize.y - ZoomedOutSize.y); 
    ZoomPosRate = -GetComponent<RectTransform>().localPosition; 

    // Zoom is the float with range(0,1) 0 - no Zoom, 1 - Fully Zoom to ParentSize; 
    //Set the size delta and position as Initial + Rate * Zoom 
    GetComponent<RectTransform>().sizeDelta = new Vector2(ZoomedOutSize.x + ZoomSizeRate.x * Zoom, ZoomedOutSize.y + ZoomSizeRate.y * Zoom); 
    GetComponent<RectTransform>().localPosition = new Vector2(ZoomedOutPos.x + ZoomPosRate.x * Zoom, ZoomedOutPos.y + ZoomPosRate.y * Zoom); 
} 
4

Hey amico Basta provare questo per cambiare posizione e la larghezza di un utente gameObject

se si desidera utilizzare un'istanza di un oggetto uso Questo leftButton.GetComponent<RectTransform>().anchoredPosition = new Vector2(-125, -36f); rightButton.GetComponent<RectTransform>().sizeDelta = new Vector2(x, y);

e se vogliono mettere script su un oggetto dell'interfaccia utente quindi provare questo per cambiare altezza e la larghezza

GetComponent<RectTransform>().anchoredPosition = new Vector2(-125, -36f); 
GetComponent<RectTransform>().sizeDelta = new Vector2(x, y) 
+0

Non riesco a vedere la risposta aggiungendo alcun valore aggiuntivo alle risposte già fornite. – Naytzyrhc

+0

dimmi solo cosa vuoi sapere ?? dimmi solo se niente poi benvenuto e ciao – SogekingSenpai

Problemi correlati