El problema es simple, pero soy nuevo en Unity.
Quiero agregar una fuerza al hacer clic en el objeto. Como una patada.
Este es mi código:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class box : MonoBehaviour { Rigidbody2D rb; void Start() { rb = GetComponent<Rigidbody2D>(); } void Update() { if(Input.GetMouseButtonDown(0)) { rb.AddForce(Vector2.up * 17f, ForceMode2D.Impulse); } } }Pero no funciona porque solo agrega una fuerza genérica.
Esta pregunta no está clara, debe proporcionar más información, pero si desea implementar una fuerza similar a una "patada" (supongo que como en el fútbol), entonces debe calcular la dirección desde la que está pateando la pelota.
Sugiero algo como esto:
rb.AddForce(_kickDirection * _kickForce, ForceMode2D.Impulse)kickDirection es hacia donde deseas patear.
Tu código funciona bien. Solo asegúrese de tener su caja y los componentes Rigidbody2D conectados a su objeto de juego, así:
No es cuando hace clic en el objeto, sino donde sea que haga clic de acuerdo con su código. Si esto no es lo que querías, necesitas explicar mejor tu pregunta.
Editar:
Para proporcionar una "fuerza de patada", necesita saber dónde golpeó el clic. Encuentra algún código para eso:
public class click : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; Debug.DrawRay(ray.origin, ray.direction * 20, Color.white); if (Physics.Raycast(ray, out hit)){ if (hit.collider != null) { Debug.Log("hit!"); } else { Debug.Log("no hit"); } } } } } Debe asegurarse de que su objetivo tenga un componente colisionador. Con hit.point puedes obtener la posición. Revisa los documentos .
Una vez que tenga la posición de golpe, puede definir en qué dirección desea aplicar la fuerza. Para el ejemplo de fuerza de patada, puede ser la dirección opuesta a la que va desde el centro de su caja hasta el punto de golpe: Vector3 forceDir = boxTransform.position - hit.point;