En este momento estás viendo Cambiar la posición de RectTransform de la interfaz de usuario

 – Unity

Cambiar la posición de RectTransform de la interfaz de usuario – Unity

Cambiar la posición de RectTransform de la interfaz de usuario

– UnityAssets3Free

hola , soy Daniel y para hoy os traigo
esta pregunta

tengo estas lineas:

GameObject bp = Instantiate(MyPrefab);
bp.transform.SetParent(GameObject.FindGameObjectWithTag("ContentFactory").transform);
bp.transform.localPosition = new Vector3(0, 0, 0);

Sí, acabo de instanciar un prefabricado, configuré un padre y quiero cambiar la posición.

Mi problema es que la función SetParent establecer una posición fija para mi bp GameObject, y después de eso no sé cómo cambiar esa posición. La última línea no cambia nada… Lo mismo con .position.

¿Cómo puedo cambiar la posición de bp ? Gracias !

Para editar:

Inspector de fábrica de contenido:

Inspector de un bp:

Jerarquía (el contenido en azul es ContentFactory):

2 respuestas 2

Usando transform.localPosition lo usará en posición relativa. Si desea cambiar la posición en el espacio mundial, debe usar transform.position.

GameObject bp = Instantiate(MyPrefab);
bp.transform.SetParent(GameObject.FindGameObjectWithTag("ContentFactory").transform);
bp.transform.position = new Vector3(0, 0, 0);

PARA EDITAR:

Este es un objeto de interfaz de usuario con un RectTransform. No deberías moverlo con transform.position.

Debe moverse con:

bp.GetComponent<RectTransform>().anchoredPosition = ...

o

bp.GetComponent<RectTransform>().anchoredPosition3D = ...

Tenga en cuenta que hay otras cosas que juegan un papel cuando se usa RectTransform.

Eso incluye anchorMax y anchorMin que se puede modificar con:

bp.GetComponent<RectTransform>().anchorMax = ...
bp.GetComponent<RectTransform>().anchorMin = ...

Voy a proporcionar una respuesta diferente a la que dio el programador, solo porque así es como manejo mis ScrollViews dinámicamente poblados con el nuevo sistema de interfaz de usuario. tendre que jugar a ver si lo uso RectTransform.anchoredPosition en cambio, funciona mejor o no.

Configuré los valores min:max del ancla en (0,1):(0,1) para que los botones (imágenes, texto, lo que sea) traten la esquina superior izquierda de la vista de desplazamiento como el origen. Así que configuré el pivote para que fuera (0,1) también, para que la esquina superior izquierda del botón sea el origen (y luego estos valores están integrados en el prefabricado: nunca más necesito jugar con ellos). Esto me permite establecer la posición para (0,0,0) y colóquelo donde quiero que esté, aunque generalmente los empujaré hacia la derecha y hacia abajo unos pocos píxeles para que se vea bien, pero todos los elementos obtienen las mismas compensaciones planas.

Después en mi código puedo usar .localPosition de una manera que permita que estos valores se alineen con el lugar donde espero que se coloque mi objeto, teniendo en cuenta que se deben agregar nuevos elementos debajo de los anteriores, por lo que el valor Y de cada botón será negativo después del primero . Este desplazamiento será igual a la altura del elemento (visible en el Inspector) más algunos píxeles para el relleno.

Finalmente, siempre me aseguro de llamar SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, totalHeight) en RectTransform del contenido de ScrollView para actualizar las barras de desplazamiento a los valores apropiados y, si es necesario, para restablecer la propia posición de la transformación de contenido a (0,0,0) para que ruede hacia arriba. totalHeight es efectivamente la posición Y (positiva) del siguiente elemento que se colocaría, más otra cantidad de búfer plano (el mismo valor utilizado para compensar las cosas superiores) nuevamente, por lo que se ve bien.

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

sin mas,hasta la proxima

Deja una respuesta