- Home /
Attempt to make blocks save location went horribly wrong.
This code is in the block code:
void OnApplicationQuit () {
if (DataValue > 0)
{
PlayerPrefs.SetFloat ("X Position " + DataValue, transform.position.x);
PlayerPrefs.SetFloat ("Y Position " + DataValue, transform.position.y);
PlayerPrefs.SetFloat ("Z Position " + DataValue, transform.position.z);
if (Type == Types.Cube)
{
PlayerPrefs.SetString ("Type " + DataValue, "Cube");
PlayerPrefs.SetFloat ("Color Red " + DataValue, GetComponent <SpriteRenderer> ().color.r);
PlayerPrefs.SetFloat ("Color Green " + DataValue, GetComponent <SpriteRenderer> ().color.g);
PlayerPrefs.SetFloat ("Color Blue " + DataValue, GetComponent <SpriteRenderer> ().color.b);
}
if (Type == Types.CustomCube)
{
PlayerPrefs.SetString ("Type " + DataValue, "Custom Cube");
PlayerPrefs.SetFloat ("Color Red " + DataValue, GetComponent <SpriteRenderer> ().color.r);
PlayerPrefs.SetFloat ("Color Green " + DataValue, GetComponent <SpriteRenderer> ().color.g);
PlayerPrefs.SetFloat ("Color Blue " + DataValue, GetComponent <SpriteRenderer> ().color.b);
}
if (Type == Types.Wood)
{
PlayerPrefs.SetString ("Type " + DataValue, "Wood");
}
if (Type == Types.AppleWood)
{
PlayerPrefs.SetString ("Type " + DataValue, "Apple Wood");
}
if (Type == Types.LemonWood)
{
PlayerPrefs.SetString ("Type " + DataValue, "Lemon Wood");
}
if (Type == Types.OrangeWood)
{
PlayerPrefs.SetString ("Type " + DataValue, "Orange Wood");
}
if (Type == Types.Leaf)
{
PlayerPrefs.SetString ("Type " + DataValue, "Leaf");
}
if (Type == Types.AppleLeaf)
{
PlayerPrefs.SetString ("Type " + DataValue, "Apple Leaf");
}
if (Type == Types.LemonLeaf)
{
PlayerPrefs.SetString ("Type " + DataValue, "Lemon Leaf");
}
if (Type == Types.OrangeLeaf)
{
PlayerPrefs.SetString ("Type " + DataValue, "Orange Leaf");
}
if (Type == Types.Dirt)
{
PlayerPrefs.SetString ("Type " + DataValue, "Dirt");
}
if (Type == Types.Grass)
{
PlayerPrefs.SetString ("Type " + DataValue, "Grass");
}
if (Type == Types.WoodPlanks)
{
PlayerPrefs.SetString ("Type " + DataValue, "Wood Planks");
}
if (Type == Types.Stone)
{
PlayerPrefs.SetString ("Type " + DataValue, "Stone");
}
}
and this in the cube manager:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class CubeManager : MonoBehaviour {
public GameObject CubeGet;
public List <GameObject> Cubes = new List <GameObject> ();
public int CurrentCube;
public int MinCubes;
public int MaxCubes;
public int MinX;
public int MaxX;
public int MinY;
public int MaxY;
public int [] AllSortOrders;
public int HighestLayer;
public Sprite [] Sprites;
void Start () {
int ActionGet = PlayerPrefs.GetInt ("Cube Manager Action", 0);
if (ActionGet == 0)
{
int CubesToSpawn = Random.Range (MinCubes, MaxCubes);
for (int CubesSpawned = 0; CubesSpawned < CubesToSpawn + 1; CubesSpawned ++)
{
Instantiate (CubeGet, new Vector3 (Random.Range (MinX, MaxX + 1), Random.Range (MinY, MaxY + 1), 1), Quaternion.identity);
}
PlayerPrefs.SetInt ("Cube Manager Action", 1);
}
else
{
int CubeCount = PlayerPrefs.GetInt ("Cube Count");
for (int CubesRespawned = 1; CubesRespawned < CubeCount - 1; CubesRespawned ++)
{
float XPos = PlayerPrefs.GetFloat ("X Position" + CubesRespawned);
float YPos = PlayerPrefs.GetFloat ("Y Position" + CubesRespawned);
float ZPos = PlayerPrefs.GetFloat ("Z Position" + CubesRespawned);
string CurrentType = PlayerPrefs.GetString ("Type " + CubesRespawned);
float CurrentRed = PlayerPrefs.GetFloat ("Color Red " + CubesRespawned);
float CurrentGreen = PlayerPrefs.GetFloat ("Color Green " + CubesRespawned);
float CurrentBlue = PlayerPrefs.GetFloat ("Color Blue " + CubesRespawned);
GameObject CurrentCube = Instantiate (CubeGet, new Vector3 (XPos, YPos, ZPos), Quaternion.identity) as GameObject;
Cubes.Add (CurrentCube);
CurrentCube.GetComponent <Cube> ().DataValue = Cubes.Count - 1;
if (CurrentType == "Cube")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.Cube;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [0];
CurrentCube.GetComponent <SpriteRenderer> ().color = new Color (CurrentRed, CurrentGreen, CurrentBlue);
}
if (CurrentType == "Custom Cube")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.CustomCube;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [0];
CurrentCube.GetComponent <SpriteRenderer> ().color = new Color (CurrentRed, CurrentGreen, CurrentBlue);
}
if (CurrentType == "Wood")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.Wood;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [1];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.white;
}
if (CurrentType == "Apple Wood")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.AppleWood;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [2];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.white;
}
if (CurrentType == "Lemon Wood")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.LemonWood;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [3];
}
if (CurrentType == "Orange Wood")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.OrangeWood;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [4];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.white;
}
if (CurrentType == "Leaf")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.Leaf;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [5];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.green;
}
if (CurrentType == "Apple Leaf")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.AppleLeaf;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [6];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.green;
}
if (CurrentType == "Lemon Leaf")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.LemonLeaf;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [7];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.green;
}
if (CurrentType == "Orange Leaf")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.OrangeLeaf;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [8];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.green;
}
if (CurrentType == "Dirt")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.Dirt;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [9];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.white;
}
if (CurrentType == "Grass")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.Grass;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [10];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.green;
}
if (CurrentType == "Wood Planks")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.WoodPlanks;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [11];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.white;
}
if (CurrentType == "Stone")
{
CurrentCube.GetComponent <Cube> ().Type = Cube.Types.Stone;
CurrentCube.GetComponent <SpriteRenderer> ().sprite = Sprites [12];
CurrentCube.GetComponent <SpriteRenderer> ().color = Color.white;
}
}
int RespawnCurrentCube = PlayerPrefs.GetInt ("Current Cube");
Camera.main.transform.position = new Vector3 (Cubes [RespawnCurrentCube].transform.position.x, Cubes [RespawnCurrentCube].transform.position.y, -1);
}
}
void OnApplicationQuit () {
PlayerPrefs.SetInt ("Current Cube", CurrentCube);
PlayerPrefs.SetInt ("Cube Count", Cubes.Count);
}
}
And it seems to do nothing
Also I get an indexoutofrange every time i call for the current cube.
Ok so its this line
Cubes.Add (CurrentCube);
Its not being called.
How are you testing that? Are you sure OnApplicationQuit gets called? It's not guaranteed.
why do you say its not guaranteed? what do i do ins$$anonymous$$d?
Sorry for confusing you. I think in editor it does get called. It's easy to test with a debug.log anyways.
I'm not 100% sure of all the possibilities, but for example on android or iOS, if you close the app by going to the "app list" (double tap home on ios, switch app button on android) and close it by swiping, the app is in paused state when closing so it doesn't execute any code at that point.
$$anonymous$$any apps save the state of the game in OnApplicationPause(), because after that the game can't monitor its own state and react to stuff.
Your answer

Follow this Question
Related Questions
Unity Will not run 0 Answers
OnMouseDown not working when deployed 2 Answers
help! I can't get an array from another script 1 Answer
OnTriggerStay weird behavior 0 Answers
Asset store downloads not working. -1 Answers