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
相关产品推荐
相关产品推荐

