- Home /
PlayerPrefs saving script is not working
I want in my game to have an editor and the following script should save the transform of the placed objects. The instances are spawning properly but not with the right transform (position: 0, 0, 0 rotation 0, 0, 0 scale: 0, 0, 0)
Here my script: using System.Collections; using System.Collections.Generic; using UnityEngine;
public class SaveObject : MonoBehaviour { static float Name;
public GameObject Wall;
private void Start()
{
Name = PlayerPrefs.GetFloat("ObjectName", Name);
LoadTransform();
}
public void SaveTransform()
{
Name = 0;
foreach (var obj in GameObject.FindGameObjectsWithTag("Building"))
{
Name++;
//position
PlayerPrefs.SetFloat(Name + "PositionX", transform.position.x);
PlayerPrefs.SetFloat(Name + "PositionY", transform.position.y);
PlayerPrefs.SetFloat(Name + "PositionZ", transform.position.z);
//rotation
PlayerPrefs.SetFloat(Name + "RotationX", transform.rotation.x);
PlayerPrefs.SetFloat(Name + "RotationY", transform.rotation.y);
PlayerPrefs.SetFloat(Name + "RotationZ", transform.rotation.z);
//scale
PlayerPrefs.SetFloat(Name + "ScaleX", transform.localScale.x);
PlayerPrefs.SetFloat(Name + "ScaleY", transform.localScale.y);
PlayerPrefs.SetFloat(Name + "ScaleZ", transform.localScale.z);
//save Name
PlayerPrefs.SetFloat("ObjectName", Name);
}
}
public void LoadTransform()
{
while (Name > 0)
{
GameObject WallInstance = Instantiate(Wall, new Vector3(PlayerPrefs.GetFloat(Name + "PositionX"), PlayerPrefs.GetFloat(Name + "PositionY"), PlayerPrefs.GetFloat(Name + "PositionZ")),
new Quaternion(PlayerPrefs.GetFloat(Name + "RotationX"), PlayerPrefs.GetFloat(Name + "RotationY"), PlayerPrefs.GetFloat(Name + "RotationZ"), 0)) as GameObject;
WallInstance.transform.localScale = new Vector3(PlayerPrefs.GetFloat(Name + "ScaleX"), PlayerPrefs.GetFloat(Name + "ScaleY"), PlayerPrefs.GetFloat(Name + "ScaleZ"));
Name--;
}
}
} thanks for your help
An obvious error you are making is not saving the w
value of the rotation, which is a quaternion.
public void SaveTransform()
{
// ....
PlayerPrefs.SetFloat(Name + "RotationW", transform.rotation.w);
}
public void LoadTransform()
{
// ....
GameObject WallInstance = Instantiate(Wall, new Vector3(PlayerPrefs.GetFloat(Name + "PositionX"), PlayerPrefs.GetFloat(Name + "PositionY"), PlayerPrefs.GetFloat(Name + "PositionZ")),
new Quaternion(PlayerPrefs.GetFloat(Name + "RotationX"), PlayerPrefs.GetFloat(Name + "RotationY"), PlayerPrefs.GetFloat(Name + "RotationZ"), PlayerPrefs.GetFloat(Name + "RotationW"))) as GameObject;
}
Answer by TheGeorg · Jul 09, 2019 at 12:04 PM
Ive found the error it took the transform of the object with this script and not the transform of the saved object
Answer by revolute · Jul 09, 2019 at 11:42 AM
From the code you have provided, you seem to lack PlayerPrefs.Save().
From the reference,
By default Unity writes preferences to disk during OnApplicationQuit().
which means that unless you quit the application, you wont be able to see the change during the same run.
Your answer
![](https://koobas.hobune.stream/wayback/20220612204548im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
PlayerPrefs Lmitations 2 Answers
PlayerPrefs logic and bool? 1 Answer
PlayerPrefs defaults for install 1 Answer
PlayerPrefs.DeleteAll() not deleting unless app restarts 0 Answers