¡EDITAR! Así que cargué un FRESH PROJECT, creé un círculo y le agregué mi script. Cuando presiono iniciar, el círculo se inicia en un ángulo de 45 grados, funciona perfectamente bien. También intenté agregar una fuerza adicional horizontal en otro objeto en mi proyecto original y resultó en un teletransporte nervioso hacia la derecha.
Algo está roto dentro de mi proyecto relacionado con la fuerza horizontal... ¡¿Qué podría ser?!
Esto nos ha vuelto locos a mí y a un brote durante 24 horas y he buscado por todas partes, pero no he encontrado ningún problema similar o soluciones aplicables.
Estoy desarrollando un juego de desplazamiento lateral al estilo mario y el concepto es simple: golpea la caja, una moneda salta con fuerza vertical y horizontal. Este es el ÚNICO código hasta ahora en el script adjunto a la moneda.
void Start() { forceUp = new Vector2(0, upForce); forceSide = new Vector2(sideForce, 0); GetComponent<Rigidbody2D>().AddForce(forceUp, ForceMode2D.Impulse); GetComponent<Rigidbody2D>().AddForce(forceSide, ForceMode2D.Impulse); }Este es el código que instancia la moneda en el script de caja:
private void OnCollisionEnter2D(Collision2D collision) { RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, 1.0f, layerMask); if (!isOpen && hit.collider != null) { isOpened(); Instantiate(openPrize, new Vector3(transform.position.x, transform.position.y+1.0f, transform.position.z), transform.rotation); } }el problema es: la moneda "subirá" una distancia directamente relacionada con el valor que introduzco en la variable "fuerza ascendente".
La moneda no se moverá horizontalmente en absoluto. Si elevo la variable horizontal hasta un número estúpido como 5000, se teletransportará una corta distancia hacia un lado.
el animador de la casa prefabricada tiene habilitado "Aplicar movimiento raíz".
Lo descubrí... Hay una configuración en el animador del prefabricado que estoy usando llamada "Aplicar movimiento raíz". Nunca lo he usado, no sé qué hace, pero estaba marcado de forma predeterminada en el activo que importé y eso de alguna manera detenía el movimiento. ¡Gracias por tu ayuda!
Creo que tu modo de fuerza probablemente no sea correcto.
Aplicar la fuerza de impulso al instante. [...] Este modo es útil para aplicar fuerzas que suceden instantáneamente, como las fuerzas de explosiones o colisiones.
Probablemente ForceMode2D.Force es mejor.
Este modo es útil para configurar física realista donde se necesita más fuerza para mover objetos más pesados.
Pero tal vez sea porque aplicas fuerzas a la vez. Prueba esto:
// Force up await Task.Delay(TimeSpan.FromSeconds(1)); // Force side