So, I’m attempting to save the FPS controller’s location and camera position to registry and cannot figure out for the life of me what I’m doing wrong (probably a lot as I’m new to coding). Please help!
using UnityEngine;
using System.Collections;
public class Save : MonoBehaviour
{
public void SavePosition()
{
PlayerPrefs.SetFloat ("PlayerX", transform.position.x);
PlayerPrefs.SetFloat ("PlayerY", transform.position.y);
PlayerPrefs.SetFloat ("PlayerZ", transform.position.z);
PlayerPrefs.SetFloat ("PlayerCamX", Camera.main.transform.position.x);
PlayerPrefs.SetFloat ("PlayerCamY", Camera.main.transform.position.y);
PlayerPrefs.SetFloat ("PlayerCamZ", Camera.main.transform.position.z);
PlayerPrefs.SetFloat ("PlayerCamRotX", Camera.main.transform.rotation.x);
PlayerPrefs.SetFloat ("PlayerCamRotY", Camera.main.transform.rotation.y);
PlayerPrefs.SetFloat ("PlayerCamRotZ", Camera.main.transform.rotation.z);
}
public void LoadPosition()
{
float x = PlayerPrefs.GetFloat ("PlayerX");
float y = PlayerPrefs.GetFloat ("PlayerY");
float z = PlayerPrefs.GetFloat ("PlayerZ");
float camposX = PlayerPrefs.GetFloat ("PlayerCamX");
float camposY = PlayerPrefs.GetFloat ("PlayerCamY");
float camposZ = PlayerPrefs.GetFloat ("PlayerCamZ");
float camrotX = PlayerPrefs.GetFloat ("PlayerCamRotX");
float camrotY = PlayerPrefs.GetFloat ("PlayerCamRotY");
float camrotZ = PlayerPrefs.GetFloat ("PlayerCamRotZ");
float camrotW = PlayerPrefs.GetFloat ("PlayerCamRotZ");
transform.position = new Vector3 (x, y, z);
Camera.main.transform.position = new Vector3 (camposX, camposY, camposZ);
Camera.main.transform.rotation = new Quaternion.Euler (camrotZ, camrotX, camrotY);
}
}
Yar, I am getting an error stating “UnityEngine.Quaternion does not contain a definition for Euler” in line 35 “Euler” is red.
For future reference, please post your error code so it’s easier to figure out what the problem is. There are a couple of things I changed in your code.
-
First, I changed your line 35 to correctly set the rotation.
-
A future problem you were going to run into is that you are saving the cameras rotation values at lines 14, 15, and 16 and then assigning them as eulerAngles at line 35. Rotation values are not the same as eulerAngles.
-
You were assigning the angles as (z, x, y) at line 35 instead of (x, y, z).
public void SavePosition() {
PlayerPrefs.SetFloat (“PlayerX”, transform.position.x);
PlayerPrefs.SetFloat (“PlayerY”, transform.position.y);
PlayerPrefs.SetFloat (“PlayerZ”, transform.position.z);
PlayerPrefs.SetFloat (“PlayerCamX”, Camera.main.transform.position.x);
PlayerPrefs.SetFloat (“PlayerCamY”, Camera.main.transform.position.y);
PlayerPrefs.SetFloat (“PlayerCamZ”, Camera.main.transform.position.z);
PlayerPrefs.SetFloat (“PlayerCamRotX”, Camera.main.transform.rotation.eulerAngles.x);
PlayerPrefs.SetFloat (“PlayerCamRotY”, Camera.main.transform.rotation.eulerAngles.y);
PlayerPrefs.SetFloat (“PlayerCamRotZ”, Camera.main.transform.rotation.eulerAngles.z);
}
public void LoadPosition() {
float x = PlayerPrefs.GetFloat (“PlayerX”);
float y = PlayerPrefs.GetFloat (“PlayerY”);
float z = PlayerPrefs.GetFloat (“PlayerZ”);
float camposX = PlayerPrefs.GetFloat (“PlayerCamX”);
float camposY = PlayerPrefs.GetFloat (“PlayerCamY”);
float camposZ = PlayerPrefs.GetFloat (“PlayerCamZ”);
float camrotX = PlayerPrefs.GetFloat (“PlayerCamRotX”);
float camrotY = PlayerPrefs.GetFloat (“PlayerCamRotY”);
float camrotZ = PlayerPrefs.GetFloat (“PlayerCamRotZ”);
transform.position = new Vector3 (x, y, z);
Camera.main.transform.position = new Vector3 (camposX, camposY, camposZ);
Camera.main.transform.rotation = Quaternion.Euler(new Vector3(camrotX, camrotY, camrotZ));
}