Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Mover objetos del escenario al panel de canvas para hacer un inventario

Iniciado por No_TengoNidea, Julio 21, 2015, 12:53:21 AM

Tema anterior - Siguiente tema
Hola¡¡
  Me acabo de registrar y es la primera vez que llego a hacerlo(registrarme  en un foro para pedir ayuda).Agradezco vuestro trabajo y disponibilidad. El problema es que estoy haciendo un inventario y es para oculus rift (OVR).Aquí la función OnGui no sirve, lo tengo que hacer con Canvas y  por lo que estoy viendo  parece más sencillo, digo parece porque estoy intentando:Mover un objeto hijo del canvas, situado en el escenario al inventario....He creado un script en el objeto que cuando pasas, se mueve a la posición de la celda pero el objeto coge una posición que no coincide con lo que he intentado asignarle...private var botiquin : vida;function Start ()
{
    botiquin = GameObject.Find("OVRPlayerController").GetComponent(vida);
}function OnTriggerEnter (Col : Collider)
{
    if(Col.tag == "Player")
    {
    
        transform.position.x -= 177;
        transform.position.y += 169;
        transform.position.z = 0;
    }
}Lo he intentaod con = +=,-=....ya a la deseperadaConozco los conceptos básicos para programar y puedo enteneder explicaciones más técnicas.  Muchas Gracias¡¡¡¡¡ Saludos¡¡¡

Buenas, a ver si lo he entendido bien, quieres pasar un objeto que tienes en la escena a un inventario en canvas, si así es entonces a ver si te puedo echar una mano. Puedes probar a coger un RectTransform y lo mueves donde quieras dentro de tu canvas, un GO vacío vaya. Y decirle al objecto 3D que se haga hijo de ese RectTransform y poner la posición local en Vector.zero o sea justo el punto donde este el padre. Pero ahora bien, son 2 clases distintas RectTransform y Transform y no se si se van a poder acoplar juntas. También podrías coger y usar render to texture y colocar esa textura en una Imagen de canvas, pero de antemano te aviso que es muy costoso a nivel de procesado por si tienes pensado usarlo para alguna plataforma portátil...Algo más light pero no se si se adapta a tu juego sería algo del estilo del Resident Evil : http://i.ytimg.com/vi/deD0LpZskVw/maxresdefault.jpgEso sería sencillo con unos planos unas referencias de medidas y todo en 3D pero ya como veas. Espero haberte ayudado, saludos.


Buenas,  Primero dar las gracias por el interés y vuestro tiempo...Debería haber respondido..encontré algo que me ayudó pero no me ha resuelto los problemas jejejje.....El caso es que si movía los objetos al canvas luego no los veía.....también decir que creía que no funcionaba la funcion on gui con oculuss rift pero por lo visto si que se visualizan las barras que he creado....En fin lo que quiero es montar un inventario con drop and & drag ......Ahora he hecho algo temporal,tengo 4 objetos en el inv(estáticos)y según paso por uno u otro(dentro de la escena), hago visible o no un boton del canvas que referencia a ese objeto  por el que acabo de pasar(los objetos se pueden stackear)....Pero esto no me parece práctico, creo que si pudiera crear un nuevo botton mediante el script y añadirle una textura 2d y unas propiedades, podría tener un inventario más dinámico. Es justo lo que tú dices, necesitaría arrastrar y soltar.he visto muchos ejemplos con onGui pero creo que sería más facil con botones del canvas, sólo que no se crear objetos tipo button y agregarles propiedades(transfor,texture 2d....) con un script(en tiempo de ejecución creo que se dice)...Como decía he aprendido a programar en c,java,sql,php a un nivel medio también he aprendido otros como css1,2,3,html y javascript....ahora se algod e c# y poco más de jascript pero puedo entender bastantes cosas...También se cosas de animación e imagen...En fin estoy bastannte perdido y caulqueir ayuda la agrdecerá...Recordad que estoy con unity3d v5 y para ovr...Además tmabien tengo problemas con la visualizacón con las gafas y la partede interfaz de ususario pero eso es otro tema Gracias¡¡¡¡Un Saludo¡¡¡

[quote author=antoniomdk date=1438043753" data-ipsquote="" data-cite="antoniomdk" class="ipsQuote">Buenas, a ver si lo he entendido bien, quieres pasar un objeto que tienes en la escena a un inventario en canvas, si así es entonces a ver si te puedo echar una mano. Puedes probar a coger un RectTransform y lo mueves donde quieras dentro de tu canvas, un GO vacío vaya. Y decirle al objecto 3D que se haga hijo de ese RectTransform y poner la posición local en Vector.zero o sea justo el punto donde este el padre. Pero ahora bien, son 2 clases distintas RectTransform y Transform y no se si se van a poder acoplar juntas. También podrías coger y usar render to texture y colocar esa textura en una Imagen de canvas, pero de antemano te aviso que es muy costoso a nivel de procesado por si tienes pensado usarlo para alguna plataforma portátil...Algo más light pero no se si se adapta a tu juego sería algo del estilo del Resident Evil : http://i.ytimg.com/vi/deD0LpZskVw/maxresdefault.jpg]http://i.ytimg.com/vi/deD0LpZskVw/maxresdefault.jpgEso sería sencillo con unos planos unas referencias de medidas y todo en 3D pero ya como veas. Espero haberte ayudado, saludos.[/quote]Buenas, Pues nose muy bien la manera de hacerlo, si moviéndolo como tu dices del suelo al panel de canvas o creando nuevos item según los cojo del suelo....La verdad me interesa más lo primero por el tema de arrastrar pero creo que con los botones de canvas también se puede....Si sabes o tienes experiencia  cualqueir aporte es de argradecerGracias¡¡¡

Agosto 02, 2015, 11:25:48 PM #5 Ultima modificación: Agosto 02, 2015, 11:27:14 PM por antoniomdk
Mira lo he probado y efectivamente los RecTransfrom actúan como Transform normales, de hecho heredan de esa clase. Lo que tienes que hacer es tener game object vacíos dentro del canvas donde tu quieras que se coloque el objeto y cuando quieras meterlo en el canvas, lo haces hijo de uno de eso gamobject y la transform.localposition = Vector3.zeroTen en cuenta que los RectTransform también tienen el eje Z así que  tendrás que ajustarlo.Te dejo la api del Transform para que le eches un vistazo:http://docs.unity3d.com/ScriptReference/Transform.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Transform.html

Si estos tuvieran propiedades o las invocan habría que hacer uso del event delegate? Yo tuve una vez un problema y me quedé ahí, es un poco rollero, el guitexture es tan simple y cumple con lo mismo que no lo veo el uso con la nueva UI, aunque lo uso yo.
Enviado desde mi SM-N910F mediante Tapatalk

[quote author=antoniomdk date=1438550748" data-ipsquote="" data-cite="antoniomdk" class="ipsQuote">Mira lo he probado y efectivamente los RecTransfrom actúan como Transform normales, de hecho heredan de esa clase. Lo que tienes que hacer es tener game object vacíos dentro del canvas donde tu quieras que se coloque el objeto y cuando quieras meterlo en el canvas, lo haces hijo de uno de eso gamobject y la transform.localposition = Vector3.zeroTen en cuenta que los RectTransform también tienen el eje Z así que  tendrás que ajustarlo.Te dejo la api del Transform para que le eches un vistazo:http://docs.unity3d.com/ScriptReference/Transform.html]http://docs.unity3d.com/ScriptReference/Transform.html[/quote]Pues lo voy a mirar a vre que saco y os cuento, gacias¡¡¡ 

[quote author=antoniomdk date=1438550748" data-ipsquote="" data-cite="antoniomdk" class="ipsQuote">Mira lo he probado y efectivamente los RecTransfrom actúan como Transform normales, de hecho heredan de esa clase. Lo que tienes que hacer es tener game object vacíos dentro del canvas donde tu quieras que se coloque el objeto y cuando quieras meterlo en el canvas, lo haces hijo de uno de eso gamobject y la transform.localposition = Vector3.zeroTen en cuenta que los RectTransform también tienen el eje Z así que  tendrás que ajustarlo.Te dejo la api del Transform para que le eches un vistazo:http://docs.unity3d.com/ScriptReference/Transform.html">http://docs.unity3d.com/ScriptReference/Transform.html[/quote]Ok, ya lo he visto aquí: http://unity3d.com/learn/tutorials/modules/beginner/ui/rect-transform y lo he probado pero no ha resuelto mi cuestión.Esto me mueve un objeto dentro de la interfaz UI...Ahora entiendo eso que dices, que tengo que lidiar con el Transform que muev objetos dentro de la escen y el Rec Trensform, además el item debería ser hijo del canvas.....Ahora veo o creo que no es lo más apropiado, no en mi caso (que no quiero mucha carga)...lo más apropiado creo que sería crear un nuevo botón y cargarle una textura 2d que era lo que tenía en mente en un principio pero como no sabía hacerlo pensé que moverlo a las coordenadas de un slot d emi inventario serviría...Creo que veo las dos maneras de hacerlo, si lo hago haciéndolo hijo del canvas y tal,creo que con las opciones de lso botones...Pero bueno ya que estamos con este hilo terminamos de hablarlo...Lo he intentado y todo correcto hasta que llego al punto de modificar el recTransformdesde un script, he provado con vector3 y vector2,RectTransform.Position....Según lo que entendido se hace con unas funciones que la mayoría son vector 2....no se cómo acceder al rectrasnform.position.x,y,zhttp://docs.unity3d.com/ScriptReference/RectTransform.html" rel="external nofollow]http://docs.unity3d.com/ScriptReference/RectTransform.htmlHice como me dijiste, hacer un objeto vacío y hacerle hijo de él, y aquí tengo el problema,no puedo acceder al transform y su ejes de coordenadas ,tampoco puedo hacer lo hijo...Aquí dejo el script hecho en java script,lo  comentado son las cosas que he intentado...var tr : RectTransform;
var objeto : GameObject;
function Start ()
{
//tr = GameObject.Find("pickup").GetComponent(RectTransform);
   
}
 
function OnTriggerEnter (Col : Collider)
{
    if(Col.tag == "Player")
    {
        //objeto.RectTransform.parent=tr.RectTransform;
        
        tr.position.x = 31;
        tr.position.y = 38;
        tr.position.z = 0;
    
    //tr.sizeDelta = new Vector2(31,38);
    }
}Los  tr.position.x = 31...no me dan error el script asi compila,con lo que no me fufnciona es con el parent, me dice que 'RectTransform' is not a member of 'UnityEngine.GameObject...no se si el tengo que poner de variable otro tipo,entiendo que si pero no he encontrado cúal Bueno, me ha servido mucho vuestra  ayuda, agradezco mucho vuestro tiempo y sineto mucho si me extendido demasiado.Muchas Gracias¡¡¡Saludos 
Se me olvidaba decir  que al objecto que cojo del suelo le he añadido un RectTransform... Gracias a todos  espero vuestras respuestas y una vez más agradezco vuestra amabilidad..Saludos¡¡ 

ya lo he conseguido podeis cerrar el hilo
[quote author=antoniomdk date=1438550748" data-ipsquote="" data-cite="antoniomdk" class="ipsQuote">Mira lo he probado y efectivamente los RecTransfrom actúan como Transform normales, de hecho heredan de esa clase. Lo que tienes que hacer es tener game object vacíos dentro del canvas donde tu quieras que se coloque el objeto y cuando quieras meterlo en el canvas, lo haces hijo de uno de eso gamobject y la transform.localposition = Vector3.zeroTen en cuenta que los RectTransform también tienen el eje Z así que  tendrás que ajustarlo.Te dejo la api del Transform para que le eches un vistazo:http://docs.unity3d.com/ScriptReference/Transform.html]http://docs.unity3d.com/ScriptReference/Transform.html[/quote]Ya lohe conseguido, gracias

pero pon la solucion hombre, por si alguien tiene un problema similar o simplemente le asalta la misma duda....

Buenas, La verdad es queno me habéis resuelto tanto jeje pero bueno si me hizo pensar antoniomdk...Pero vamos cualquiera sabría hacerloEl tema es que no se que tal rendirá el método pero lo que he hecho es mover los items.De todas formas si lees los comentarios creo que se entiende y por lo que veo en los foros con estos temas hay mucho "gañaneo" y la gente nuca explica nada por completo. Yo ya te decía que era la primera vez que me registraba en un foro y creía que me iba ayudar más, no sólo pore este tema(Hay un amigo que me ayuda que nadie le responde jeje).El caso es que ya lo sabía hacer ,lo que hecho es crear un inventario que se vea en medio del escenario,ya está¡function OnTriggerEnter (Col : Collider)
{
    if(Col.tag == "Player")
    {
        //objeto.RectTransform.parent=tr.RectTransform;
        
        transform.parent = slt1.transform; //Hacemos al objeto, hijo del objeto al que lo queremos pegar o mover
        transform.position = slt1.transform.position;//Igualamos la posición
        transform.localScale = new Vector3(1, 1, 2);
    }
}      /* transform pertenece al objeto al que le agregamos el script, en otras palabras el objeto que cogemos del suelo */Con esto y lo de antes está todo, lo único que quedaría es el tema de los slots y los ocpuados que es muy fácil con unos if...y unas flags

Trankilo, si a mi no me interesa... es por si a alguien le surge la misma duda,.

Etiquetas: