Lo se ahora sera como un personaje al acercarse a un objeto y presionar un botón podrá alzar dicho objeto y mover de un lado a otro, y también al presionar nueva mente un botón podrá dejar el objeto en el lugar que desee el jugador.
Primeramente, tenemos que tener un personaje al cual controlaremos, el cual ya tiene que tener los movimientos básicos; También por otra parte tenemos que tener objetos los cuales nuestro personaje levantara.
Para este ejemplo como personaje usare FPSController del Standard Assets y como objetos usare una esfera.
Para el segundo paso para comprender mejor separare esta en dos, la primera parte explicaremos las propiedades que tiene el personaje y la otra del objeto a levantar y soltar.
El personaje sera el que levante el objeto, entonces nos creamos dentro del personaje un objeto Empty.
Luego debemos poner un Collider al objeto Empty que creamos y posicionarlo delante de nuestro player, y tiqueamos que el Is Trigger
Volvemos a crear un Empty esta ves dentro del Empty que se creo a principio, y este posicionarlo donde queremos que se vea el objeto que alzaremos.
Al objeto que el personaje levantara y soltara le agregamos un Rigidbody y no modificamos ninguna de sus propiedades.
Después le agregamos un tag que tengamos o de lo contrario podemos crear uno en la parte donde dice Add Tag.
Por ultimo al objeto le agregamos un Collider, el cual se adapte mas a la forma de nuestro objeto y si deseamos podemos editar el Collider
En la esta parte veremos el funcionamiento del código que necesitaremos.
//Crearemos un objeto público para digamos que almacenar aquí el objeto
public GameObject almacenar;
//Luego creamos un private object y le decimos que este vacío esto para verificar si nuestro personaje está agarrando un objeto
private GameObject verificar = null;
//Usaremos el método de unity que es el OnTriggerStay, el cual sirve para poder detectar si hay Collicion con el objeto
private void OnTriggerStay(Collider other)
{
//aquí preguntaremos si se ocasiona la collicion con el tag que le pusimos al objeto si pasa eso entonces ira al siguiente if
if (other.gameObject.CompareTag("objeto"))
{
//en este siguiente if preguntaremos si se presionó una tecla que nosotros deseamos en este caso es la "Q" y también si nuestro verificador este vacío esto para que no podamos alzar dos objetos a la ves
if (Input.GetKey("Q") && verificar == null)
{
//En esta parte desactivaremos la gravedad del objeto para que no afecte a la hora de alzar el objeto ya que si lo dejamos el objeto se nos caerá hacia abajo
other.GetComponent<Rigidbody>().useGravity = false;
//también prenderemos el iskinematic del objeto para que este no choque con otros
other.GetComponent<Rigidbody>().isKinematic = true;
//luego en esta parte pondremos al objeto en la variable publica que creamos que pusimos de nombre almacenar
other.transform.position = almacenar.transform.position;
//después al objeto le decimos que sea hijo del player
other.gameObject.transform.SetParent(almacenar.gameObject.transform);
//y por último hacemos referencia del verificador con el objeto que alzamos
verificar = other.gameObject;
}
}
}
//En esta parte se ara el proceso de soltar el objeto
void Update()
{
//primero preguntamos si nuestro verificador es diferente a null y si es así entonces significa que tenemos un objeto en la mano
if (verificar != null)
{
//luego preguntaremos si presionamos una tecla que en este caso será la "E"
if (Input.GetKey("E"))
{
//si es volveremos a activar la gravedad a nuestro objeto
verificar.GetComponent<Rigidbody>().useGravity = true;
// y también desactivaremos el isKinematic
verificar.GetComponent<Rigidbody>().isKinematic = false;
//luego le quitamos el padre q le dimos, le quitamos de nuestra mano
verificar.gameObject.transform.SetParent(null);
// entonces al verificador le volvemos a poner que este en null
verificar = null;
}
}
}
Una ves terminado el código, le agregamos este cogido al primer Empty que creamos
En la parte del script recordemos que creamos un public para un game objet
Entonces ahí arrastramos el segundo Empty q creamos