Народ подскажите ,пожалуйста, пытался сделать управление под действием сил, чтобы скорость постепенно набиралась и убывала, а получилось что попало. Корабль начинает лететь в указанном направлении, а потом его уносит вперед какая-то сила, не могу врубиться где накосячил. Linear drag пытался менять, нечего не помогло и на 0, и на других значениях улетает!!! Если этот же код использую без AddForce то все идеально работает....
Код
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
public float speedRotation = 1.2f;
public float speed = 0.05f;
float inputX;
float inputY;
Rigidbody2D rb;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
//извлечение информации оси
inputX = Input.GetAxis("Horizontal");//лево-право
inputY = Input.GetAxis("Vertical"); //верх-низ
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.W)) //вперед
rb.AddForce(rb.transform.position += rb.transform.up * speed);
if (Input.GetKey(KeyCode.S)) //назад
rb.AddForce(rb.transform.position -= rb.transform.up * speed);
if (Input.GetKey(KeyCode.A) && Input.GetMouseButton(1)) //влево
rb.AddForce(rb.transform.position -= rb.transform.right * speed);
if (Input.GetKey(KeyCode.D) && Input.GetMouseButton(1)) //вправо
rb.AddForce(rb.transform.position += rb.transform.right * speed);
if (!Input.GetMouseButton(1))
{
Quaternion rotate = Quaternion.AngleAxis(-inputX * speedRotation, Vector3.forward); //вращение
rb.transform.rotation *= rotate;
}
}
}
Добавлено (13 июня 2017, 18:03)
---------------------------------------------
ыыы нашел!! нужно было убрать первое слагаемое и просто оставить знак)
Добавлено (13 июня 2017, 18:11)
---------------------------------------------
Тогда другой вопрос) как корректно сделать движение назад и поворот одновременно (на подобии движения автомобиля), при левой клавише+назад корабль летел влево. Я нашел решене, но мне кажется слишком сложно и мудрино с if оператором.. менять знак оси если одновременно S+A(D) нажаты