save load not working so well
I have been at this for days, reading forums, watching tutorials and trying over a dozen methods. Nothing fancy I just want to give the user the option to NOT have to finish the game in one sitting..just a save level and player transform. Some scripts just way over my head and the ones that "worked" really only worked within that level. Below is a script I found from Thunderwire Games. It looks like an upgrade to the script in the asset store Written by Grady Featherstone. But something isn't working with the save load function. I could save and hit load and I'd be right where I want to be. But if I went to the next level and hit load, I would go to the correct scene but not the correct transform. It would be like starting that level all over again. It looks like the script should do both level and player transform. So what am I missing here? I would get an error with the var BlurEffect and Mouselook so I ended up commenting that out to get unity to run.Is that the problem? Anyone out there spot what either I am doing wrong or how to make tis script work as I imagine it was designed?
class ComponentsClass {
//var BlurEffect : Blur;
var Look : MouseLook;
}
var Components : ComponentsClass = new ComponentsClass ( ) ;
var playerPosition : Transform;
var mainMenuSceneName : String;
var Skin : GUISkin;
var LoadPosition : String = "false"; //set to "true" is you want to load position or "false" to load only level
private var LoadLevel : boolean = true;
private var Look1 : MouseLook;
var pauseMenuFont : Font;
private var PlayerX : float;
private var PlayerY : float;
private var PlayerZ : float;
private var pauseEnabled = false;
function Start(){
PlayerPrefs.SetString("LoadPosition",LoadPosition); //set loadPosition true or false
pauseEnabled = false;
Time.timeScale = 1;
AudioListener.volume = 1;
Screen.showCursor = false;
LoadPlayer();
}
function SavePlayer(){
if(PlayerPrefs.GetString("LoadPosition") == "true"){ //save current position
PlayerPrefs.SetFloat("PlayerX",PlayerX);
PlayerPrefs.SetFloat("PlayerY",PlayerY);
PlayerPrefs.SetFloat("PlayerZ",PlayerZ);
PlayerX =(playerPosition.transform.position.x);
PlayerY =(playerPosition.transform.position.y);
PlayerZ =(playerPosition.transform.position.z);
PlayerPrefs.SetString("LoadPosition", "true"); //allow the load position
//Debug.Log("Saved to " + " X: " + PlayerPrefs.GetFloat("PlayerX") + " Y: " + PlayerPrefs.GetFloat("PlayerY") + " Z: " + PlayerPrefs.GetFloat("PlayerZ"));
}
PlayerPrefs.SetString("LevelName", Application.loadedLevelName); //save current level
}
function loadLevel(){ //load saved position
if(PlayerPrefs.GetString("LevelName") == Application.loadedLevelName){ //check if you have Loaded Level
LoadLevel = false;
}
if(LoadLevel == true){
Application.LoadLevel(PlayerPrefs.GetString("LevelName")); //load saved level
}
}
function LoadPlayer(){ //load player position on saved level
if(LoadLevel == false && PlayerPrefs.GetString("LoadPosition") == "true"){
playerPosition.transform.position.x = (PlayerPrefs.GetFloat("PlayerX"));
playerPosition.transform.position.y = (PlayerPrefs.GetFloat("PlayerY"));
playerPosition.transform.position.z = (PlayerPrefs.GetFloat("PlayerZ"));
//Debug.Log("LOAD POS");
}
}
function Update(){
PlayerX =(playerPosition.transform.position.x); PlayerY =(playerPosition.transform.position.y); PlayerZ =(playerPosition.transform.position.z); //set current player position
LoadPosition = PlayerPrefs.GetString("LoadPosition"); //check if loadPosition is true or false
//check if pause button (escape key) is pressed
if(Input.GetKeyDown("escape")){
Look1 = gameObject.GetComponent (MouseLook); //set MouseLook script
//check if game is already paused
if(pauseEnabled == true){
//unpause the game
pauseEnabled = false;
Time.timeScale = 1;
AudioListener.volume = 1;
Screen.showCursor = false;
// Components.BlurEffect.enabled = false;
//Components.Look.enabled = true;
//Look1.enabled = true;
}
//else if game isn't paused, then pause it
else if(pauseEnabled == false){
pauseEnabled = true;
AudioListener.volume = 0;
Time.timeScale = 0;
Screen.showCursor = true;
//Components.BlurEffect.enabled = true;
//Components.Look.enabled = false;
//Look1.enabled = false;
}
}
}
private var showGraphicsDropDown = false;
function OnGUI(){
GUI.skin = Skin;
if(pauseEnabled == true){
//Make a background box
GUI.Box(Rect(Screen.width /2 - 100,Screen.height /2 - 180,250,280), "Pause Menu");
//Make Main Menu button
if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 - 50,250,50), "Main Menu")){
Application.LoadLevel(mainMenuSceneName);
}
//Make Save Game button
if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 - 100,250,50), "Save Game")){
SavePlayer();
}
if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 - 150,250,50), "Load Game")){
loadLevel();
LoadPlayer();
}
//Make Change Graphics Quality button
if(GUI.Button(Rect(Screen.width /2 - 100,Screen.height /2 ,250,50), "Change Graphics Quality")){
if(showGraphicsDropDown == false){
showGraphicsDropDown = true;
}
else{
showGraphicsDropDown = false;
}
}
//Create the Graphics settings buttons, these won't show automatically, they will be called when
//the user clicks on the "Change Graphics Quality" Button, and then dissapear when they click
//on it again....
if(showGraphicsDropDown == true){
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 ,250,50), "Fastest")){
QualitySettings.currentLevel = QualityLevel.Fastest;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 50,250,50), "Fast")){
QualitySettings.currentLevel = QualityLevel.Fast;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 100,250,50), "Simple")){
QualitySettings.currentLevel = QualityLevel.Simple;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 150,250,50), "Good")){
QualitySettings.currentLevel = QualityLevel.Good;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 200,250,50), "Beautiful")){
QualitySettings.currentLevel = QualityLevel.Beautiful;
}
if(GUI.Button(Rect(Screen.width /2 + 150,Screen.height /2 + 250,250,50), "Fantastic")){
QualitySettings.currentLevel = QualityLevel.Fantastic;
}
if(Input.GetKeyDown("escape")){
showGraphicsDropDown = false;
}
}
//Make quit game button
if (GUI.Button (Rect (Screen.width /2 - 100,Screen.height /2 + 50,250,50), "Quit Game")){
Application.Quit();
}
}
}
Your answer
Follow this Question
Related Questions
Saving item count with Playerprefs 1 Answer
How to save player score? (C#) 0 Answers
Saving gameObjects state on load 0 Answers