Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - KevinLastra

#16
General (Antiguo) / Guardar objetos y su Posicion
Julio 18, 2017, 06:49:22 PM
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:
 
 
 

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
#17
Resuelto
 

public void OnAssetChange()
    {
        items.AddRange(Resources.LoadAll<InventoryItem>("Base + Add"));
       
    }

 
la carpeta "Base + Add" tiene que estar en una carpeta llamada "Resources"
#18
"Base + Add" es el nombre de la carpeta
 
 
#19
hola a todo, estoy intentando descargar prefabs en una lista y tengo entendido que es mediante Resource.LoadAll pero no funciona la funcion la tengo asi
 
 
 

   public void OnAssetChange()
    {
        items.AddRange(Resources.LoadAll<InventoryItem>("Assets/Prephabs/Items/Base + Add"));
       
    }

 
 
 
 
 
Grasias por su atencion
#20
General (Antiguo) / Editar texto UI
Mayo 17, 2017, 01:57:33 PM
Grasias @Harsel tu siempre tan bueno :) 
#21
General (Antiguo) / Editar texto UI
Mayo 17, 2017, 12:04:51 PM
Hola, Como hago para editar un Text para que antes de la coma solo se escriba 2 digitos y despues de la coma 4 digitos
 
Osea:
 
"4586"+ "," + "38" 
 
Esto viene a que tengo un inventario que va por Peso y cada objeto tiene un peso y una durabilidad, la cual al pasar por una ecuacion a veces salen numeros infinitos entonses cuando se mira el peso en el inventario se llena la pantalla.
 
entonses yo queria saber si hay una forma de detectar el texto para que despues de la coma 2 digitos y antes 4 digitos.
 
 
 
Ojala me haya dado a entender .
 
Grasias
#22
Muchas grasias @Harsel :)
#23
@Harsel efectivamente, HightWeight y Durability son numeros enteros aqui dejo un poco mas amplio, tengo un problema con el codigo que pusiste arriba, porque no se puede convertir de float a int 
 
, bueno eso me dise el unity en el error que me sale.
 
 
 

int Durability;
int porcentaje;
int HightWeight;
int Weight;
void Start(){
     Durability = Random.Range(0,100);
     porcentaje = HightWeight / 100 * Durability / 5;
     Weight = HightWeight - porcentaje;
}

 
Grasias por responder tan rapido.
#24
hola, tengo un problema tengo la siguiente ecuacion
 



   
       
   
   
      Porcentaje = (PesoNormal / 100) * (Durabilidad / 5)
   
   
      PesoActual = PesoNormal - Porcentaje
   
   
       
   

[/quote]
 
pero cuando quiero aplicarlo a codigo
 


void Start(){
     porcentaje = HightWeight / 100 * Durability / 5;
     Weight = HightWeight - porcentaje;
}

 
 
 
la variable porcantaje sale 0 siempre, porque pasa esto? alguien me dise que esta mal
 
 
 
Grasias
#25
General (Antiguo) / Duda Hacer de enums
Mayo 15, 2017, 11:48:08 AM
Gracias @Harsel me has ayudado un monton :)
#26
General (Antiguo) / Duda Hacer de enums
Mayo 14, 2017, 12:25:10 PM
Hola a todos tengo una pregunta, hay de alguna manera hacer que si se selecciona alguna opcion de un enum se abra otro enum en el editor,
 

public enum item{arma,armadura,medicina}
public item item_;
//osea cuando digamos ago click en la opcion armadura dentro del enum item.
//aparesca otro enum partes de armadura y yo pueda escoger entre esas partes.
public enum PartesDeArmadura{cabeza,pecho}
public PartesDeArmadura partes;

 
 
 
pero que ese enum solo exista cuando item sea armadura, si item no es igual a armadura el enum partesdearmadura no aparesca en el menu.
 
 
 
Porfavor diganme si es posible y si es posible me podrian decir como se hace Grasias.
#27
General (Antiguo) / Problema con ScrollView
Mayo 10, 2017, 03:01:39 PM
Hola tengo un menu de inventario con 4 scrollview y cada uno tiene un canvasgroup para poder desaparecerlos dentro del menu mediante
 



   
      gameobject.getcomponent<CanvasGroup>().alpha = 0;
   

[/quote]
 
pero esto por alguna razon hoy hace que los scrollview no funcionen, los cuales ayer funcionaban, otra cosa a recalcar de los 4 solo el scrollview que esta abajo del todo funciona.
 
Les dejo una imagen adjunto porque creo que no me explico bien
 
 
 
Grasias por ayuda
 
#28
General (Antiguo) / Problema estraño con el Input
Mayo 08, 2017, 08:15:10 PM
ya esta arreglado que error mas ridiculo ni pense en poner el else Grasias @Caesar
#29
General (Antiguo) / Problema estraño con el Input
Mayo 08, 2017, 07:25:48 PM
Hola, tengo un problema el cual en totalidad no se porque no funciona.
 
tengo este input
 



   
      if (Input.GetButtonDown("Cancel"))
              {
                  if (cr.alpha == 0)
                  {
                      cr.alpha = 1;
                  }
                  if (cr.alpha == 1)
                  {
                      cr.alpha = 0;
                  }
              }
   

[/quote]
 
si elimino cualquiera de los dos if dentro del input funciona pero si estan los dos if dentro no funciona, porfavor si alguien me ayuda seria genial
 
 
 
Grasias
#30
General (Antiguo) / Problemas con Linq
Marzo 29, 2017, 12:19:33 PM
Cita de: juanma_teso date=1490781267El problema es que estás intentando guardar un array de tipo Transform en una variable de tipo GameObject, si lo que quieres es guardar los Transform o posiciones de los GameObject "Waypoints" debes crear una variable de tipo Transform o Vector3.
   
   
      En programación por lo general no se puede pasar de un tipo a otro, a no ser que haya un cast definido (imagina de un número float y pasarlo a un int, o int 1234 a string "1234"), o se pase a un tipo mayor (int a double) en este caso no hay manera, o guardas el GameObject o el Transform en tu variable waypoints.
   
   
      Viendo el código que usas más adelante es la segunda; en vez de GameObject define waypoints como Transform[] y cambia la línea del error por:
   
   

waypoints = (from GameObject GO in GameObject.FindGameObjectsWithTag("Waypoints") select GO.transform).ToArray();

   
       
   


Muchas Grasias me has ayudado muchisimo, ahora podre seguir adelante con el libro :).