简书链接:关于代码添加ui控件代码修改recttransform的问题探索
文章字数:517,阅读全文大约需要2分钟
问题起因:
我通过代码添加了预制体发现位置不对,看不见了,通过检查器看到x 和y为-115,-351,发现修改pos没有任何作用
![U7JZ{0OM61W`J_5M7DKVC3.png](https://upload-images.jianshu.io/upload_images/2815884-32f89c54c4e293eb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
从网上找到相关修改的代码
https://www.csdn.net/tags/NtTakg1sMzgzNzgtYmxvZwO0O0OO0O0O.html
但是发现并没有效果,我当时走火入魔不认为是修改anchoredPosition3D实现的,
于是我把各种代码都加进去了,而 anchoredPosition3D正确的代码我则放到了前面,后面又一次修改是无效的
![4E)S9MB0
XO4KROL38_8)2W.png](https://upload-images.jianshu.io/upload_images/2815884-f4b2e81c233e0f18.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
结果还是没有作用,

image.png

image.png

1
2
3
4
5
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的修改

1
2
3
4
5
6
7
8
9
10
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);
可以实现顶部,但是只有这个代码还无法做到居中,

这个预制体目前设置的是顶部居中的,
如果预制体不是顶部的那么就一直在中间显示了。