柰茶 2024-05-02 22:48 采纳率: 50%
浏览 3

能否代码控制选择Sprite的使用

想实现聊天对话里,每一个对话选用不同表情的Sprite,问题是,在不挂载Sprite到组件的情况下,怎么用代码控制选择不同的Sprite呢?

img

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-02 22:48
    关注

    引自免费微信小程序:皆我百晓生

    在Unity中,如果你想在不将Sprite挂载到游戏对象(GameObject)上的情况下,通过代码动态改变UI中的Image组件显示的Sprite,你需要先获取到这个Image组件,然后设置其sprite属性。这里是一个详细的步骤和示例代码:

    首先,确保你有一个脚本挂载在了含有Image组件的游戏物体上。在这个脚本中,你可以定义一个变量来存储要显示的Sprite引用,以及一个方法来根据需要切换Sprite。

    using UnityEngine;
    using UnityEngine.UI;
    
    public class ChatAvatarController : MonoBehaviour
    {
        [SerializeField] private Image chatAvatar; // 通过Inspector面板拖拽Image到此处
        private Sprite currentSprite;
        
        public void SetChatAvatar(Sprite newSprite)
        {
            if (chatAvatar != null && newSprite != null)
            {
                currentSprite = newSprite;
                chatAvatar.sprite = currentSprite;
            }
        }
    
        // 如果你想在特定条件下更换精灵,可以在这里添加逻辑
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                // 更换为另一个Sprite,例如从一个数组中随机选取
                var spritesList = GetSpritesFromSomewhere(); // 假设这是从某个地方获取的Sprite列表
                if (spritesList.Count > 0)
                {
                    var randomIndex = Random.Range(0, spritesList.Count);
                    SetChatAvatar(spritesList[randomIndex]);
                }
            }
        }
    
        // 这个方法用于从某个数据源获取Sprite列表
        private List<Sprite> GetSpritesFromSomewhere()
        {
            // 在这里替换为实际获取Sprite的方法,例如从Resources目录加载、数据库查询等
            List<Sprite> sprites = new List<Sprite>();
            sprites.Add(Resources.Load<Sprite>("Sprite1"));
            sprites.Add(Resources.Load<Sprite>("Sprite2"));
            sprites.Add(Resources.Load<Sprite>("Sprite3")); // 添加更多Sprite...
            return sprites;
        }
    }
    

    这段代码中,我们创建了一个名为ChatAvatarController的脚本,它包含一个私有变量currentSprite来保存当前显示的Sprite,一个公共方法SetChatAvatar来设置新的Sprite,以及一个Update函数来演示如何在运行时触发 sprite 的更改。

    注意:为了正确工作,你需要在Unity编辑器中,将Image组件拖拽到[SerializeField] private Image chatAvatar;字段上,这样Unity会自动填充这个字段。如果你的项目结构不同,可能需要调整代码以适应你的需求。

    此外,这个例子假设你已经有了多个预先准备好的Sprite资源,并且它们的路径是已知的(例如在Resources文件夹中)。你可以根据实际情况修改GetSpritesFromSomewhere方法来从其他位置获取Sprite资源。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月2日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表