You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity角色选择功能修复:修正SkinManager脚本实现预制体皮肤刷新

Unity角色选择功能SkinManager修正方案

以下是修复后的功能代码,解决了原脚本逻辑错误、皮肤配置不更新、跨场景不生效的问题:

1. 角色选择场景SkinManager脚本(挂在选择界面管理对象上)

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class SkinManager : MonoBehaviour
{
    // 选择界面大预览角色的SpriteRenderer
    public SpriteRenderer sr;
    // 选择界面小预览/选中标识的SpriteRenderer
    public SpriteRenderer displaysr;
    // 所有可选皮肤列表,按顺序添加
    public List<Sprite> skins = new List<Sprite>();
    private int selectedSkin = 0;

    public void Start()
    {
        // 读取历史存储的皮肤选择
        if (PlayerPrefs.HasKey("Selected_skin"))
        {
            selectedSkin = PlayerPrefs.GetInt("Selected_skin");
        }
        // 同步皮肤到两个显示组件
        sr.sprite = skins[selectedSkin];
        displaysr.sprite = skins[selectedSkin];
    }

    // 下一个皮肤按钮绑定该方法
    public void NextOption()
    {
        selectedSkin++;
        if (selectedSkin >= skins.Count)
        {
            selectedSkin = 0;
        }
        sr.sprite = skins[selectedSkin];
        displaysr.sprite = skins[selectedSkin];
    }

    // 上一个皮肤按钮绑定该方法
    public void BackOption()
    {
        selectedSkin--;
        if (selectedSkin < 0)
        {
            selectedSkin = skins.Count - 1;
        }
        sr.sprite = skins[selectedSkin];
        displaysr.sprite = skins[selectedSkin];
    }

    // 开始游戏按钮绑定该方法
    public void PlayGame()
    {
        // 存储最新选择的皮肤,强制写入本地
        PlayerPrefs.SetInt("Selected_skin", selectedSkin);
        PlayerPrefs.Save();
        SceneManager.LoadScene("LevelSelection");
    }
}

2. 玩家预制件皮肤加载脚本(挂在玩家prefab上,跨场景自动加载皮肤)

运行时直接修改项目内prefab不会永久生效,需要通过该脚本在玩家生成时自动读取配置切换皮肤:

using System.Collections.Generic;
using UnityEngine;

public class PlayerSkinLoader : MonoBehaviour
{
    // 与SkinManager的skins列表保持完全相同的Sprite和顺序
    public List<Sprite> skins = new List<Sprite>();
    // 玩家自身的SpriteRenderer组件
    public SpriteRenderer playerSr;

    private void Awake()
    {
        // 玩家生成时自动加载选中的皮肤
        if (PlayerPrefs.HasKey("Selected_skin"))
        {
            int selectedSkin = PlayerPrefs.GetInt("Selected_skin");
            if (selectedSkin >= 0 && selectedSkin < skins.Count)
            {
                playerSr.sprite = skins[selectedSkin];
            }
        }
    }
}

使用注意

  • 两个脚本中的skins列表Sprite、顺序必须完全一致,否则会出现选择和加载的皮肤不匹配问题
  • 按照代码注释给所有公共参数赋值,按钮绑定对应方法即可正常使用

内容的提问来源于stack exchange,提问作者Rayan Hilali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:24:03