Quiero hacer una puerta delizable para una nave sci-fi y quiero q la puerta se translade pero en un tiempo determinado marque el parrafo en rojo cuando ago click E se mueve pero de golpe llega a la ubicacion y no como hacerprivate var guiShow : boolean = false;var isOpen : boolean = false;
var objVel:int = 10;
var door : GameObject;var rayLength = 10;function Update()
{
var hit : RaycastHit;
var fwd = transform.TransformDirection(Vector3.forward);
if(Physics.Raycast(transform.position, fwd, hit, rayLength))
{
if(hit.collider.gameObject.tag == "Door")
{
guiShow = true;
if(Input.GetKeyDown("e") && isOpen == false)
{
door.transform.Translate(Vector3(0,20,0) * objVel * Time.deltaTime);
isOpen = true;
guiShow = false;
}
else if(Input.GetKeyDown("e") && isOpen == true)
{
door.animation.Play("Door2");
isOpen = false;
guiShow = false;
}
}
}
else
{
guiShow = false;
}
}function OnGUI()
{
if(guiShow == true && isOpen == false)
{
GUI.Box(Rect(Screen.width / 2, Screen.height / 2, 100, 25), "E");
}
if(guiShow == true && isOpen == true)
{
GUI.Box(Rect(Screen.width / 2, Screen.height / 2, 100, 25), "E");
}
}
Claro que llega rapido. Le has puesto de velocidad 200!!! Aunque lo multipliques por deltaTime sigue siendo muchisimo (incluso 20 es mucho). Yo le pondria... 7 de velocidad mas o menos (multiplicado por deltaTime pero eso lo obvio). Dos consejos: -Usa floats en vez de ints ya que puedes sacar resultados mas exactos y por tanto mas a tu gusto-Donde pones door.transform.Translate(Vector3(0,20,0) * objVel * Time.deltaTime); usa Vector3.up (es decir, (0,1,0) ) asi la velocidad sera objVel * Time.deltaTime y... Bueno en mi opinion es mas sencillo Suerte
ahora solo se mueve unos centimetros ya le puse Vector3.up y se mueve hacia ariba 2 o 3 centimetros
Claro que solo se va a mover a saltos o pocos cm, porque lo has puesto en el Update pero dentro de unas condiciones, estás diciendo que el movimiento se produzca cuando : if(Input.GetKeyDown("e") && isOpen == false), eso es un instante porque el objecto solo se mueve en el instante cuando pulsas la tecla, después no. Translate es una función que calcula el movimiento cada fotograma por tanto para que se mueva tiene que ser llamada continuamente. Después de darte esta chapa porque quiere que lo comprendas, no solo lo pongas sin saber; te propongo una solución:Puedes sacar el Translate de cualquier condicional y la dirección le pones una variable tipo Vector3 o Vector2. Luego pones que si la puerta esta abierta la dirección sea la que quieras que se mueva y si está cerrada no. Además deberías añadirle un trigger o una distancia de carrera de la puerta, sino se moverá infinitamente.Saludos
[quote author=antoniomdk date=1437430964" data-ipsquote="" data-cite="antoniomdk" class="ipsQuote">Claro que solo se va a mover a saltos o pocos cm, porque lo has puesto en el Update pero dentro de unas condiciones, estás diciendo que el movimiento se produzca cuando : if(Input.GetKeyDown("e") && isOpen == false), eso es un instante porque el objecto solo se mueve en el instante cuando pulsas la tecla, después no. Translate es una función que calcula el movimiento cada fotograma por tanto para que se mueva tiene que ser llamada continuamente. Después de darte esta chapa porque quiere que lo comprendas, no solo lo pongas sin saber; te propongo una solución:Puedes sacar el Translate de cualquier condicional y la dirección le pones una variable tipo Vector3 o Vector2. Luego pones que si la puerta esta abierta la dirección sea la que quieras que se mueva y si está cerrada no. Además deberías añadirle un trigger o una distancia de carrera de la puerta, sino se moverá infinitamente.
Sólo texto | Texto con Imágenes