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ú

Temas - unOOld

#1
General (Antiguo) / Duda sobre Streaming asset
Junio 13, 2016, 08:28:15 PM
Buen Dia, luego de investigar sobre como guardar y poder leer un archivo de texto en  android  finalmente vi que Streaming Asset era la mejor opcion, en relación a este se debia utilizar una clase WWW para que android pudiera leer el archivo, lo hice y puse la ruta indicada para encontrar el archivo en android, sin embargo el juego sigue sin funcionar cuando lo exporto al movil, esto es lo que tengo en la carpeta StreamingAsset 
 
http://imgur.com/EOKdIYm
 
cada archivo pertenece al dialogo de cada escena y asi fue como configure el script 
 
 
 

IEnumerator Startt()
    {
        string file;
        //captura el numero de escena actual
        string sceneNum = SceneManager.GetActiveScene().name;
        sceneNum = Regex.Replace(sceneNum, "[^0-9]", "");
        //ruta donde esta el archivo Dialogue
        string filePath = "jar:file://" + Application.dataPath + "!/assets/" + "Dialogue";
        //sumo Dialogue + el numero de escena para que el resultado finall sea Dialogue1
        filePath += sceneNum;
        //sumo lo anterior para que el resultado final sea Dialogue1.txt y asi detecte que es
        //un archivo de texto
        filePath += ".txt";
        //lo meto en una clase WWW y convierto la clase a un string para que sea detectable
        WWW www = new WWW(filePath) ;
        yield return www;
        file = www.text;
 
        lines = new List<DialogueLine>();
        Debug.Log(file);
        LoadDialogue(file);
    }

 
 
#2
Buen día, quisiera saber  que tipo de ruta y código debería aplicarse para crear un archivo de texto adentro de la SD card de Android que posteriormente pueda ser leído, y de que manera puedo escribir el texto que estará adentro de este archivo 
 
GRACIAS POR LEER 
#3
Buen día a todos mi juego el cual consiste en una novela visual lee los diálogos que va a visualizar de un archivo de texto que cree y metí en una carpeta al programa, anteriormente cuando lo exporte para Windows al ejecutar el juego no mostraba absolutamente nada, al abrir el archivo de texto   output_log.txt  me lanzaba un error que decía 
 



   
       IsolatedStorageException: Could not find a part of the path "C:\Users\exito\Desktop\textbox\Assets\Data\Dialogue1.txt".
   

[/quote]
 
Aparentemente donde sea que sea exportado el juego va a buscar las carpetas Assets, Data, y el archivo de texto Dialogue1.txt, sino lo encuentra entonces el juego no funciona, sin embargo el problema recae en que este juego esta destinado para android y naturalmente al abrirlo en un móvil como no encuentra las carpetas mencionadas anteriormente el juego no se ejecuta, igualmente si yo pasara mi juego a otro com***dor que no sea el mio no se ejecutaría al no encontrar la dirección de esas carpetas, aqui esta el script y yo quisiera saber de que forma puedo configurar la dirección para que las carpetas ya vengan incluidas cuando se descargue el juego en cualquier tipo de plataforma 
 
Gracias por Leer 
 

 void Start()
    {
        string file = "Assets/Data/Dialogue";
        string sceneNum = SceneManager.GetActiveScene().name;
        sceneNum = Regex.Replace(sceneNum, "[^0-9]", "");
        file += sceneNum;
        file += ".txt";
        lines = new List<DialogueLine>();
        LoadDialogue(file);
 
    }

 
 
#4
Buen dia a todos, anteriormente habia expresado que tenia problemas con mi juego, el cual es destinado para android y cuando lo exporte a simple vista parecia que el touch no funcionaba y pense que era un problema de codigo, sin embargo lo exporte para window  usando como codigo Input.GetMouseButtonDown(0) para pasar los dialogos y al reproducir el juego exportado el problema sigue estando ahi, en unity el juego me corre perfecto sin ningun problema, pero al exportarlo no sucede nada no se si se trata algun problema de configuración y necesito ayuda, gracias por leer y aqui dejo el video 
 


   
eature=oembed" width="480">

 
 
#5
Buen Dia a todos, quisiera consultarles una duda que tengo, para que los dialogos de mi juego comienzen a correr yo tenia de condicion Input.GetMouseButtonDown(0) sin embargo claramente al pasar mi juego al cel no me funciona, que tipo de input.touch puedo utilizar que equivalga a cada vez que el jugador haga click pase al siguiente dialogo  y sea valida para ponerla en una condición, intente leerlo en el manual de unity pero poco entiendo
 
Gracias por leer.  
 
esto era lo que tenia 
 

if ( Input.GetMouseButtonDown(0) && playerTalking == false  )
            {
                ShowDialogue();
                lineNum++;
           
            }

 
 
#6
BUENOS DIAS A TODOS  
 
al exportar mi juego para android salio incialmente el error the type or name Unit***itor could not be found a lo que solucione con la etiqueta #if UNITY_EDITOR y  #endif, sin embargo al exportar el juego ahora me sale este nuevo error the name editor application does not exist in the current context el cual me dirige a un string que se llama 
 



   
      string sceneNum = EditorApplication.currentScene;   
   

[/quote]
 
esta string toma automaticamente la escena actual en donde esta el jugador y no la puedo cambiar por  
 

SceneManager.LoadScene(SceneManager.GetActiveScene()) ;

 
ya que este codigo no puede ser tomado adentro de un string, que debo hacer para solucionar el error?
 
muchas gracias por leer 
 

using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
using Unit***itor;
#endif
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class DialogueParser : MonoBehaviour
{
    static public int level;
    struct DialogueLine
    {
        public string name;
        public string content;
        public int pose;
        public string position;
        public string[] options;
 
        public DialogueLine(string Name, string Content, int Pose, string Position)
        {
            name = Name;
            content = Content;
            pose = Pose;
            position = Position;
            options = new string[0];
         
           
        }
    }
    List<DialogueLine> lines;
    // Use this for initialization
    void Start()
    {
        string file = "Assets/Data/Dialogue";
        string sceneNum = EditorApplication.currentScene;
        sceneNum = Regex.Replace(sceneNum, "[^0-9]", "");
        file += sceneNum;
        file += ".txt";
        lines = new List<DialogueLine>();
        LoadDialogue(file);
 
    }

 
 
#7
Buenos Dias utilize el Application.LoadedLevel para que cada ves que el jugador entre al juego quede por la ultima escena que curso y para esto lo puse en el void start sin embargo solo sale la escena y no comienza a correr el dialogo como si se hubiera quedado en un bucle de abrir la escena, probé ponerlo tanto en el start como en el update y sucede lo mismo lo puse en un void creado por mi y no sucede nada, que puede suceder ahi?
 
 Application.LoadLevel(Application.loadedLevel)
 
gracias por leer 
#8
estoy creando una novela visual y he creado un playerprefs para que guarde instantaneamente la escena donde estoy y luego poder cargarla undiendo el boton load en otra escena y funciona perfectamente!, el problema es que realice otros playerprefs para guardarr el dialogo la pose la posicion del personaje y lo configure para que cada vez que se haga click para pasar al siguiente dialogo se guarde todo lo anterior dicho y esto ayudara que cuando se unda el load no solo muestre la escena donde quedo el jugador sino el dialogo exacto en el que quedo, el problema es que por alguna razon no sirve!!, al undir el load solo me carga la escena y no el dialogo exacto donde quedo el personaje, no entiendo que estoy haciendo mal y agradeceria muchisimo su ayuda 
 
GRACIAS POR LEER 
 
pd = LA PARTE DEL SAVE Y LOAD COMIENZA DESDE EL void OnGUI () 
 
 
 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
 
public class DialogueManager : MonoBehaviour
{
    public DialogueParser parser;
 
    public GameObject textbox;
    public string dialogue, characterName;
    public int lineNum;
    int pose;
    public string position;
    string[] options;
    public bool playerTalking;
    List<Button> buttons = new List<Button>();
    public Text dialogueBox;
    public Text nameBox;
    public GameObject choiceBox;
    static public int level;
    // Use this for initialization
    void Start()
    {
        dialogue = "";
        characterName = "";
        pose = 0;
        position = "L";
        playerTalking = false;
        parser = GameObject.Find("DialogueParser").GetComponent<DialogueParser>();
        lineNum = 0;
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0) && playerTalking == false)
        {
            ShowDialogue();
            lineNum++;
        }
        UpdateUI();
    }
    public void ShowDialogue()
    {
        ResetImages();
        ParseLine();
    }
    void UpdateUI()
    {
        if (!playerTalking)
        {
            ClearButtons();
        }
        dialogueBox.text = dialogue;
        nameBox.text = characterName;
    }
    void ClearButtons()
    {
        for (int i = 0; i < buttons.Count; i++)
        {
            print("Clearing buttons");
            Button b = buttons;
            buttons.Remove(b);
            Destroy(b.gameObject);
        }
    }
    public void ParseLine()
    {
        if (parser.GetName(lineNum) != "Player")
        {
            playerTalking = false;
            characterName = parser.GetName(lineNum);
            dialogue = parser.GetContent(lineNum);
            pose = parser.GetPose(lineNum);
            position = parser.GetPosition(lineNum);
            DisplayImages();
        }
        else {
            playerTalking = true;
            characterName = "";
            dialogue = "";
            pose = 0;
            position = "";
            options = parser.GetOptions(lineNum);
            CreateButtons();
        }
    }
    void CreateButtons()
    {
        for (int i = 0; i < options.Length; i++)
        {
            GameObject button = (GameObject)Instantiate(choiceBox);
            Button b = button.GetComponent<Button>();
            ChoiceButton cb = button.GetComponent<ChoiceButton>();
            cb.SetText(options.Split(':')[0]);
            cb.option = options.Split(':')[1];
            cb.box = this;
            b.transform.SetParent(this.transform);
            b.transform.localPosition = new Vector3(0, -25 + (i * 50));
            b.transform.localScale = new Vector3(1, 1, 1);
            buttons.Add(b);
        }
    }
    void ResetImages()
    {
        if (characterName != "")
        {
            GameObject character = GameObject.Find(characterName);
            SpriteRenderer currSprite = character.GetComponent<SpriteRenderer>();
            currSprite.sprite = null;
        }
    }
    void DisplayImages()
    {
        if (characterName != "")
        {
            GameObject character = GameObject.Find(characterName);
            SetSpritePositions(character);
            SpriteRenderer currSprite = character.GetComponent<SpriteRenderer>();
            currSprite.sprite = character.GetComponent<Character>().characterPoses[pose];
        }
    }
 
    void SetSpritePositions(GameObject spriteObj)
    {
        if (position == "L")
        {
            spriteObj.transform.position = new Vector3(-6, -2, 2);
            PlayerPrefs.GetFloat("x", transform.position.x);
            PlayerPrefs.GetFloat("y", transform.position.y);
            PlayerPrefs.GetFloat("z", transform.position.z);
        }
        else if (position == "R")
        {
            spriteObj.transform.position = new Vector3(6, -2, 2);
            PlayerPrefs.GetFloat("x", transform.position.x);
            PlayerPrefs.GetFloat("y", transform.position.y);
            PlayerPrefs.GetFloat("z", transform.position.z);
        }
        else if (position == "C")
        {
            spriteObj.transform.position = new Vector3(1, -2, 2);
        }
        else if (characterName == "")
        {
            spriteObj.transform.position = new Vector3(1, -2, 2);
        }
 
        spriteObj.transform.position = new Vector3(spriteObj.transform.position.x, spriteObj.transform.position.y, 0);
    }
    public void OnGUI()
    {
        if (SceneManager.GetActiveScene().name == "Scene1")
        {
            if (Input.GetMouseButtonDown(0))
            {
                PlayerPrefs.SetString("dialogo", dialogue);
                PlayerPrefs.SetString("name", characterName);
                PlayerPrefs.SetString("position", position);
                PlayerPrefs.SetInt("pose", pose);
                PlayerPrefs.SetInt("line", lineNum);
                lineNum++;
               
               
 
                PlayerPrefs.Save();
                Debug.Log("save");
            }
            level = 1;
            PlayerPrefs.SetInt("level", level);
            PlayerPrefs.Save();
            Debug.Log("guardado" + level);
        }
        if (SceneManager.GetActiveScene().name == "Scene3")
        {
            level = 3;
            PlayerPrefs.SetInt("level", level);
            PlayerPrefs.Save();
            Debug.Log("guardado" + level);
        }
 
        if (SceneManager.GetActiveScene().name == "Scene2")
        {
            bool botton = GUI.Button(new Rect(200, 80, 80, 50), "cargar");
            if (botton)
            {
                level = PlayerPrefs.GetInt("level");
                if (level == 1)
                {
                    SceneManager.LoadScene("Scene1");
                    transform.position = new Vector3(PlayerPrefs.GetFloat("x"), PlayerPrefs.GetFloat("y"), PlayerPrefs.GetFloat("z"));
                    transform.position = new Vector3(transform.position.x + 1, transform.position.y, transform.position.z);
                    dialogue = PlayerPrefs.GetString("dialogo");
                    characterName = PlayerPrefs.GetString("name");
                    position = PlayerPrefs.GetString("position");
                    pose = PlayerPrefs.GetInt("pose");
                    lineNum = PlayerPrefs.GetInt("line");
                    lineNum++;
                   
 
                }
            }
        }
    }
}

 
 
#9
Hola a todos!!, he estado trabajando en un guardado automatico para un juego de estilo novela visual, he podido guardar las escenas automaticamente y ahora estoy intentando guardar el dialogo exacto en donde quedo el jugador antes de salir del juego, para eso tuve que comunicar variables entre script para decirle al playerprefs que cada ves que hiciera click el jugador para cambiar de dialogo guardara el dialogo y el dialogo esta en otra script, sin embargo cuando reproduzco el juego me sale el error :
 
 Object reference not set to an instance of an object  
 
nose como solucionarlo
 
PD: el que dice dialogue es el string que saque del otro script dialoguemanager y el que contiene el dialogo del juego que quiero guardar
 
 
 
MUCHAS GRACIAS POR LEER. 
 

public class savegame : MonoBehaviour
{
    public DialogueManager manager;
    static public int level;
    // Use this for initialization
    public void OnGUI()
    {
        DialogueManager manager;
        string dialogo;
         manager = GameObject.Find("DialogueManager").GetComponent<DialogueManager>();
        dialogo = manager.dialogue;
        if (Input.GetMouseButtonDown(0))
        {
            PlayerPrefs.GetString("llave", dialogo);
        }

 
 
#10
Hola a todos!! he estado probando diferentes maneras de guardar mi juego automáticamente y porfin he logrado guardar la escena, sin embargo para que guarde, el script debe estar naturalmente en todas las escenas del juego sin embargo ese script contiene un boton que cree para que al darle click lleve a la escena guardada, sin embargo el boton me aparece en todas las escenas y solo quiero que salga en la escena del menu he probado con que si esta en las escenas que no quiero sea == a false, he probado la opcion gui disable y aun asi sigue apareciendo el boton en las escenas que no quiero, aqui esta el codigo :
 
que puedo hacer para que el gui.button solo aparezca en la escena del menu del juego??
 
MUCHAS GRACIAS POR LEER 
 
 
 

static public int level;
    // Use this for initialization
    public void OnGUI()
    {
        bool botton = GUI.Button(new Rect(200, 80, 80, 50), "cargar");
 
        if (SceneManager.GetActiveScene().name == "Scene1")
        {
            level = 1;
            PlayerPrefs.SetInt("level", level);
            PlayerPrefs.Save();
            Debug.Log("guardado" + level);
        }
        if (SceneManager.GetActiveScene().name == "Scene3")
        {
            level = 3;
            PlayerPrefs.SetInt("level", level);
            PlayerPrefs.Save();
            Debug.Log("guardado" + level);
        }
 
        if (botton)
        {
            level = PlayerPrefs.GetInt("level", 0);
            if(level == 1)
            {
                SceneManager.LoadScene("Scene1");
                GUI.enabled = false;
               
            }
            else if(level == 3)
            {
                SceneManager.LoadScene("Scene3");
                GUI.enabled = false;
            }
             
        }
       
       
 

    }
   

 
 
#11
General (Antiguo) / duda acerca de playerprefs
Mayo 22, 2016, 01:24:15 AM
hola a todos!, he estado averiguando sobre los playerprefs para guardar y cargar información, encontré que se clasifican en distintos tipos como enteros strings floats etc, en mi caso lo que necesito guardar es la progresión de una historia ya que es una novela visual, se me ocurrió que podría guardarse tipo si el jugador esta en una determinada escena entonces que guarde esa escena, sin embargo no se como configurar el código para que quede de esa forma, por otra parte el que guarde la escena no me garantiza que se haya guardado el texto y la imagen exacta por donde el jugador va, por otra parte para guardar un juego con playerprefs se necesita una llave y yo quisiera que se guardara automáticamente sin que el jugador tenga que undir nada, he visto que esto es posible en otras novelas visuales y quisiera saber como se puede configurar el código para lograr mi cometido  
 
como siempre muchas gracias por leer 
#12
durante un tiempo he estado haciendo una novela visual para android, aunque ya he configurado lo que se refiere a la jugabillidad me queda el factor mas determinante de todo el proceso y es el de salvar y cargar, me he dado cuenta que las novelas visuales que suelo descargar de android no tienen botón de guardar y al cerrar y volver a abrir el juego se reanuda automáticamente en la ultima escena recorrida, quisiera saber como puedo elaborar este save load automático como puedo elaborar el script para que sea funcional en android o si este proceso es algo que viene implícito al descargar el android SDK y no hace falta hacer nada, mi otra pregunta es que yo configure los controles para que al hacer click con el boton izquierdo del mouse pase al siguiente dialogo, esto aplica para android? o al descargar el sdk tengo que configurar de nuevo los controles y si es así como tengo que hacerlo 
 
muchisimas gracias por su atención y por leer 
#13
Hola a todos, 
 
Gracias de antemano por leer. Estoy realizando una novela visual en unity y para los diálogos creé un script que contiene un array y que muestra en pantalla cada linea de texto recorriéndola con un bucle for, sin embargo estoy teniendo problemas con los personajes, creé un public array sprite para asignar todas las poses de un personaje y cree un condicional que tiene como condición que la linea de texto sea par. Y aquí viene mi problema; yo quiero que cuando la linea de texto sea par entonces muestre  los sprites que pertenecen a ese personaje y que todas las posiciones de ese personaje estén alineadas a la izquierda pero no se como hacer en el script para que muestre los sprites y que queden todos en esa posición, hasta ahora llevo esto 
 
la cuestion esta en el ultimo if no se que agregar adentro 
 

public TextAsset textfile;
    public string[] textLines;
    public GameObject textbox;
    public Text thetext;
    public int currentline;
    public int endatline;
    public Sprite[] characterposes = null;
    
    // Use this for initialization
    void Start()
    {
        if (textfile != null)
        {
            textLines = (textfile.text.Split('\n'));
        }
        if (endatline == )
        {
            endatline = textLines.Length - 1;
        }
    }
    void Update()
    {
        thetext.text = textLines[currentline];
        if (Input.GetKeyDown(KeyCode.Return))
        {
            currentline += 1;
        }
        if(currentline > endatline)
        {
            textbox.SetActive(false);
        }
        if(currentline % 2== )
        {
              
        }
    }
    
}