【问题标题】:For my character selection to work I need to refresh the character prefab in unity为了使我的角色选择起作用,我需要统一刷新角色预制件
【发布时间】:2021-12-23 13:25:30
【问题描述】:

我的角色选择脚本是为了改变玩家预制件。为了访问它,我使用这个脚本来改变玩家精灵。


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

public class SkinManager : MonoBehaviour
{

    public SpriteRenderer sr;
    public SpriteRenderer displaysr;
    public List<Sprite> skins = new List<Sprite>();
    private int selectedskin = 0;
    public GameObject playerskin;








    public void Start()
    {
        
        if (PlayerPrefs.HasKey("Selected_skin"))
        {
            
            selectedskin = PlayerPrefs.GetInt("Selected_skin");
            sr.sprite = skins[selectedskin];
        }
       
        sr.sprite = skins[selectedskin];

        sr.sprite = displaysr.sprite;

    }

    public void NextOption()
    {
        selectedskin = selectedskin + 1;

        if (selectedskin == skins.Count)
        {
            selectedskin = 0;

        }
        sr.sprite = skins[selectedskin];
        displaysr.sprite = skins[selectedskin];
    }



    public void Update()
    {

    }




    public void BackOption()
    {
        selectedskin = selectedskin - 1;
        if (selectedskin < 0)
        {
            selectedskin = skins.Count - 1;
        }
        sr.sprite = skins[selectedskin];
        displaysr.sprite = skins[selectedskin];
    }






    public void PlayGame()
    {
        if (PlayerPrefs.HasKey("Selected_skin") == false)
        {
            PlayerPrefs.SetInt("Selected_skin", selectedskin);
        }




        SceneManager.LoadScene("LevelSelection");

    }
}

如果你们中的任何人可以帮助我,那将是一个非常好的帮助。请给我另一个脚本版本

【问题讨论】:

  • 那么问题/问题到底是什么?
  • 所以playerprefab的精灵不想输出选中的角色

标签: c# unity3d 3d 2d game-engine


【解决方案1】:

假设你的播放器是一个 DontDestroyOnLoad 对象,并且从看起来你的播放器有一个完整的纹理我会这样做:

//Assuming SkinManager is on the Player object (I left out the default using tags)
using UnityEngine.UI;

public SkinManager : MonoBehavior
{
    //In this example skins[0] is the default skin
    public List<Sprite> skins;
    public SpriteRenderer sr;
    int selectedSkin;

    void Start()
    {
        sr.sprite = skins[0];
    }

    //As this is probably for a button I made it public
    public void NextOption()
    {
        //Check if we have reached the maximum BEFORE(your previous error) and if so reset
        if(selectedSkin == skins.Count - 1/*-1 due to the fact the total number is returned not the last index*/)
            selectedSkin = 0;
        else
            selectedSkin++;
        sr.sprite = skins[selectedSkin];
    }

    public void PreviousOption()
    {
        if(selectedSkin == 0)
            selectedSkin = skins.Count - 1;
        else
            selectedSkin--;
        sr.sprite = skins[selectedSkin];
    }

}

【讨论】:

  • 我试过了,但还是不行,你能不能给我一个很好的教程,它的目的是改变主要的玩家精灵?
  • @RayanHilali 很抱歉回答迟了,但我在 Unity 以外的项目上工作了一段时间,但我可以研究一个应该可行的解决方案
  • 非常感谢,完成后能把代码发给我吗?我的电子邮件是:rayan.hilali@gmail.com
  • @RayanHilali 我会尽快发送我目前不在家,但今天我开车回去,应该能够完成一个工作示例
猜你喜欢
  • 2019-11-16
  • 2013-05-10
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
相关资源
最近更新 更多