Resetear la posición del coche en Unity cuando se sale de la carretera
Hola buenas, resulta que tengo un juego de carreras hecho en Unity y lo único que me falta es poder resetear la posición del coche cuando se sale de la carretera pulsando una tecla. He probado diferentes métodos como miCoche.transform.position = new Vector3 (valorX, valorY, valorZ); pero no me funciona como quiero, me sale el coche torcido y a veces fuera de la carretera.
Quiero que me lo restaure a la posición en la que se sale, choca o tiene cualquier otra incidencia (no al principio).
Gracias por adelantado.
Cómo resetear la posición del coche en Unity cuando se sale de la carretera
Para resetear la posición del coche en Unity cuando se sale de la carretera, puedes utilizar el siguiente código:
Código:
// Devuelve la posición del coche en el momento en el que se sale de la carretera
Vector3 posiciónSalida = coche.transform.position;
// Si el coche se sale de la carretera
if (coche.transform.position.x < -5) {
// Restaura la posición del coche a la posición en la que se salió
coche.transform.position = posiciónSalida;
}
Este código funciona de la siguiente manera:
En primer lugar, se utiliza el método transform.position para obtener la posición actual del coche.
A continuación, se comprueba si la posición del coche es inferior a -5 en el eje X. Esto significa que el coche se ha salido de la carretera por la izquierda.
Si el coche se ha salido de la carretera, se utiliza el método transform.position para restaurar la posición del coche a la posición en la que se salió.
Para evitar que el coche salga torcido o fuera de la carretera, puedes utilizar el siguiente código:
Código:
// Devuelve la dirección del coche en el momento en el que se sale de la carretera
Quaternion direcciónSalida = coche.transform.rotation;
// Si el coche se sale de la carretera
if (coche.transform.position.x < -5) {
// Restaura la posición del coche a la posición en la que se salió
coche.transform.position = posiciónSalida;
// Restaura la dirección del coche a la dirección en la que se salió
coche.transform.rotation = direcciónSalida;
}
Este código funciona de la siguiente manera:
En primer lugar, se utiliza el método transform.rotation para obtener la dirección actual del coche.
A continuación, se comprueba si la posición del coche es inferior a -5 en el eje X. Esto significa que el coche se ha salido de la carretera por la izquierda.
Si el coche se ha salido de la carretera, se utiliza el método transform.position para restaurar la posición del coche a la posición en la que se salió.
A continuación, se utiliza el método transform.rotation para restaurar la dirección del coche a la dirección en la que se salió.
Por último, para que el coche se resetee cuando pulses una tecla, puedes utilizar el siguiente código:
Código:
// Devuelve la posición del coche en el momento en el que se sale de la carretera
Vector3 posiciónSalida = coche.transform.position;
// Devuelve la dirección del coche en el momento en el que se sale de la carretera
Quaternion direcciónSalida = coche.transform.rotation;
// Escucha el evento de pulsación de la tecla "R"
void OnKeyPressed(KeyCode key) {
// Si se ha pulsado la tecla "R"
if (key == KeyCode.R) {
// Restaura la posición del coche a la posición en la que se salió
coche.transform.position = posiciónSalida;
// Restaura la dirección del coche a la dirección en la que se salió
coche.transform.rotation = direcciónSalida;
}
}
Este código funciona de la siguiente manera:
En primer lugar, se declara una variable para almacenar la posición del coche en el momento en el que se sale de la carretera.
A continuación, se declara una variable para almacenar la dirección del coche en el momento en el que se sale de la carretera.
Después, se crea un evento de pulsación de la tecla "R".
En el evento de pulsación de la tecla "R", se comprueba si se ha pulsado la tecla.
Si se ha pulsado la tecla, se utiliza el código anterior para restaurar la posición y la dirección del coche.
Espero que esto te ayude.
Un saludo. :ok:
Restaurar la posición y dirección del coche al salir de la carretera
El error que estás recibiendo es porque estás intentando inicializar un campo no estático con una referencia a un campo no estático. En este caso, estás intentando inicializar el campo micoche con una referencia al campo micoche del mismo objeto.
Para solucionar este problema, tienes que inicializar el campo micoche con una referencia a un objeto GameObject. Puedes hacerlo de la siguiente manera:
Código:
public GameObject micoche;
// ...
void Awake()
{
// Inicializa el campo `micoche` con el objeto `GameObject` que representa al coche
micoche = GameObject.FindGameObjectWithTag("Coche");
}
Una vez que hayas inicializado el campo micoche, podrás utilizarlo en el método OnKeyPressed() sin problemas.
Prueba a ver con este código modificado:
Código:
using UnityEngine;
using System.Collections;
using UnityStandardAssets.Vehicles;
using System.Collections.Generic;
using UnityEngine.UI;
public class Restaurarcoche : MonoBehaviour
{
public GameObject micoche;
// Devuelve la posición del coche en el momento en el que se sale de la carretera
Vector3 posiciónSalida = micoche.transform.position;
// Devuelve la dirección del coche en el momento en el que se sale de la carretera
Quaternion direcciónSalida = micoche.transform.rotation;
// Escucha el evento de pulsación de la tecla "R"
void OnKeyPressed(KeyCode key)
{
// Si se ha pulsado la tecla "N"
if (key == KeyCode.N)
{
Debug.Log("has pulsado N");
// Restaura la posición del coche a la posición en la que se salió
micoche.transform.position = posiciónSalida;
// Restaura la dirección del coche a la dirección en la que se salió
micoche.transform.rotation = direcciónSalida;
}
}
// Inicializa el campo `micoche` con el objeto `GameObject` que representa al coche
void Awake()
{
micoche = GameObject.FindGameObjectWithTag("Coche");
}
}
Dime a ver si esto te ayuda un poco mejor.
Un saludo. :ok: