为了使我的角色选择起作用,我需要统一刷新角色预制件

Posted

技术标签:

【中文标题】为了使我的角色选择起作用,我需要统一刷新角色预制件【英文标题】: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的精灵不想输出选中的角色 【参考方案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 我会尽快发送我目前不在家,但今天我开车回去,应该能够完成一个工作示例

以上是关于为了使我的角色选择起作用,我需要统一刷新角色预制件的主要内容,如果未能解决你的问题,请参考以下文章

如何渲染组件取决于角色

将游戏对象/角色从搅拌机更新到统一

如何统一显示/隐藏角色

Spring Security 角色不起作用

如何让jsp中的spring安全角色层次结构起作用?

Laravel 使用选择框附加角色