viviendas venta prefabricadas precios made chinas china casas argentina c# user-interface unity3d

c# - prefabricadas - venta de casas chinas en argentina



Las prefabricadas de UI se instancian debajo del lienzo (1)

Supongo que obtendrás algo como esto:

Arreglas esto por pasar false al segundo parámetro de la función SetParent . Al hacer esto, hará que la Transformación mantenga su orientación local en lugar de su orientación global.

Simplemente reemplace:

newHealthContainerTransform.SetParent(healthBar);

con:

newHealthContainerTransform.SetParent(healthBar, false)

También puede establecer el Objeto padre y hacer que la Transformación del Objeto instanciado mantenga su orientación local en la función Instantiate . La única desventaja de esto es que ahora tiene que establecer la posición del objeto en otra línea de código en lugar de la función Instantiate como antes.

Transform newHealthContainerTransform = Instantiate(healthWrapperObject, healthBar, false).transform; newHealthContainerTransform.GetComponent<RectTransform>().anchoredPosition3D = new Vector2(x, y);

Al mover un objeto UI, debe modificar RectTransform variables RectTransform lugar de las variables Transform .

A continuación hay otras variables útiles que determinan dónde colocar la IU:

Estos son anchorMax , anchorMax , anchorMax y anchorMin que se pueden modificar con:

yourUIObj.GetComponent<RectTransform>().anchoredPosition = ... yourUIObj.GetComponent<RectTransform>().anchoredPosition3D = ... yourUIObj.GetComponent<RectTransform>().anchorMax = ... yourUIObj.GetComponent<RectTransform>().anchorMin = ...

Estoy tratando de copiar el sistema de salud de Zelda. El código se ve muy bien y funciona bien.

Pero los contenedores de corazón están mal colocados. Se crean instancias debajo del lienzo.

Este es el código importante, los contenedores de corazón son correctos, solo en la posición incorrecta.

El cálculo de xey es correcto, pero en el lienzo no lo es.

private Transform healthBar = GameObject.FindGameObjectWithTag("HealthController").transform; // container for the heartContainers private GameObject healthWrapperObject = Resources.Load("HealthContainer") as GameObject; // the backgroundImage and parent of the heart private List<Image> healthContainers = new List<Image>(); // list of hearts for later usages private int maxHealth = 6; private int currentHealth; private int healthPerHealthContainer = 4; // 4 lifepoints per heart private int healthContainersPerRow = 5; // 5 hearts per row private int healthContainerStartPositionX = 0; // Healthbar starts at 0 on x private int healthContainerStartPositionY = 0; // Healthbar starts at 0 on y private int healthContainerSpacingX = 10; // horizontal spacing private int healthContainerSpacingY = -10; // vertical spacing private void Start() { currentHealth = maxHealth; InitializeHealthBar(); } public void InitializeHealthBar() { int neededHealthContainers = maxHealth % healthPerHealthContainer == 0 ? maxHealth / healthPerHealthContainer : maxHealth / healthPerHealthContainer + 1; // Calculate the needed container count int counter = 0; // counts the hearts per row int x = healthContainerStartPositionX; // horizontal position of the heartContainer int y = healthContainerStartPositionY; // vertical position of the heartContainer for (int i = 0; i < neededHealthContainers; i++) { counter++; if (counter >= healthContainersPerRow) // start a new line after 5 hearts per row { x = healthContainerStartPositionX; // move back to the left y += healthContainerSpacingY; // go for the next line counter = 0; // reset the counter } else x += healthContainerSpacingX; // place the new container right next to the previous Transform newHealthContainerTransform = Instantiate(healthWrapperObject, new Vector2(x, y), healthWrapperObject.transform.rotation).transform; // create the healthContainer parent / backgroundImage newHealthContainerTransform.SetParent(healthBar); // take the container and make it a child of the healthBar healthContainers.Add(newHealthContainerTransform.GetChild(0).GetComponent<Image>()); // get the heart of the heartContainer and add it to the heartList } }

Agregué la configuración de transformación para healthBar, healthContainer / backgroundImage y heart ("healthfill").

En los 3 elementos presioné Strg + Alt y Shift para anclarlos.

El corazóncontainter debe agregarse a la barra de estado, el corazón es un elemento secundario del corazón y está configurado para estirar (debe ser del mismo tamaño que su elemento primario)

¿Por qué los objetos prefabricados de UI se crean instancias debajo del lienzo?