Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在unity中设置首选项值,在android中无法获取_Android_Unity3d_Unityscript_Unity5 - Fatal编程技术网

在unity中设置首选项值,在android中无法获取

在unity中设置首选项值,在android中无法获取,android,unity3d,unityscript,unity5,Android,Unity3d,Unityscript,Unity5,我使用下面的代码在unity中设置首选项值 rightJointPos = rightJoint.localPosition; PlayerPrefs.SetFloat ("rigX", rightJointPos.x); PlayerPrefs.SetFloat ("rigY", rightJointPos.y); PlayerPrefs.SetFloat ("rigZ", rightJointPos.z); PlayerPre

我使用下面的代码在unity中设置首选项值

rightJointPos = rightJoint.localPosition;
        PlayerPrefs.SetFloat ("rigX", rightJointPos.x);
        PlayerPrefs.SetFloat ("rigY", rightJointPos.y);
        PlayerPrefs.SetFloat ("rigZ", rightJointPos.z);

        PlayerPrefs.Save ();
我使用下面的代码在android中获取值

SharedPreferences settings = getApplicationContext().getSharedPreferences(getApplicationContext().getPackageName(), Context.MODE_PRIVATE);
        float rigX=settings.getFloat("rigX", 0.0f);
        float rigY=settings.getFloat("rigY", 0.0f);
        float rigZ=settings.getFloat("rigZ", 0.0f);



        Toast.makeText(getApplicationContext(),"start   11   "+rigX+ ":"+rigY+":"+rigZ, 400).show();
我在toast中打印这个值。我总是得到0.0的值而不是实际值

如何在android中获得该值? 请帮我解决这个问题。这个代码缺少什么


提前感谢

Android的
SharedReferences
和Unity的
PlayerPrefs
是完全不同的数据存储API,具有不同的实现,并且两者不可互换

如果使用
PlayerPrefs.SetFloat
保存,则必须使用
PlayerPrefs.GetFloat

float rigX = PlayerPrefs.GetFloat("rigX", 0.0f);
float rigY = PlayerPrefs.GetFloat("rigY", 0.0f);
float rigZ = PlayerPrefs.GetFloat("rigZ", 0.0f);
如果从Java进行此调用,并且需要读取
PlayerPrefs
,则必须使用
UnityPlayer.UnitySendMessage
获取这些
PlayerPrefs
值。由于
UnityPlayer.UnitySendMessage
无法返回值,因此需要在其上加一个包装器

C#

class SettingsReader : MonoBehaviour
{
    //Sends the data from PlayerPrefs to the receiveResult function in Java
    void sendResultToJava(float value)
    {
        AndroidJavaClass javaPlugin = new  AndroidJavaClass("com.company.product.MyPlugin");
        javaPlugin.Call("receiveResult", new object[] { value.ToString() } );
    }

    //Called from Java to get the saved PlayerPrefs
    void getValue(string key)
    {
        float value = PlayerPrefs.GetFloat(key) //Get the saved value from key
        sendResultToJava(value); //Send the value to Java
    }
}
Java

class SettingsReader : MonoBehaviour
{
    //Sends the data from PlayerPrefs to the receiveResult function in Java
    void sendResultToJava(float value)
    {
        AndroidJavaClass javaPlugin = new  AndroidJavaClass("com.company.product.MyPlugin");
        javaPlugin.Call("receiveResult", new object[] { value.ToString() } );
    }

    //Called from Java to get the saved PlayerPrefs
    void getValue(string key)
    {
        float value = PlayerPrefs.GetFloat(key) //Get the saved value from key
        sendResultToJava(value); //Send the value to Java
    }
}
软件包:com.company.product.MyPlugin

Java端的用法:

float rigX = getSavedValue("rigX");
float rigY = getSavedValue("rigY");
float rigZ = getSavedValue("rigZ");

嘿,你试过我留下的答案了吗?它有用吗?我试过了,但没有得到价值