не могу воссоздать дочернюю игру Объекты единства c # - PullRequest
0 голосов
/ 15 января 2019

Имеется ScrollView с дочерними кнопками и текстовыми объектами, который динамически создает сценарий. Впервые кнопки и текст создаются нормально, но при попытке уничтожить ScrollView и добавить к нему кнопки и текст, они больше не создаются.

if (GameObject.Find("ScrollViewUsers") != null)
    {
        Destroy(GameObject.Find("ScrollViewUsers"));
    }

    GameObject scrollView = Instantiate(GameObject.Find("ScrollViewUsersSample"), GameObject.Find("PanelFindFriends").transform, true);
    scrollView.name = "ScrollViewUsers";
    scrollView.GetComponent<RectTransform>().localPosition = new Vector3(0, -20, 0);
    scrollView.GetComponent<RectTransform>().sizeDelta = new Vector2(GameObject.Find("PanelFindFriends").GetComponent<RectTransform>().sizeDelta.x, GameObject.Find("PanelFindFriends").GetComponent<RectTransform>().sizeDelta.y - 40);
    scrollView.transform.Find("Viewport/ContentUsersSample").name = "ContentUsers";

    Debug.Log("userList.Count=" + userList.Count);
    float _y = 0;
    foreach (KeyValuePair<int, string> user in userList)
    {
        Debug.Log("user=" + user.Value);
        Instantiate(GameObject.Find("TextUser"), GameObject.Find("ContentUsers").transform, true);
        GameObject.Find("TextUser(Clone)").name = "user_" + user.Value;
        GameObject.Find("user_" + user.Value).GetComponent<Text>().text = user.Value;
        GameObject.Find("user_" + user.Value).GetComponent<RectTransform>().localPosition = new Vector3(-25, y, 0);

        Instantiate(GameObject.Find("ButtonAddUser"), GameObject.Find("ContentUsers").transform, true);
        GameObject.Find("ButtonAddUser(Clone)").name = "addUser_" + user.Value;
        GameObject.Find("addUser_" + user.Value).GetComponent<RectTransform>().localPosition = new Vector3(62, y, 0);
        y -= 40;

        _y += (GameObject.Find("user_" + user.Value).GetComponent<RectTransform>().sizeDelta.y + 20);
}

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вот пример необходимого вам

List<string> userList = new List<string> { "User1", "User2", "User3" };

[SerializeField]
private Text TextUserPrefabRef;

[SerializeField]
private Button ButtonAddUserPrefabRef;

[SerializeField]
private GameObject ScrollViewUsersSamplePrefabRef;

[SerializeField]
private Transform PanelFindFriendsRef;

private Transform ContentUsers;

public void CreateNew () 
{
    if (GameObject.Find("ScrollViewUsers") != null)
    {
        Debug.Log("Destroying");
        Destroy(GameObject.Find("ScrollViewUsers"));
    }

    GameObject scrollView = Instantiate(ScrollViewUsersSamplePrefabRef, PanelFindFriendsRef);
    scrollView.name = "ScrollViewUsers";

    ContentUsers = scrollView.transform.Find("Viewport/ContentUsersSample");
    ContentUsers.name = "ContentUsers";

    foreach (string user in userList)
    {
        Debug.Log("user=" + user);
        GameObject newTextUser = Instantiate (TextUserPrefabRef.gameObject, ContentUsers) as GameObject;
        newTextUser.GetComponent<Text>().text = user;

        GameObject newButton = Instantiate (ButtonAddUserPrefabRef.gameObject, ContentUsers);
        newButton.name = "addUser_" + user;
    }   
}

Затем создайте префабы для объектов scrollView, AddUserButton и Text. И назначить их в инспекторе.

0 голосов
/ 15 января 2019

В цикле foreach создайте новую переменную вместо GameObject.Find ().

например:.

var go = Instantiate(GameObject.Find("TextUser"), GameObject.Find("ContentUsers").transform, true);)
go.name = "...";
go.GetComponent<Text>().text = "...";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...