Noticias

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

Agarrar un objeto y soltarlo en otra zona.

Iniciado por Phantom3D, Marzo 24, 2017, 12:59:18 PM

Tema anterior - Siguiente tema
Hola muy buenas, no entiendo de códigos y ando mirando scripts y videotutoriales , foros y otras cosas, no se tampoco muy bien si preguntarlo por aquí, pero ando haciendo una capsula, que se mueve con teclado a sus direcciones correctas, y ando haciendo pruebas con scripts y java y todo eso. La duda es que en el proyecto, puedo empujar cajas, abrir puertas en rotación, pero... estoy intentando mirar y/o encontrar, pues no lo encuentro, algún script o tutorial que explique como ir con la capsula andando por el escenario, acercarme a un "barril o caja", que ésta sea "recogida" por el player y moverla a otro sitio de la sala. Pues buscando como mover cubos o barriles, o son con el ratón, o en primera persona utilizando códigos antiguos que no funcionan.
 
El resumen es ese, alguien sabría explicar o linkear alguna explicación para hacer : "acercarse con el personaje al barril que está en un sitio, agarrarlo con el jugador, y llevarlo a otro sitio de la habitación" (en tercera persona)?
 
Gracias.


Cita de: Phantom3D date=1490356758Hola muy buenas, no entiendo de códigos y ando mirando scripts
   


Creo que ahí lo resumiste todo jajaj
 
 


Si es "agarrar" algo pensalo desde lo basico, cada vez que tomas algo lo haces "parte de vos" hasta que lo soltas, es como para guiarte mas o menos. Cuando se den las condiciones necesarias para que esto ocurra (if's ,switch, trigger, calculo , etc) en ese momento le impones al objeto que se hijo del objeto agarrador (el padre). Esto es muy simple y segun el juego puede quedar bien o mal, no es lo ideal , cada vez que agarras algo lo desplazas junto con vos, (en Unity enparentar implica tambien modificar la escala). pero para arrancar esta bien. Ya si lo que queres es un agarre a lo penumbra/amnesia la cosa es mucho mas compleja para el nivel de lo que dije aca, se meten otros calculos, fisicas y colisiones. Pero te diria que arranques por ahi, si no sabes que es enparentar, que es un obj padre o hijo, ya te diria que arranques mas de abajo y te olvides de este caso particular que intentas resolver, un buen lugar los tutoriales de Unity oficial o el mismo manual de Unity. No la referencias porque es mas especifico de codigo, primero está la teoria.
 
saludos

Marzo 27, 2017, 09:24:35 AM #5 Ultima modificación: Marzo 27, 2017, 09:25:20 AM por Phantom3D
Bueno de momento estoy con las puertas, teleporters, cambios de nivel, gravedad, agua, luces, etc....  ya lo de coger una caja y moverla de sitio.... las dejaré para mi compi que es la que anda aprendiendo el code. yo de momento voy usando scripts de tutoriales e implementando acciones para que mi compi las programe qndo sepa :)
 
Gracias por la respuest :)

Buenas, lo que puedes hacer es crear un script que te cree un "Fixed Joint", esto lo que hace es "unir" dos objetos y el movimiento que hagas con uno se ve reflejado en el otro, es decir, si mueves el objeto hacia arriba el otro realiza la misma acción. 
 
¿Cómo lo implementaría yo? Haciendo un raycast en tus "¿Pinzas de la nave? Con lo que agarres el barril vamos..." y una vez que ese "raycast" toque otro "GameObject" las pinzas pongan como objeto de "Fixed Joint" a tu barril tocado con el "Raycast".
 
A todo esto le tendrás que añadir un "RigidBody" (Cuando creas un FixedJoint se crea directamente un RigidBody, pero le tendrás que decir que es "Kinematic" seguramente, ya que para soltarlo vas a tener que hacer como una especie de gatillo).
 
 
 
Que tengas un buen día y saludos desde España


using UnityEngine;
public class DragDropObject : MonoBehaviour {

private GameObject selected; //esta variable guarda el gameobject seleccionado
void Update () {
   
   if(Input.GetMouseButtonDown())
   {   //Cuando haces click con el mouse izq
      if(selected==null)selected=Raycast();//Si la variable selected es null agregara el gameobject seleccionado
      else if(selected!=null || selected == Raycast()) selected = null;//Si ya hay uno seleccionado lo desselecciona.
   }
   if(selected!=null)
   { //Mientras el seleccionado no sea null lo movera con el mouse
      Vector3 safeZ = Mpos();
      safeZ.z = selected.transform.position.z;
      selected.transform.position = safeZ;
   }
}
GameObject Raycast ()//Retorna un raycast, si no se hace click en un object retornara null
{
   RaycastHit vHit = new RaycastHit();
         Ray vRay = Camera.main.ScreenPointToRay(Input.mousePosition);
         if(Physics.Raycast(vRay, out vHit, 1000))
         {
             return vHit.transform.gameObject;
         }
    return null;
}
Vector3 Mpos () //Retorna la posicion del mouse
{
    Vector3 v3 = Input.mousePosition;
      v3.z = 10.0f;
      v3 = Camera.main.ScreenToWorldPoint(v3);
         return v3;
}
}

 
Creo que no tiene ningun error, lo hice directamente aqui. este script seleccionara cualquier gameobject, ya es cosa tuya aplicarlo como queires.

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE(▄▀)_๑۩۞۩๑ 



Etiquetas: