Noticias

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

Tap To execute

Iniciado por akamaru, Septiembre 11, 2015, 07:57:58 PM

Tema anterior - Siguiente tema
Hola a todos!en esta ocasion traigo una pregunta que quiza sea muuy facil de responderEn un juego que estoy haciendo, necesito que al hacer "tap" sobre un gameobject pueda acceder a sus propiedades y ejecutar un script, algo a si como guardarlo en una variable, para mostrar en pantalla un UI con las opciones de ejecucion y luego de seleccionar la opcion deseada que se ejecute...buehh en resumen simplemente meter el gameobject en una variable al hacer tap sobre el, y hacer que muestre un panel UIgracias de antemano por su ayuda!!

Yo creo que lo mejor es hacerlo "independiente", me refiero a un objeto vacío que tenga un script que te sirva como gestor. Este script puede ser muy simple para empezar, necesitarás una variable GameObject (lógicamente), luego para hacer el "tap" tienes que lanzar un rayo desde una posición en pantalla, también necesitarás un hit para saber a qué objeto le has dado: para la posición en pantalla utiliza la variable position de la clase Touch, para el rayo utiliza la función Camera.Main.ScreenPointToRay y le metes la posición del Touch. Una vez con el rayo, verificas si le das a algo y con el hit sabrás a qué, ahora podrás guardarlo en una variable.El tema de acceder a un componente es un poco más complicado, ya que tienes que definir el tipo (el nombre del script) y si el objeto al que le das no lo tiene te tirará un error, de resto sería como siempre, acceder al componente y usarlo como quieras.http://docs.unity3d.com/ScriptReference/Input.GetTouch.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Input.GetTouch.htmlhttp://docs.unity3d.com/ScriptReference/Touch.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Touch.htmlhttp://docs.unity3d.com/ScriptReference/Camera.ScreenPointToRay.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Camera.ScreenPointToRay.htmlhttp://docs.unity3d.com/ScriptReference/Physics.Raycast.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Physics.Raycast.htmlhttp://docs.unity3d.com/ScriptReference/RaycastHit.html

Septiembre 15, 2015, 06:30:05 PM #2 Ultima modificación: Septiembre 15, 2015, 06:55:35 PM por akamaru
[quote author=juanma_teso" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="23122" data-ipsquote-contentcommentid="109667">Yo creo que lo mejor es hacerlo "independiente", me refiero a un objeto vacío que tenga un script que te sirva como gestor. Este script puede ser muy simple para empezar, necesitarás una variable GameObject (lógicamente), luego para hacer el "tap" tienes que lanzar un rayo desde una posición en pantalla, también necesitarás un hit para saber a qué objeto le has dado: para la posición en pantalla utiliza la variable position de la clase Touch, para el rayo utiliza la función Camera.Main.ScreenPointToRay y le metes la posición del Touch. Una vez con el rayo, verificas si le das a algo y con el hit sabrás a qué, ahora podrás guardarlo en una variable.El tema de acceder a un componente es un poco más complicado, ya que tienes que definir el tipo (el nombre del script) y si el objeto al que le das no lo tiene te tirará un error, de resto sería como siempre, acceder al componente y usarlo como quieras.[/quote]vale, muy completa tu respuesta, aun no entiendo muchas cosas, estoy leyendo y releyendo lo temas que me pusiste...de seguro necesitare mas ayuda adelante pero mil gracias Aver si entendí mas o menos1.- el script deberá estar en un gameobject vacío2.- creare un variable de tipo GameObject Donde mas tarde almacenaré el objecto que he tocado3.- utilizare "http://docs.unity3d.com/ScriptReference/Camera.html" rel="external nofollow date=1442005112]Camera.ScreenPointToRay" para lanzar el rayo desde la pocicion (X;Y) y darle a un objecto y "RaycastHit" para identificar y almacenar el objecto4.-una vez echo esto, hago normal y accedo a un avariable de un script y ya?

NOHme rindo no encuentro como utilizar estas herramientas juntasalguien por favor pudiera hacer un pequeño ejemplo?
ya he buscado en la web y sigo sin conseguir ENTENDERdebo acotar que realmente estoy urgido por favor ayuda 

Eso es lo que quieres hacer no? Maneras habrá muchas, a mí me parece buena esa. Y si se te atasca el script siempre puedes compartirlo y pedir ayuda.

[quote author=juanma_teso" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="23122" data-ipsquote-contentcommentid="110792">Eso es lo que quieres hacer no? Maneras habrá muchas, a mí me parece buena esa. Y si se te atasca el script siempre puedes compartirlo y pedir ayuda.[/quote]sii, el problema es que no se por donde empezar, deberia declara primero el "camera.ScreenPointToRay"?de ser asi, seria:
if (Physics.Raycast(ray, hit)) {
    var objectHit: Transform = hit.transform;
   
    // Do something with the object that was hit by the raycast.
}
eso fue lo que encontre, pero no entiendo...En la variable "hit" se guarda un RaycastHit  que aun no ha sido definido (creo)Ela variable "ray" se guarda una variable de tipo Ray que corresponde a "camera.ScreenPointToRay" (espero ir bien hasta ahí)Luego se comprueba... QUE SE COMPRUEBA??solo quiero almacenar el objeto al que le doy en una variable tipo GameObject para poder trabajar con eso.... 

Septiembre 16, 2015, 05:26:32 PM #6 Ultima modificación: Septiembre 16, 2015, 08:19:47 PM por akamaru
he encontrado lo que buscaba, me siento aliviado por que sigo progresando,gracias especiales a juanma-tesopero, como dije antes, de nuevo necesito algo de ayuda, este es el script que ya funciona, para seleccionar el objeto y desceleccionarlo:
import Unit***itor;
import UnityEngine;
import System.Collections;

private var objct : GameObject;
private var lastobjct : GameObject;
private var hit: RaycastHit;
private var step1 : Material;
var step2 : Material;
function Update ()
{
//solo cuando se presione el boton del mouse
if(Input.GetMouseButtonDown(0))
   {//disparamos desde la posicion del mouse un rayo
   var ray: Ray = GetComponent.<Camera>().ScreenPointToRay(Input.mousePosition);
   //igualamos el valor del rayo al raycast
        if (Physics.Raycast(ray, hit))
            {//obtenemos el trnasform del objeto encontrado
            var objectHit: Transform = hit.transform;
            //obtenemos el objeto y lo asignamos a la variable de nuevo objeto
            objct = objectHit.gameObject;
            // si no existe un ultimo objeto seleccionado
            if(lastobjct == null)
               {
               //instaciamos el material del nuevo objeto
               step1 = objct.GetComponent.<Renderer>().material;
               //le aplicamos otro material
               objct.GetComponent.<Renderer>().material = step2;
               // actualizamos la definicion del ultimo material seleccionado
               lastobjct = objct;
               }
            // si existe un ultimo objeto selecionado
            else{
               // si el objeto seleccionado es diferente del ultimo
               if(objct != lastobjct)
                  {
                  //se reasigna el material original al ultimo objeto seleccionado
                  lastobjct.GetComponent.<Renderer>().material = step1;
                  //se reinicializan las variables objct, lastobjct y step1
            objct = null;
            lastobjct = null;
            step1 = null;
                  }
               }
            // aqui ira el codigo para acceder a el script de "objct"
      }
   else
      {
            // aqui ira el codigo para desactivar el script de "objct"
            //se reasigna el material original al ultimo objeto seleccionado
            lastobjct.GetComponent.<Renderer>().material = step1;
            //se reinicializan las variables objct, lastobjct y step1
      objct = null;
      lastobjct = null;
      step1 = null;
      }
   }
}
ahora necesito acceder efectivamente a un script de el objeto guardado en "objct" y ejecutar una función de este script agradezco la ayuda que me puedan dar, en aras de completar esta fase de mi proyecto

alguna sugerencia con respecto a este script?
algo de ayuda para lo que me falta?
como siempre, muchas gracias

Pues ya casi lo tienes, tienes que tener una variable del tipo script, luego referenciarla y acceder a ella.http://unity3d.com/es/learn/tutorials/modules/beginner/scripting/getcomponent?playlist=17117

gracias men, aunque ya lo solucioné jejejje
muchas gracias

Etiquetas: