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 - DavidV

#1
Scripting / Cómo uso OnColliderEnter en un Button?
Enero 09, 2019, 02:44:31 PM
Cita de: Argantonio date=1546982139Funciona perfecto!! . Te lo agradezco mucho estaba estancado con eso jejeje 
   
   
       
   
   
      Funciona siempre y cuando el botón quede dentro del rectángulo (zona de acción) del boxcollider, al sacarlo deja de tener el efecto... Sabes si se puede solucionar de alguna forma? porque no da libertad de colocación del botón. Gracias 
   


Es extraño, a mí me funciona independientemente de donde esté el botón. El botón como tal no interactua con los demás GameObject, da igual donde esté ya que éste sólo responde a un evento (destroyWithButton()). ¿Podrías enviarme unas imágenes (del inspector) de los sprites, el Empty gameObject y del Botón?
#2
Scripting / Cómo uso OnColliderEnter en un Button?
Enero 08, 2019, 10:00:25 PM
Cita de: Argantonio date=1546979839Hola David, exacto! Eso eso es lo que pretendo... He probado tu código, lo que no me aparece es la opción de destruir "destroyWithButton()"  muchas gracias por tu interés y tu tiempo. 
   


1. Si en el punto 7 te aparece el nombre del Script pero luego en el punto 8 no aperece el nombre de la función "destroyWithButton()" es porque la función no la has hecho pública. Busca en el script y has pública la función (debe quedar public void destroyWithButton()).
 
2. Si en el punto 7 no te aparece el nombre del script, es porque no has arrastrado el objeto correcto: El script debes adjuntarlo al Empty GameObject y luego arrastras ese GameObject hasta donde dice: None (Object) 
 
Ya lo he probado y me ha funcionado, intenta las soluciones que te he dado y me dices si te ha salido algún problema
#3
Scripting / Cómo uso OnColliderEnter en un Button?
Enero 08, 2019, 06:51:23 PM
Entendí lo siguiente: Quieres que cuando un sprite pase por encima de un colisionador, si en ese momento de colisión se presiona un botón, dicho sprite se destruya. 
 
Si es así te recomiendo lo siguiente:
 
1. Crea un Empty GameObject (GameObject -> Create Empty) este será el objeto central en el cual los sprites tendrán que colisionar, centra el Empty GameObject, agregale un Collider2d (Add component -> Physics 2D -> Box collider) y posteriormente ajusta el tamaño del Collider2d. Recuerda también activar la propiedad Is trigger
 
2. Crea un botón por medio de UI Canvas (GameObject -> UI -> Button). 
 
3. Los sprites que serán destruidos añádeles un nuevo tag.  
 
4. Crea un Script (llámalo como quieras) en él escribirás las siguientes lineas de código: 
 

private bool isColl = false;
private Collider2D collider;
void Start()
{
}
void Update()
{
}
public void destroyWithButton(){
  if(isColl){
     Destroy(collider.gameObject);
  }
}
void OnTriggerEnter2D(Collider2D col){
if(col.gameObject.tag == "nombredeltag"){
         collider = col;
       isColl = true;
    }
}
void OnTriggerExit2D(Collider2D col)
    {
        if(col.gameObject.tag == "nombredeltag"){
          isColl = false;
        }
       
    }

 
5. Arrastra el script al Empty GameObject. 
 
6. En el button busca el componente Button (Script) en lo ultimo de ese componente encontrarás una seccion llamada On click (Button), da click en el signo "+" y posteriormente arrastra el Empty GameObject hasta donde dice: "None (Object)". 
 
7. Una vez hecho lo anterior, da click en donde dice "No function" y busca el nombre que le pusiste al Script.
 
8. En el desplegable que aparece, busca el nombre de la función: "destroyWithButton()" 
 
9. habiendo hecho lo anterior en teoría debería funcionar, más tarde lo probaré (si tú no lo has hecho antes) y corregiré si he terminado tal vez cometiendo un error. 
#4
General (Antiguo) / Problema para exportar a Android
Septiembre 24, 2017, 02:13:20 AM
Hola, había dejado de usar Unity por un tiempito (La ultima vez que lo usé y exporté a Android fue hace unos 4-5 meses) y en estos días se me presentó un nuevo proyecto, lo empecé a desarrollar y cuando llegó el momento de exportar el apk apareció el siguiente error:
 
Failed to compile resources with the following parameters:

-bootclasspath "C:/Users/David/AppData/Local/Android/android-sdk\platforms\android-26\android.jar" -d "C:\Users\David\Documents\Unity projects\MuseoEtnografico\Temp\StagingArea\bin\classes" -source 1.6 -target 1.6 -encoding UTF-8 "com\Unimagdalena\Neponuseno\R.java" "com\unity3d\player\R.java"
 
Agradecería mucho vuestra ayuda. 
#5
General (Antiguo) / Pequeño bug
Septiembre 28, 2016, 03:47:02 PM
Hola, iniciando un nuevo proyecto me ha resultado un pequeño error en el que no sé si es algo general, o sólo sucede en mi pc.
 
Tengo el siguiente código:
 

void FixedUpdate () {
   if (Input.GetKeyDown(KeyCode.X)) {
      stop = !stop;
      print (stop);
   }
   switch (stop) {
   case false:
      //GetComponent<Rigidbody2D> ().velocity = Vector2.zero;
      flecha.transform.RotateAround (Aro.transform.position, -Vector3.forward, velocidadFlecha * Time.deltaTime);
      Aro.SetActive (true);
      break;
   case true:
      flechaPosition = flecha.transform.localPosition;
      //GetComponent<Rigidbody2D> ().velocity = flechaPosition * velocidad;
      Aro.SetActive (false);
      break;
   }
}
   
}

 
El error está en el if (Input.GetKeyDown(KeyCode.X)) {  stop = !stop;}, como ustedes ya saben esto cambia una variable bool de verdadero a falso y viceversa cada vez que se presiona la tecla X. Pero casi siempre, realiza dos veces la acción que se encuentra dentro de ese condicional, es decir; si era true, pasa a false y enseguida pasa nuevamente a true, cuando solo lo he presionado una sola vez, algo que por supuesto daña el resto del script.
 
¿A alguien más le ha sucedido o sólo es un problema en mi pc?, ¿Tiene esto alguna solución?
 
De antemano muchas gracias por su ayuda. 
#6
Está muy bueno!!, soy al único que le recuerda a Dofus e.e?
#7
General (Antiguo) / Nuevo en UnistySpain
Agosto 02, 2016, 02:22:30 AM
¡Bienvenido!
#8
General (Antiguo) / Gui Label Posición
Julio 16, 2016, 12:01:44 AM
Creo que se refiere a que si la pantalla se amplía o se achica, el texto no queda en la posición original. Si es así te recomiendo leer la siguiente guía: https://docs.unity3d.com/es/current/Manual/HOWTO-UIMultiResolution.html
#9
También podrías hacerlo sacandole el Módulo sobre 10 al contador. Sería algo así:
 

if(Contador % 10 == 0 ){
  Generar Item;
}

 
 
#10
General (Antiguo) / Camara
Julio 02, 2016, 01:39:42 AM
Yo hice que se acercara al personaje por medio de animaciones, pero sucede casi igual a lo de Miguel, si el personaje va demasiado rápido traspasa la pared y luego ejecuta la animación. 
 
Viendo el trailer de The legend of Zelda: Breath of the wild noté que en el juego se volvía trasparente el objeto traspasado, es otra forma de hacerlo también. 
#11
¡Bienvenido!
#12
http://unity3d.com/es/learn/tutorials/topics/scripting/instantiate?playlist=17117 Ahí explican correctamente cómo disparar, espero te sirva. 
#15
[quote author=kaito" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35649" data-ipsquote-contentcommentid="129739">Ningún objeto de unity(clase o estructura) se encuentra serializada, ni Vector3, ni Quaternion, etc...Tienes que crear tus propias clases serializadas  o guardar los datos uno a uno en forma de float, int, bool, string, ...Yo creo que la mejor solucion es guardar los datos en un Dictionary<string, object> que puede ser serializado/deserializado fácilmente, de forma genérica para cualquier tipo de dato serializado o elemental tipo float, int, string, etc...Esta sería la clase FileData que utiliza un Dictionary<string,object> para almacenar y registrar todos los datos:
using System.Collections.Generic;using System.IO;
using System.Runtime.Serialization.Formatters.Binary;


public class FileData{   

string file;
Dictionary<string, object> Data;

public FileData(string file){

   this.Data = new Dictionary<string, object>();
   this.file = file;

}

public void Set(string name, object data){

   if(Data.ContainsKey(name)) Data[name] = data;
   else Data.Add(name, data);
   
}

public void Remove(string name){
   
   Data.Remove(name);
   
}

public object Get(string name){
   
   if(Data.ContainsKey(name)) return Data[name];
   return null;
   
}


public bool Save(){ return Save(this.file); }
public bool Save(string file){
   
   FileStream fs = new FileStream(file, FileMode.Create);      
   
   BinaryFormatter formatter = new BinaryFormatter();
   try
   {
      formatter.Serialize(fs, Data);
   }
   catch (System.Runtime.Serialization.SerializationException e)
   {
      UnityEngine.Debug.Log("Failed to serialize. Reason: " + e.Message);
      return false;
   }
   finally
   {
      fs.Close();
   }

   return true;
   
}

public bool Load(){ return Load(this.file); }
public bool Load(string file){

   if(!File.Exists(file)) return false;

   FileStream fs = new FileStream(file, FileMode.Open);

   try
   {
      BinaryFormatter formatter = new BinaryFormatter();
      Data = (Dictionary<string,object>) formatter.Deserialize(fs);
   }
   catch (System.Runtime.Serialization.SerializationException e)
   {
      UnityEngine.Debug.Log("Failed to deserialize. Reason: " + e.Message);
      return false;
   }
   finally
   {
      fs.Close();
   }

   return true;
   
}

public static FileData Create(string file){

   return new FileData(file);

}

public static FileData From(string file){

   FileData fileData = new FileData(file);
   fileData.Load();
   return fileData;

}

}
 Podemos crear un solo objeto FileData para almacenar todos los datos del juego, o varios archivos: uno para los actores, otro para el gui/inventario, o uno diferente para cada escena.He creado dos funciones estáticas, una FileData.Create(file) para crear un registro/base de datos en blanco, y otra FileData.From(file) para cargar los datos del disco al inicio. El script tipo Test:
using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

public bool save;


//Definir nombres de registro GameDataFile
const string posicion_x = "Player/posicion_x";
const string posicion_y = "Player/posicion_y";
const string posicion_z = "Player/posicion_z";
const string rotacion_x = "Player/rotacion_x";
const string rotacion_y = "Player/rotacion_y";
const string rotacion_z = "Player/rotacion_z";
const string puntuacion = "Player/Puntuacion";
const string vidas      = "Player/vidas";

//Definir nombres de registro GUI
const string Equipamiento1 = "Player/Equipamiento/slot1";
const string Equipamiento2 = "Player/Equipamiento/slot2";
const string Equipamiento3 = "Player/Equipamiento/slot3";
const string Equipamiento4 = "Player/Equipamiento/slot4";
const string Inventario1 = "Player/Inventario/slot1";
const string Inventario2 = "Player/Inventario/slot2";
const string Inventario3 = "Player/Inventario/slot3";
const string Inventario4 = "Player/Inventario/slot4";
const string Inventario5 = "Player/Inventario/slot5";
const string Inventario6 = "Player/Inventario/slot6";
const string Inventario7 = "Player/Inventario/slot7";
const string Inventario8 = "Player/Inventario/slot8";
const string Inventario9 = "Player/Inventario/slot9";
const string Inventario10 = "Player/Inventario/slot10";
const string Inventario11 = "Player/Inventario/slot11";
const string Inventario12 = "Player/Inventario/slot12";


// Use this for initialization
void Start () {
   
   FileData GameData = FileData.Create("GameDataFile");
   //FileData GUIData = FileData.Create("GUIDataFile");

   if(save){

      GameData.Set(puntuacion, 15367);
      GameData.Set(vidas, 3);
      GameData.Set(posicion_x,this.transform.position.x);
      GameData.Set(posicion_y,this.transform.position.y);
      GameData.Set(posicion_z,this.transform.position.z);
      GameData.Set(rotacion_x,this.transform.eulerAngles.x);
      GameData.Set(rotacion_y,this.transform.eulerAngles.y);
      GameData.Set(rotacion_z,this.transform.eulerAngles.z);

      //Los datos se pueden sobreescribir o modificar
      //GameData.Set(posicion_x,17.15f);
      
      if(GameData.Save()) Debug.Log("Datos guardados con exito");
      else Debug.Log("Error al guardar datos");

      //GUIData.Set(Equipamiento1,"");
      //GUIData.Set(Equipamiento2,"");
      //etc...

      
   } else {
      
      if(GameData.Load()){

         Debug.Log(puntuacion + ": " + (int)GameData.Get(puntuacion));
         Debug.Log(vidas + ": " + (int)GameData.Get(vidas));
         Debug.Log(posicion_x + ": " + (float)GameData.Get(posicion_x));
         Debug.Log(posicion_y + ": " + (float)GameData.Get(posicion_y));
         Debug.Log(posicion_z + ": " + (float)GameData.Get(posicion_z));
         Debug.Log(rotacion_x + ": " + (float)GameData.Get(rotacion_x));
         Debug.Log(rotacion_y + ": " + (float)GameData.Get(rotacion_y));
         Debug.Log(rotacion_z + ": " + (float)GameData.Get(rotacion_z));

      } else Debug.Log("Error al cargar datos");
      
   }
   
}
}
 [/quote]UFF! muchísimas gracias.