问题起因:
我通过代码添加了预制体发现位置不对,看不见了,通过检查器看到x 和y为-115,-351,发现修改pos没有任何作用
![](https://img.haomeiwen.com/i2815884/32f89c54c4e293eb.png)
从网上找到相关修改的代码
https://www.csdn.net/tags/NtTakg1sMzgzNzgtYmxvZwO0O0OO0O0O.html
但是发现并没有效果,我当时走火入魔不认为是修改anchoredPosition3D实现的,
于是我把各种代码都加进去了,而 anchoredPosition3D正确的代码我则放到了前面,后面又一次修改是无效的
![](https://img.haomeiwen.com/i2815884/f4b2e81c233e0f18.png)
结果还是没有作用,
![](https://img.haomeiwen.com/i2815884/559b8ae1b377f878.png)
![](https://img.haomeiwen.com/i2815884/54e8f0d640139c73.png)
anchoredPosition:(-115.00, -351.87, 0.00),pos:(0.00, 0.00, 0.00),offset:(-165.00, -401.87),(-165.00, -401.87),auchor:(0.50, 1.00),(0.50, 1.00)
anchoredPosition1:(0.00, 0.00, 0.00),pos:(93.75, 286.84, 0.00),offset:(-50.00, -50.00),(-50.00, -50.00),auchor:(0.50, 1.00),(0.50, 1.00)
可以看出修改anchorposition会导致 offset,pos等全部发生变化,
所以 总结:
修改anchorPosition就可以实现 位置x y的修改
GameObject newObj = Instantiate(Resources.Load("MyText")) as GameObject;//加载prefab
print("预制体"+newObj);
GameObject gameObjectTemp=GameObject.Find("Canvas/PanelLeft/BottomLeft");
newObj.transform.parent = gameObjectTemp.transform;//
newObj.GetComponent<Text>().text = gameObject.name + "fffffffffffffff";
RectTransform rectTransform= newObj.GetComponent<RectTransform>();
print("anchoredPosition:" + rectTransform.anchoredPosition3D + ",pos:" + rectTransform.position + ",offset:" + rectTransform.offsetMin + "," + rectTransform.offsetMin + ",auchor:" + rectTransform.anchorMin + "," + rectTransform.anchorMax);
rectTransform.anchoredPosition3D= new Vector3(0,0,0);
print("anchoredPosition1:" + rectTransform.anchoredPosition3D + ",pos:" + rectTransform.position + ",offset:" + rectTransform.offsetMin + "," + rectTransform.offsetMin + ",auchor:" + rectTransform.anchorMin + "," + rectTransform.anchorMax);
上面的MyText是预制体是一个text,并且放在Assets/Resources下面
我的需求就是把这个文本添加到 左边面板里面
另外 修改/rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top,0, rectTransform.sizeDelta.y);
可以实现顶部,但是只有这个代码还无法做到居中,
这个预制体目前设置的是顶部居中的,
如果预制体不是顶部的那么就一直在中间显示了。
网友评论