Buenas a todos,
estoy creando un juego fps 3d en el cual el personaje puede recoger y dropear objetos, cada uno de los cuales esta guardado como prefab independiente con una ID al momento que se crea, ya partiendo de ahi al momento de apagar el juego y volver, los objetos deben crearse con los mismos datos y en su posicion, bueno me puse darle vueltas como hacerlo entonses me salio esto:
cada obj se guarda a una dirrection + el numero el cual llego( MaxObjToSave ), ahora hay que cargar esto al momento de iniciar, me salio esto
el MaxObjToSave ya guardado en el save y cargado en el start del mismo script ahora lo uso para el for, entonses cargo la ID de cada obj segun su numero y se crea.
Ahora la razon de que estoy aqui, que este script tiene muchisimos fallos, se que voy en buen camino o eso creo, quisiera tener algun consejo o idea para tener un script funcional.
cualquier duda aganmelo saber porfavor.
aqui dejo el scrip completo...
Grasias por su atencion
estoy creando un juego fps 3d en el cual el personaje puede recoger y dropear objetos, cada uno de los cuales esta guardado como prefab independiente con una ID al momento que se crea, ya partiendo de ahi al momento de apagar el juego y volver, los objetos deben crearse con los mismos datos y en su posicion, bueno me puse darle vueltas como hacerlo entonses me salio esto:
public void Save(GameObject item,float x, float y, float z)
{
MaxObjToSave++;
PlayerPrefs.SetString("SaveObjPos" + MaxObjToSave,item.GetComponent<InventoryItem>().ID);
PlayerPrefs.SetFloat("PosX" + MaxObjToSave, x);
PlayerPrefs.SetFloat("PosY" + MaxObjToSave, y);
PlayerPrefs.SetFloat("PosZ" + MaxObjToSave, z);
PlayerPrefs.SetInt("MaxObjSaved",MaxObjToSave);
}
cada obj se guarda a una dirrection + el numero el cual llego( MaxObjToSave ), ahora hay que cargar esto al momento de iniciar, me salio esto
void Load()
{
for (int i = 0; i <= MaxObjToSave; i++)
{
ID_ = PlayerPrefs.GetString("SaveObjPos" + i,"");
if (ID_ != "") {
prefab = Resources.Load<GameObject>("Base + Add/" + ID_);
GameObject item = Instantiate(prefab, transform.position, Quaternion.identity);
item.transform.position = new Vector3(PlayerPrefs.GetFloat("PosX" + i), PlayerPrefs.GetFloat("PosY" + i), PlayerPrefs.GetFloat("PosZ" + i));
MaxObjToSave--;
}
}
}
el MaxObjToSave ya guardado en el save y cargado en el start del mismo script ahora lo uso para el for, entonses cargo la ID de cada obj segun su numero y se crea.
Ahora la razon de que estoy aqui, que este script tiene muchisimos fallos, se que voy en buen camino o eso creo, quisiera tener algun consejo o idea para tener un script funcional.
cualquier duda aganmelo saber porfavor.
aqui dejo el scrip completo...
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SaveObjDropedPos : MonoBehaviour {
public List<string> itemID = new List<string>();
public Dictionary<string, float> itemsPos = new Dictionary<string, float>();
int MaxObjToSave;
string ID_;
int NumberNull;
GameObject prefab;
private void Awake()
{
MaxObjToSave = PlayerPrefs.GetInt("MaxObjSaved",0);
Load();
}
public void Save(GameObject item,float x, float y, float z)
{
MaxObjToSave++;
PlayerPrefs.SetString("SaveObjPos" + MaxObjToSave,item.GetComponent<InventoryItem>().ID);
PlayerPrefs.SetFloat("PosX" + MaxObjToSave, x);
PlayerPrefs.SetFloat("PosY" + MaxObjToSave, y);
PlayerPrefs.SetFloat("PosZ" + MaxObjToSave, z);
PlayerPrefs.SetInt("MaxObjSaved",MaxObjToSave);
}
void Load()
{
for (int i = 0; i <= MaxObjToSave; i++)
{
ID_ = PlayerPrefs.GetString("SaveObjPos" + i,"");
if (ID_ != "") {
prefab = Resources.Load<GameObject>("Base + Add/" + ID_);
GameObject item = Instantiate(prefab, transform.position, Quaternion.identity);
item.transform.position = new Vector3(PlayerPrefs.GetFloat("PosX" + i), PlayerPrefs.GetFloat("PosY" + i), PlayerPrefs.GetFloat("PosZ" + i));
MaxObjToSave--;
}
}
}
public void Delete()
{
for (int i = 1; i <= MaxObjToSave; i++)
{
string Id = PlayerPrefs.GetString("SaveObjPos" + i);
float x = PlayerPrefs.GetFloat("PosX" + i);
float y = PlayerPrefs.GetFloat("PosY" + i);
float z = PlayerPrefs.GetFloat("PosZ" + i);
if(Id == "")
{
NumberNull++;
}
itemID.Add(Id);
itemsPos.Add("PosX" + (i - NumberNull), x);
itemsPos.Add("PosY" + (i - NumberNull), y);
itemsPos.Add("PosZ" + (i - NumberNull), z);
PlayerPrefs.DeleteKey("SaveObjPos" + i);
PlayerPrefs.DeleteKey("PosX" + i);
PlayerPrefs.DeleteKey("PosY" + i);
PlayerPrefs.DeleteKey("PosZ" + i);
MaxObjToSave = 0;
SaveListObj();
}
}
void SaveListObj()
{
MaxObjToSave++;
for (int f = 0; f <= itemsPos.Count / 3 - 1; f++) {
for (int i = 0; i <= itemID.Count - 1; i++)
{
PlayerPrefs.SetString("SaveObjPos" + MaxObjToSave, itemID);
float x = itemsPos["PosX" + f];
float y = itemsPos["PosX" + f];
float z = itemsPos["PosX" + f];
PlayerPrefs.SetFloat("PosX" + MaxObjToSave, x);
PlayerPrefs.SetFloat("PosY" + MaxObjToSave, y);
PlayerPrefs.SetFloat("PosZ" + MaxObjToSave, z);
PlayerPrefs.SetInt("MaxObjSaved", MaxObjToSave);
}
}
}
}
Grasias por su atencion