无法在运行时以正确对齐的方式在面板上实例化对象
Can't instantiate object on panel with proper alignment at runtime
我正在尝试在运行时将 sprite 渲染器从左到右绘制到面板上。我已经尝试在将面板设置为父级之前和之后设置位置,但似乎无法正常工作。对象在面板中间、屏幕中间或屏幕外的某处生成。我想我只是不理解坐标或其他东西之间的基础变化。
到目前为止,这是我的代码:
public class LoadPanel : MonoBehaviour {
public List<GameObject> spriteRendererList = new List<GameObject>();
public GameObject spritePanel;
void Start () {
Sprite[] spriteArray = Resources.LoadAll<Sprite>("sprites");
Vector3 panelPos = spritePanel.transform.position;
RectTransform panelRT = spritePanel.GetComponent<RectTransform>();
float panelWidth = panelRT.rect.width;
for (int i = 0; i < spriteArray.Length;; i++)
{
Vector3 panelItemPos = new Vector3(panelPos.x + i * 5, panelPos.y, 0);
Instantiate(spriteRendererList[i], panelItemPos, Quaternion.identity);
spriteRendererList[i].transform.SetParent(spritePanel.transform);
spriteRendererList[i].transform.position = panelPos + new Vector3((panelPos.x-panelWidth)/2 + i*10,0,0);
}
}
任何人都可以帮我解决我所缺少的吗?
谢谢!
我通过使用 getWorldCorners()
函数确定面板的正确位置和 width/length 来解决这个问题。仍然不确定为什么以前的方法不起作用,但 getWorldCorners
应该可以解决这个问题。
我正在尝试在运行时将 sprite 渲染器从左到右绘制到面板上。我已经尝试在将面板设置为父级之前和之后设置位置,但似乎无法正常工作。对象在面板中间、屏幕中间或屏幕外的某处生成。我想我只是不理解坐标或其他东西之间的基础变化。
到目前为止,这是我的代码:
public class LoadPanel : MonoBehaviour {
public List<GameObject> spriteRendererList = new List<GameObject>();
public GameObject spritePanel;
void Start () {
Sprite[] spriteArray = Resources.LoadAll<Sprite>("sprites");
Vector3 panelPos = spritePanel.transform.position;
RectTransform panelRT = spritePanel.GetComponent<RectTransform>();
float panelWidth = panelRT.rect.width;
for (int i = 0; i < spriteArray.Length;; i++)
{
Vector3 panelItemPos = new Vector3(panelPos.x + i * 5, panelPos.y, 0);
Instantiate(spriteRendererList[i], panelItemPos, Quaternion.identity);
spriteRendererList[i].transform.SetParent(spritePanel.transform);
spriteRendererList[i].transform.position = panelPos + new Vector3((panelPos.x-panelWidth)/2 + i*10,0,0);
}
}
任何人都可以帮我解决我所缺少的吗?
谢谢!
我通过使用 getWorldCorners()
函数确定面板的正确位置和 width/length 来解决这个问题。仍然不确定为什么以前的方法不起作用,但 getWorldCorners
应该可以解决这个问题。