En este momento estás viendo Cómo detener un objeto de juego después de llegar a una determinada posición

 – Unity

Cómo detener un objeto de juego después de llegar a una determinada posición – Unity

Cómo detener un objeto de juego después de llegar a una determinada posición

– UnityAssets3Free

hola , por aqui Daniel y para hoy os traigo
esta nueva pregunta

Estoy tratando de descubrir cómo hacer que mi jugador se detenga cuando llega a una determinada posición, pero nada parece funcionar. Lo que quiero es que cuando el objeto del juego alcance una determinada posición, el objeto del juego deje de moverse abruptamente. Estoy agregando fuerza a RigidBody2d para que el objeto del juego se mueva y se encoja uniformemente, pero quiero que se detenga cuando llegue a cierta posición. Estoy tratando de hacer esto como una restricción de límite. También intenté usar solo Collider2D como umbral, pero aún así el objeto del juego simplemente se mueve hacia la derecha y Collider2D no se configuró como disparador. Esto es para un juego móvil, así que estoy usando la pantalla táctil.

Esto es lo que tengo.

private void Update()

    MovePlayer();


private void MovePlayer()
{
    if (Touchscreen.current.primaryTouch.press.isPressed)
                
        Vector2 touchPosition = Touchscreen.current.primaryTouch.position.ReadValue();
        Vector3 worldPosition = mainCamera.ScreenToWorldPoint(touchPosition);

        moveDirection = worldPosition - transform.position;
        moveDirection.z = 0f;
        moveDirection.Normalize();            
    
    else
    
        moveDirection = Vector3.zero;
    

private void FixedUpdate()

    if (moveDirection == Vector3.zero)  return; 

    rb.AddForce(moveDirection * movementForce * Time.deltaTime, ForceMode2D.Force);
    rb.velocity = Vector3.ClampMagnitude(rb.velocity, velocity);

    if (transform.position.y >= 4f)
    
        rb.velocity = Vector2.zero;
    

1 respuesta 1

Creo que uno de los problemas podría ser el

if (moveDirection == Vector3.zero)  return; 

por lo tanto, si no hay una entrada del usuario, nunca llegará a la verificación de posición.

Debes tratarlos por separado.

private void FixedUpdate()

    var position = rb.position;

    if (position.y >= 4f)
    
        rb.velocity = Vector2.zero;
        position.y = 4f;
        rb.position = position;
    

    if (moveDirection == Vector3.zero) return;

    rb.AddForce(moveDirection * movementForce * Time.deltaTime, ForceMode2D.Force);
    rb.velocity = Vector3.ClampMagnitude(rb.velocity, velocity);       

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

eso es todo,hasta la proxima

Deja una respuesta