簡體   English   中英

為了使我的角色選擇起作用,我需要統一刷新角色預制件

[英]For my character selection to work I need to refresh the character prefab in unity

我的角色選擇腳本旨在更改播放器預制件。 為了訪問它,我使用了這個腳本來改變玩家精靈。


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");

    }
}

如果你們中的任何人可以幫助我,那將是一個非常好的幫助。 請給我另一個腳本版本

假設你的播放器是一個 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];
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM