Unity开发视频推荐UI时如何创建图片列表动态切换显示图片
问题原因
报错核心是类型不匹配:你代码中赋值的目标Image1是UnityEngine.UI.Image类型的UI渲染组件,而你从列表中取出的是Texture类型的图片资源,二者不属于同一类对象,无法直接赋值。UI下的Image组件本身不存储图片数据,只负责渲染,需要给它的sprite属性传入对应图片资源才能正常显示。
实现步骤
你现有的列表架构完全可以复用,不需要更换方案,只需要做3处调整即可:
- 调整图片容器的存储类型
UI Image组件可直接识别的图片资源类型是Sprite,把ImageContainer中的存储类型从Texture替换为Sprite即可,修改后代码如下:
[System.Serializable] public class ImageContainer { // 直接在Inspector面板拖入对应视频的缩略图Sprite资源 public List<Sprite> images; }
- 新增推荐位缩略图组件引用
和你之前拖拽赋值Rec1/Rec2/Rec3按钮引用的逻辑一致,在脚本中新增3个公开的Image类型变量,对应3个推荐位的缩略图UI节点,后续在Inspector面板完成拖拽赋值:
// 三个推荐位的缩略图UI组件 public Image Rec1Thumbnail; public Image Rec2Thumbnail; public Image Rec3Thumbnail;
- 同步赋值缩略图
直接在你已经写好的SetRecommendationButtons方法中,和文本赋值逻辑同步完成缩略图赋值即可,不需要单独写额外方法:
public void SetRecommendationButtons(int buttonValue, float sliderValue) { CheckRecommendations(buttonValue, sliderValue); // 原有文本赋值逻辑保留 Rec1.GetComponentInChildren<TextMeshProUGUI>().text = descriptionContainer[recommendedButtonValues[0]].descriptions[(int)recommendedSliderValues[0]]; Rec2.GetComponentInChildren<TextMeshProUGUI>().text = descriptionContainer[recommendedButtonValues[1]].descriptions[(int)recommendedSliderValues[1]]; Rec3.GetComponentInChildren<TextMeshProUGUI>().text = descriptionContainer[recommendedButtonValues[2]].descriptions[(int)recommendedSliderValues[2]]; // 新增缩略图赋值逻辑 Rec1Thumbnail.sprite = ImageContainer[recommendedButtonValues[0]].images[(int)recommendedSliderValues[0]]; Rec2Thumbnail.sprite = ImageContainer[recommendedButtonValues[1]].images[(int)recommendedSliderValues[1]]; Rec3Thumbnail.sprite = ImageContainer[recommendedButtonValues[2]].images[(int)recommendedSliderValues[2]]; }
注意:如果你手头现有的图片资源是Texture格式,不需要重新导入,只需要在Project面板选中对应资源,在Inspector中将
Texture Type修改为Sprite (2D and UI),点击Apply即可转换为UI可用的Sprite资源。
内容的提问来源于stack exchange,提问作者Rooszel
相关产品推荐
相关产品推荐

