【问题标题】:How to reference a texture with a string?如何用字符串引用纹理?
【发布时间】:2016-06-11 23:09:10
【问题描述】:

我已将 texture2 设置为 PlayerPrefs 中的新“纹理”,如下所示:

PlayerPrefs.SetString("texture","texture2")

但是我怎样才能打开以下脚本的字符串:

PlayerPrefs.GetString("texture")

进入:

mainTexture = PlayerPrefs.GetString("texture")

所以它会将“texture2”变成纹理:

mainTexture = texture2

我没有使用变量,因为我希望保存(和加载)所选纹理。提前致谢!任何帮助表示赞赏! :)

【问题讨论】:

    标签: unity3d textures texture2d


    【解决方案1】:

    通过知道它的路径来加载纹理是这样的

    string texture = "Assets/Resources/abc.png";
    Texture2D inputTexture = (Texture2D)Resources.LoadAssetAtPath(texture, typeof(Texture2D));
    

    但这不是你要找的 答案是根据这些问题thisthis
    不要将字符串转换为纹理,如果它为真,则将纹理设置为 tex1,如果为假,则将其设置为 tex2

     textureBool=Convert.ToBoolean(PlayerPrefs.GetInt("sound")) ;
     if(textureBool)                      //when it is true it means it is mute
         mainTexture=texture2;
      else                                 //when it is false it means the speaker is on
        mainTexture=texture2;
    

    【讨论】:

    • 您好!好的,您已经看到了我的脚本,但我究竟应该在哪里添加您的脚本?对不起,我很困惑。顺便说一句,感谢您回答我所有的问题并帮助我! :)
    【解决方案2】:

    我想通了:

    我将 PlayerPrefs 更改为:

    PlayerPrefs.SetString("tex","texture2")
    

    又为纹理1制作了一个。

    然后,我做了一个叫做 MuteCheck 的函数,我在里面放了这个:

    public void MuteCheck()
    {
        texture = PlayerPrefs.GetString ("tex");
    
        if (texture == "texture2") 
        {
            textureBool = false;
        }
        else if (texture == "texture1")
        {
            textureBool = true;
        }
    }
    

    在那之后我疯狂的更新功能是这样的:

     void Update()
    {
        if(textureBool == false)
        {
            AudioListener.pause = true;
            mainTexture = Texture2;
        }
        else if(textureBool == true)
        {
            AudioListener.pause = false;
            mainTexture = Texture1;
        }
    }
    

    现在它可以完美运行了! :)

    【讨论】:

    • 使用 PlayerPrefs.Save() 如果你正在为 android 确保数据保存,如果它是 pc 则不需要
    • 所以我应该使用 PlayerPrefs.Save 而不是 PlayerPrefs.SetString?还是只留下字符串并在其下方添加“PlayerPrefs.Save”?
    • 不,在改变场景之前使用 PlayerPrefs.Save() 不要改变任何东西
    • 所以,你测试了这个,没有问题
    • 你的意思是我说'Application.Loadlevel(scene1);' a我还必须写'PlayerPrefs.Save();?我还没有测试它,我现在得走了,几个小时后我会测试它。顺便说一句,昨天我在没有 .Save 的情况下尝试了它,并且数据只是按原样保存了。
    猜你喜欢
    • 2019-10-24
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多