Я пытаюсь реализовать физику, подобную этой игре:Подвижная и балансировка HingeJoint2D с помощью мышки
https://sites.google.com/site/newstudyhall/games/tilt-2
У меня есть спрайт «рука», которая является кинематической и иметь HingeJoint2D на нем. Другой спрайт «Stick», который не является кинематическим, связан с HingeJoint2D. Я хочу сбалансировать палку на руке, двигая рукой.
Я прилагаю следующий сценарий с ручкой. Я перемещаю руку с помощью мыши и применяю силу на палке в противоположном направлении движения мыши. Но это не работает, как в вышеупомянутой игре.
Есть ли какой-либо компонент в Unity, который я могу использовать для создания этого результата или как его реализовать?
private Vector3 screenPoint;
private Vector3 offset;
void FixedUpdate()
{
//ON CLICK
if (Input.GetButtonDown("Fire1"))
{
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10));
}
//ON DRAG
if (Input.GetButton("Fire1"))
{
Vector3 cursorPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10);
//HAND POSITION CHANGE WITH MOUSE DRAG
Vector2 cursorPosition = Camera.main.ScreenToWorldPoint(cursorPoint) + offset;
transform.position = cursorPosition;
//APPLY FORCE ON TRAY IN OPPOSITE DIRECTION OF MOUSE MOVEMENT
GameObject.Find("Stick").GetComponent<Rigidbody2D>().AddForce(((cursorPosition.normalized * 5)) * -1, ForceMode2D.Impulse);
}
}
Я вижу, что вы уже используете rigidbodies, я думаю, вам просто нужно использовать параметр силы тяжести уже имеющимся, хотя вам, возможно, придется настроить его немного, чтобы получить желаемый эффект balacing для игры. –