Unity代码动态添加UI Image至Canvas,如何设置其居中显示?
解决Unity中Canvas Image组件居中显示的问题
嘿,我来帮你搞定这个Image卡在左下角的问题!其实原因很简单:默认创建的GameObject的RectTransform锚点是左下角((0,0)),所以直接添加后就会固定在那个位置。我们只需要通过代码调整RectTransform的几个关键属性,就能让它乖乖待在Canvas中心啦。
下面是补全并修改后的完整代码,我会标注关键修改点:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class TestController : MonoBehaviour { public GameObject canvas; public Sprite refSprite; // 记得在Inspector面板里给这个变量赋值你的Sprite资源 void Start() { GameObject imgObject = new GameObject("testAAA"); // 第一步:把Image的父物体设为Canvas,第二个参数false很重要,避免继承父物体的Transform干扰 imgObject.transform.SetParent(canvas.transform, false); // 添加Image组件并设置Sprite Image image = imgObject.AddComponent<Image>(); image.sprite = refSprite; // 获取RectTransform组件 RectTransform trans = imgObject.GetComponent<RectTransform>(); // 关键:把锚点设置为Canvas的中心 trans.anchorMin = new Vector2(0.5f, 0.5f); trans.anchorMax = new Vector2(0.5f, 0.5f); // 让Image相对于锚点的偏移量为0,也就是正好在中心位置 trans.anchoredPosition = Vector2.zero; // 可选:设置Image的尺寸,这里用Sprite的原始尺寸,你也可以改成固定值比如new Vector2(200,200) trans.sizeDelta = new Vector2(refSprite.rect.width, refSprite.rect.height); } }
关键逻辑解释:
- 锚点设置:
anchorMin和anchorMax都设为(0.5,0.5),相当于把Image的“锚定基准点”放在了Canvas的正中心。 - 位置偏移:
anchoredPosition设为Vector2.zero,表示Image相对于锚点没有偏移,自然就和Canvas中心重合了。 - 父物体设置:
SetParent的第二个参数传false,可以让Image保持自己的Transform属性,不会被Canvas的缩放、位置等影响。
这样修改后,你运行游戏就能看到Image乖乖显示在Canvas中心啦!
内容的提问来源于stack exchange,提问作者BPS1945
相关产品推荐
相关产品推荐

