Tworzenie dynamicznych przyciskow pod soba

0

Chce stworzyc przyciski pod soba w rzedzie. Przyciski sie tworza ale na sobie. Teraz pytanie jak rozwiazac tworzenie ich pod soba. Probowalem kilku sposobow ale nic mi nie przychodzi do glowy.

//Vector3 pos = buttonA.transform.position;
            //pos.X -= 10f;
            //buttonA.transform.position = pos;
            Vector3 temp = new Vector3(0,-50f, 0);
            roomItemPrefab.transform.position -= temp;
            RoomItem newRoom = Instantiate(roomItemPrefab, contentObject);
           
           // Vector3 temp = new Vector3(7.0f, 0, 0);
           // contentObject.transform.position -= temp;
            //roomItemPrefab.ransform.position = pos;//
            newRoom.SetRoomName(room.Name);
            Debug.Log(room.Name.ToString());
            roomItemList.Add(newRoom);
3

Masz kilka możliwości, m. in.:

  1. Jeśli używasz UGUI, to możesz skorzystać z gotowych mechanizmów:
    https://docs.unity3d.com/Packages/[email protected]/manual/script-VerticalLayoutGroup.html

  2. Możesz też po utworzeniu wszystkich przycisków, odpalić własny algorytm, który poustawia przyciski z listy w odpowiednich odstępach.

  3. Albo poustawiaj wszystkie przyciski w edytorze, a potem przy inicjowaniu sceny/prefaba będziesz kasował nadmiarowe.


Twój kod zmienia pole w prefabie. Lepiej tak nie robić.
Użyj tej wersji Instantiate, żeby ustawiać pozycję przycisku zaraz po utworzeniu:

Instantiate(T original, Vector3 position, Quaternion rotation, Transform parent); 

Np. tak:

  Vector3 currentPos = new Vector3(0.0f, 100.0f, 0.0f); // pozycja pierwszego przycisku
  
  for (...)
  {
    RoomItem newRoom = Instantiate(roomItemPrefab, currentPos, Quaternion.identity, contentObject);

    newRoom.SetRoomName(room.Name);
    Debug.Log(room.Name.ToString());
    roomItemList.Add(newRoom);
    
    currentPos.y -= 50.0f; // następny przycisk będzie o 50 niżej
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1