Bonjour, j'utilise le nouveau système d'interface utilisateur d'Unity 4.6 beta ...
J'ai essayé différents codes, jeté un coup d'œil à la documentation et cherché, mais je ne trouve pas la réponse…
Par exemple. J'ai une image et je souhaite modifier la largeur et la hauteur pendant l'exécution.
public GameObject image4;
image4.GetComponent<RectTransform>().rect.Set(0,0,100, 300);
qui ne fonctionne pas. Et image4.GetComponent (). Rect.y est GET seulement et ne peut donc pas être modifié au moment de l'exécution.
J'ai aussi essayé:
image4.transform.localScale.y = 15;
qui ne fonctionne pas non plus.
quelle est la bonne façon de changer la taille au moment de l'exécution? Vous pouvez me donner un exemple en JS ou en C #, peu importe.
Un jour, à la recherche de ……., J'ai trouvé une extension qui peut nous aider à gérer le nouveau système d'interface utilisateur …… .peut améliorer cette extension si vous le souhaitez.
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));
}
}
Le code source que j'ai trouvé à partir d'ici: http://orbcreation.com
Hey Friend, essayez ceci pour changer la position et la largeur d'une interface utilisateur gameObject
si vous voulez utiliser une instance d'objet utilisez This
leftButton.GetComponent<RectTransform>().anchoredPosition = new Vector2(-125, -36f);
rightButton.GetComponent<RectTransform>().sizeDelta = new Vector2(x, y);
Et si vous voulez mettre un script sur un objet d'interface utilisateur, essayez ceci pour changer la hauteur et la largeur
GetComponent<RectTransform>().anchoredPosition = new Vector2(-125, -36f);
GetComponent<RectTransform>().sizeDelta = new Vector2(x, y)
Lorsque je change de parent (par exemple après Instantiate), les choses se compliquent, je trouve que réinitialiser quelques paramètres m'a vraiment aidé (j'ai passé un peu de temps à essayer de comprendre cela):
this.transform.SetParent(content.transform);
this.transform.localScale = Vector3.one;
this.rectTransform.sizeDelta = Vector2.zero;
this.rectTransform.anchoredPosition = Vector2.zero;
J'espère que ça aide quelqu'un d'autre :)
Jouer avec les éléments suivants peut aider: GetComponent.sizeDelta = new Vector (new_size.x, new_size.y);
J'ai réussi à agrandir la nouvelle interface graphique en définissant cette propriété.
Voici mon propre code pour la mise à l'échelle:
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);
}
essayez d'utiliser quelque chose comme ça [en C #]:
...
RectTransform rTrans = (RectTransform) transform.GetComponent<RectTransform>();
// set new width and height
rTrans.anchoredPosition = new Vector2(15, 200);
...
Normalement, vous ne voulez pas modifier directement ces valeurs, encore plus si elles proviennent d’un préfabriqué que vous avez déjà configuré avec les bons coordonnées, si vous voulez juste l’ajouter correctement sous canvas (ou autre), ce:
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);
}
}
}
Passer false
sur le parent du set évitera que la transformation rect ne soit changée sous des formes étranges lors de l'instanciation du préfabriqué.