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

#31
Cita de: lightbug date=1492562756Hola, primero dejame decirte que meter en tu inventario un objeto de tipo "Inventory" es total y absolutamente confuso, yo usaria un nombre como Item o algo asi ya que cualquiera que lee pensara que estas creando un inventario, pero bueno si funciona para vos esta bien.
   
   
      Podes realizar la busqueda iterando en un for o un foreach, si lo que te interesa ademas de saber si esta o no es algun otro dato como la posicion y esas cosas te recomiendo un for:
   
   

bool EncontrarObjInventario(string nombreDeseado){
  for(int i= ; i < inventario .Count ;i++){
    if(inventario[i].name == nombreDeseado){
      return true;
    }
  }
  return false;
}
 
                             
                             

   
      Saludos
   
   
       
   


Antes de nada muchas gracias por tomarte la molestia de contestar.
 
 
 
He probado con tu código pero no sé por qué al ponerlo me dice en el código que hay antes (lo que hay por encima de tú código) que se esperaba un } .
 
 
 
Creo que algo está fallando aunque no sé que es..
 
 
 
 
 

Cita de: Luis_arg date=1492591715Es sencillo en C# usas Inventario.Find() ... adentro de find pones el objeto "Inventory" que queres buscar ...
   
   
      Sino otra mas fácil es usar Inventario.FindIndex() si encuentra el objeto te devuelve la posición del objeto sino lo encuentra te devuelve -1 ...
   
   
       
   


También te agradezco enormemente a ti la ayuda, aunque debo de ser muy manco porque tampoco he conseguido que me funcione, te paso una imagen vale?
 
 
 
Definitivamente algo estoy haciendo mal, no sé si me estoy liando a la hora de agregar el elemento al inventario...realmente no lo sé :S
 
 
 
 
 
 
 
 
 
#32
Muy buenas, estoy creando un inventario a traves de una lista y no encuentro la manera de comprobar si un objeto existe en el inventario, la lista la he creado así:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Inventory {
    public string name;
    public int health;
    public Inventory(string newName, int newHealth)    {
        name = newName;
        health = newHealth;
    }
}

 
 
 
Para añadir un objeto lo que hago es esto:
 



   
       
   
   
      List<Inventory> inventario = new List<Inventory> ();
              inventario.Add (new Inventory ("Manzana", 1));
   
   
   
   
       
   

[/quote]
 
Donde manzana es el nombre del objeto y 1 su poder de salud (health en el código de arriba).
 
Lo que intento es saber como buscar en mi lista si por ejemplo tengo una manzana pero no encuentro el comando adecuado, alguna idea?? :S
 
Muchísimas gracias.
 
 
 
PD: El primer código y el segundo están en scripts distintos, aunque no creo que eso suponga ningún problema al declarar las variables públicas.
#33
General (Antiguo) / Pasar de un diálogo a otro...
Abril 13, 2017, 01:16:56 AM
Cita de: lightbug date=1492037331Eso calculo que es por el GetKey, si queres que detecto solo cuando la presionas usa GetKeyDown.
   
   
      Tenes un getKey dentro de un getKey o ya estoy borracho? las entradas manejalas puramente en Update(), quita todo eso del "stay", podes jugar con el Enter Exit (ya que se llama menos veces que el stay y no tendria sentido, a no ser que se entrada los npc esten dentro del trigger) y indicar un flag que sea npcDisponible = true/false por ej. En update haces algo como:
   
   

void OnTriggerEnter(Collider col)
{
...
      npcDisponible = true;
}
void OnTriggerExit(Collider col)
{
...
      npcDisponible = false;
}
void Update()
{
if(npcDisponible)
    {
       if(Input.GetKeyDown(KeyCode.J))
          pasarDeDialogo();   //lo que sea
    }
}

   
       
   
   
       
   
   
       
   


Muchas gracias, acabo de conseguirlo haciéndolo desde el update como me recomiendas, por fin...muchísimas gracias.
#34
General (Antiguo) / Pasar de un diálogo a otro...
Abril 12, 2017, 11:14:45 PM
Cita de: kingtrase date=1492029182Aunque la forma en que lo haces no es la correcta ni de lejos, te dire una inconcluencia en tu codigo para que avances algo.
   
   

if (other.name == "npc_1" && Input.GetKey("j") ) {         // Si el nombre del otro collider es npc_1 y pulsas la tecla J... (FUNCIONA)
      ButtonTalk.SetActive (false);
      string msg = other.GetComponent<msgNpcS> ().GetMsg_1_1_1 ();      //Si el NPC es el 1, se muestra el texto del método GetMsg_1 (FUNCIONA)
         msgText.text = msg;
         PanelMsg.SetActive (true);
      if (Input.GetKey ("j")) {
      
         msg = other.GetComponent<msgNpcS> ().GetMsg_1_1_2 ();      //Al pulsar DE NUEVO la tecla J, debería mostrar el siguiente texto.. (NO FUNCIONA)
         msgText.text = msg;
         PanelMsg.SetActive (true);
            }                     
   }

   
      En ese codigo lo que haces es: si mientras other.name es igual a npc1 y Input.getkey(j)  es pulsado, metes un if otra vez Input.getkey(j). si dejas la tecla J presionada un rato al final funcionara el codigo..., tendrias que hacer que: si el mensaje 1 se ha leido, se muestre el mensaje 2... pero te digo que esta no es la forma de hacerlo ni de lejos.
   
   
      Busca en la assetStore algun plugin de dialogo... Suerte!
   
   
       
   


Muchas gracias, si, sé que hay mejores formas de hacerlo, pero llevo días programando y bueno de momento esta es la más asequible, seguiré tu consejo.
 
He visto un buen plugin para esto, se llama "Fungus", pero la verdad es que lo he visto complejo para algo "tan sencillo"...te dejo el link por si te interesa a ti o alguien que lea este hilo, muchas gracias.
 
 
 
Fungus - Asset Store
#35
General (Antiguo) / Pasar de un diálogo a otro...
Abril 12, 2017, 08:41:02 PM
Muy buenas, llevo varios días intento pasar de un diálogo a otro, sinceramente la manera de hacerlo tal vez no sea la más óptima, pero bueno, de momento con conseguirlo me conformo, después depuraré el código.
 
 
 
El problema que tengo es que mi código se va directamente a la segunda frase, y no sé como decirle que eso sólo debe hacerlo al pulsar por segunda vez la tecla "J"
 
 
 
Aquí os dejo el código, es C#  aunque haya puesto JavaScript para que se coloree un poquito:
 
 
 
PD: El script hace referencia al método GetMsg, el cuál está en otro script, no voy a poneros ese script porque no viene al caso y funciona perfectamente :) .
 
 
 

using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
public class DeteccionDialogo : MonoBehaviour {
[SerializeField] GameObject PanelMsg;
[SerializeField] Text msgText;
[SerializeField] GameObject ButtonTalk;
    bool talking = false;
bool PressTalk = false;
int frases;
int contadorfrase;
void Start () {
   GetComponent<Collider> ().isTrigger = true;
   PanelMsg.SetActive (false);
   ButtonTalk.SetActive (false);
}
void OnTriggerEnter (Collider other) {

   if (other.CompareTag("npc")) {
      print ("Tag Comparado");                     // Se comparan los tags y si es NPC aparece el cartel para hablar
      ButtonTalk.SetActive (true);
   }
}
 
void OnTriggerStay (Collider other) {
   if (other.name == "npc_1" && Input.GetKey("j") ) {         // Si el nombre del otro collider es npc_1 y pulsas la tecla J... (FUNCIONA)
      ButtonTalk.SetActive (false);
      string msg = other.GetComponent<msgNpcS> ().GetMsg_1_1_1 ();      //Si el NPC es el 1, se muestra el texto del método GetMsg_1 (FUNCIONA)
         msgText.text = msg;
         PanelMsg.SetActive (true);
      if (Input.GetKey ("j")) {
      
         msg = other.GetComponent<msgNpcS> ().GetMsg_1_1_2 ();      //Al pulsar DE NUEVO la tecla J, debería mostrar el siguiente texto.. (NO FUNCIONA)
         msgText.text = msg;
         PanelMsg.SetActive (true);
            }                     
   }
}
void OnTriggerExit (Collider other) {
   if(other.CompareTag("npc")){
      ButtonTalk.SetActive (false);
      PanelMsg.SetActive (false);
   }
}
}

 
 
 
 
 
Muchísimas gracias y espero que podáis ayudarme a encontrar en qué estoy fallando, un saludo !
#36
General (Antiguo) / Fotogrametria
Julio 12, 2016, 12:14:39 AM
Cita de: Braltor date=1468257559mmm... pero es algo q se calcula de la fotogrametria misma?? por ejemplo que el objeto tenga areas mas reflectivas y otras mas opacas, y la fotogrametria genere el mapa correspondiente... o es algo q el paquete 3d genera al elegir el material a mano?? lo asombroso es lo primero xD
   


Las dos cosas, puedes exportar los mapas tal cual segun el objeto que has escaneado, tendrá sus brillos, rugosidad y demás características reales, o también puedes meter mano tu mismo en los mapas y añadir más brillo, menos rugosidad, lo que quieras, puedes hacer absolutamente lo que quieras xD .
#37
General (Antiguo) / Fotogrametria
Julio 11, 2016, 05:32:47 PM
Cita de: Braltor date=1468251054si genera los diferentes mapas eso es asombroso!! pero con q programa los sacas?
   


Con cualquier software 3d se podría hacer, yo lo hago con Zbrush y Blender, pero de manera separada, es decir se puede hacer sólo con Zbrush o sólo con Blender, no necesitas usar los 2 a la vez, o si, eso ya depende del artista.
#38
General (Antiguo) / Fotogrametria
Julio 11, 2016, 03:57:40 PM
Cita de: Braltor date=1468245331ese es un buen punto, aunq puedas producir modelos de calidad asombrosa no son aptos para juegos... tienes que rehacer la topologia... y hoy en dia 1 textura no es suficiente, sumando luego las animaciones
   


Eso es lo que he dicho, que al rehacerlos en low poly seguían quedando impresionantes, además no es sólo una textura, puedes sacar varios tipos de mapas, las normales, ambient oclussion, displacement map, specular map...etc.
 
 
 
Y creeme, después de eso el resultado es espectacular si el trabajo se ha hecho bien, luego obviamente quedan más cosas, las animaciones en el caso de llevarlas, los shaders y materiales, pero esta técnica bien hecha se puede usar perfectamente en juegos.
#39
General (Antiguo) / Fotogrametria
Julio 11, 2016, 03:15:57 PM
Yo con la cámara de mi Huawei P8 Lite he sacado modelos espectaculares, incluso al volver a hacer la geometría en lowpoly el resultado es increiblemente bueno, lo digo en serio, modelos dignos de la calidad de un Uncharted 4, no exagero xD .
#40
Le echaré un ojo, justo esoy trabajando en un shooter online.
#41
Te has fijado si en tu software 3d ese objeto no está duplicado? Parece como si hubiera un objeto encima de otro, tal vez me equivoque, échale un ojo y dinos para ver que puede ser ;)
#42
Cita de: pioj date=1467786045@Bydark, Si algún usuario ha dado la respuesta, lo correcto es que la marques como Best Answer, pulsando en la "V" verde que hay debajo del usuario. Eso evita tener que recorrer todas las páginas del post y releerlo todo de nuevo...
   
   
       
   
   
      Aprovecho también para recordaros que, cuando veáis que el código es demasiado largo, no lo pongáis entero por aquí y mejor pegar un link a Pastebin o Hastebin.com, y similares... Facilita bastante más la lectura.
   


Gracias por los consejos, en reaildad no hice lo de la mejor respuesta por que el problema sigue activo, pero viendo todo el esfuerzo del compañero tal vez le ayude a otros a solucionar su problema, lo haré, de nuevo gracias.
 
 
 
@DiegoSadiGame ya tienes en un privado mi proyecto, gracias !!
#43
Cita de: DiegoSadiGame date=1467769532o.o esta pequeño el error jeje. 
   
   
      claro si quieres te puedo ayudar.


Vale, en unas horas te dejo en un privado el enlace, muchísimas gracias por todo :D :D !!
#44
Cita de: DiegoSadiGame date=1467768383No hay problema.
   
   
      Ahora con el nuevo problema ya se que pasa XD, devido a como tienes tu proyecto convendria más activar el Player elegido y desactivar los otros mientras no se usan.  tal vez no sea la mejor forma de hacerlo pero si funciona el script.
      ahora los prefabs tendran que estar en la escena y solo se mantedra activado el que sea elejido, si no te funciona tendria que ver tu proyecto para saber que te va ha servir.
   
   

using UnityEngine;
using System.Collections;
public class CharacterStart : MonoBehaviour {
public GameObject[] Player;
private int Index;
// Use this for initialization
void Start () {
   Index = PlayerPrefs.GetInt ("PlayerIndex",0);
   Player
  • .SetActive (false);
   Player [1].SetActive (false);
   Player [2].SetActive (false);
   Player [Index].SetActive (true);
}
}

   
       
   


No acaba de funcionarme, me salta este error tan enorme xD :
 



   
      NullReferenceException: Object reference not set to an instance of an object
      UnityEngine.Networking.NetworkTransform.SerializeMode3D (UnityEngine.Networking.NetworkWriter writer) (at 16 msgType, UnityEngine.Networking.MessageBase msg, Int32 channelId) (at ...
      UnityEngine.Networking.NetworkIdentity.UNetStaticUpdate () (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkIdentity.cs:1059)
   

[/quote]
 
Si quieres subo mi proyecto a Dropbox y mañana te paso el enlace, que me dices??
 
 
 
Un saludo!!
#45
Cita de: DiegoSadiGame date=1467767013puede ser por
   
   
      1.- Que el valor de index no esta dentro del tamaño del array, si tienes 3 prefabs estan ordenados del 0 al 2  asi que si el valor que se guardo es menor a 0  o mayor a 2 dara ese error.
   
   
      2.- O porque en la escena donde se caragan los prefabs no tienes todos añadidos si solo colocate 2 prefabs estaran ordenados del 0 al 1 y cuando en la escena de seleccion elijas el que tiene el index 2 no lo podra cargar, por defecto en tú escript tienes limite de 3 prefaps por que cuando llega a index 2 se regresa a 0.
   
   
      ya lo probe y si me funciono. asi que el punto 2 es el que te da el error
   
   
      si aun no puedes arreglar el error dime y vemos que hacemos !!
   
   
      ademas de que tienes dos camaras con el audio listener eliminacelo a una.

       
   
   
       
   


Vaya, no me dió tiempo a editar antes de que lo vieras...arriba te he puesto el error actual, siento haberte hecho escribir para nada...jajaj
 
 
 
Gracias! :D