How to debug a scale issue?

醉酒当歌 提交于 2020-02-05 08:26:33

问题


I am working on a store page. The page is filled with panel prefabs. For some reason when it fills the prefabs it is more than doubling the scale size of the prefab. If I drag the prefab into place it works as expected.

I don't have any code in the program targeting scale. I am not sure where it is coming from.

This is the code I am using for the list population.

[System.Serializable]
public class Item
{
    public string itemName;
    public int price;
}

public class ShopScrollList : MonoBehaviour {
    public List<Item> itemList;
    public Transform contentPanel;
    public Text storeDisplayText;
    public SimpleObjectPool buttonObjectPool;

    void Start () {
        RefreshDisplay();
    }


    private void RefreshDisplay()
    {
        AddButtons();
    }

    private void AddButtons()
    {
        for (int i = 0; i < itemList.Count; i++)
        {
            Item item = itemList[i];
            GameObject newButton = buttonObjectPool.GetObject();
            newButton.transform.SetParent(contentPanel);

            ButtonDetails buttonDetails = newButton.GetComponent<ButtonDetails>();
            buttonDetails.Setup(item, this);
        }
    }
}

SimpleObjectPool Script:

// A very simple object pooling class
public class SimpleObjectPool : MonoBehaviour
{
    // the prefab that this object pool returns instances of
    public GameObject prefab;
    // collection of currently inactive instances of the prefab
    private Stack<GameObject> inactiveInstances = new Stack<GameObject>();

    // Returns an instance of the prefab
    public GameObject GetObject()
    {
        GameObject spawnedGameObject;

        // if there is an inactive instance of the prefab ready to return, return that
        if (inactiveInstances.Count > 0)
        {
            // remove the instance from teh collection of inactive instances
            spawnedGameObject = inactiveInstances.Pop();
        }
        // otherwise, create a new instance
        else
        {
            spawnedGameObject = (GameObject)GameObject.Instantiate(prefab);

            // add the PooledObject component to the prefab so we know it came from this pool
            PooledObject pooledObject = spawnedGameObject.AddComponent<PooledObject>();
            pooledObject.pool = this;
        }

        // put the instance in the root of the scene and enable it
        spawnedGameObject.transform.SetParent(null);
        spawnedGameObject.SetActive(true);

        // return a reference to the instance
        return spawnedGameObject;
    }

    // Return an instance of the prefab to the pool
    public void ReturnObject(GameObject toReturn)
    {
        PooledObject pooledObject = toReturn.GetComponent<PooledObject>();

        // if the instance came from this pool, return it to the pool
        if (pooledObject != null && pooledObject.pool == this)
        {
            // make the instance a child of this and disable it
            toReturn.transform.SetParent(transform);
            toReturn.SetActive(false);

            // add the instance to the collection of inactive instances
            inactiveInstances.Push(toReturn);
        }
        // otherwise, just destroy it
        else
        {
            Debug.LogWarning(toReturn.name + " was returned to a pool it wasn't spawned from! Destroying.");
            Destroy(toReturn);
        }
    }
}

// a component that simply identifies the pool that a GameObject came from
public class PooledObject : MonoBehaviour
{
    public SimpleObjectPool pool;
}

How can I debug to figure out where the issue is coming from. There is only one thing in here affecting the transform and that shouldn't adjust the scale.


回答1:


The answer is:

newButton.transform.SetParent(contentPanel, false);

https://docs.unity3d.com/ScriptReference/Transform.SetParent.html

//this makes the player keep its local orientation rather than its global orientation. player.transform.SetParent(newParent, false);



来源:https://stackoverflow.com/questions/40621184/how-to-debug-a-scale-issue

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!