Ошибка в игре в тире с Rigidbody2D.Velocity - PullRequest
0 голосов
/ 28 мая 2018

Итак, я делаю игру в единстве, в которой объект будет разбиваться в направлении (единичном векторе) щелчка мышью игрока.Основываясь на переменных скорости и тире, которые я сделал и установил в инспекторе, он обычно будет работать, так как расстояние, разбитое объектом, и его скорость обычно постоянны.Однако иногда расстояние до черты объекта будет выключено.Я попытался решить проблему путем регистрации расстояния между приборной панелью и скорости объекта, и я обнаружил, что иногда одна или обе переменные могут быть случайным значением по какой-то причине, по которой я пропускаю.На большинстве кликов, хотя переменные имеют одинаковое число.Вот мой код:

[RequireComponent(typeof(Rigidbody2D))]
public class DashController : MonoBehaviour
{
Rigidbody2D rigidbody;
public float dashSpeed;
public float dashTime; //dash time for inspector use
float codeDashTime; //dash time for code use
bool dashing;
Vector2 direction;
Vector2 startPosition;
Vector2 endPosition;
float distance;

private void Start()
{
    rigidbody = GetComponent<Rigidbody2D>();
    codeDashTime = dashTime;
    dashing = false;
}

private void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        //need to subtract the current postion from the target postion
        direction = (Camera.main.ScreenToWorldPoint(Input.mousePosition) - this.transform.localPosition);
        startPosition = this.transform.localPosition; // used to see the distance player dashes
        dashing = true;
    }

    if (dashing)
    {
        Dash();
    }
}

void Dash()
{
    if (codeDashTime > 0)
    {
        rigidbody.velocity = direction.normalized * dashSpeed;
        codeDashTime -= Time.deltaTime;
    }
    else
    {
        Debug.Log(rigidbody.velocity.magnitude);// used to see the velocity the player travels at
        Debug.Log(direction.normalized.magnitude);
        rigidbody.velocity = Vector2.zero;
        endPosition = this.transform.localPosition; // used to see the distance player dashes
        distance = Vector2.Distance(startPosition, endPosition);// used to see the distance player dashes
        Debug.Log(distance); // used to see the distance player dashes
        dashing = false;
        codeDashTime = dashTime;
    }
}

}

Извините, если мой код немного перемешан.Я много чего переделывал, тестируя разные решения, но ничего не получалось.Мое лучшее предположение, что, возможно, что-то с кадрами портит codeDashTime, но я слишком новичок в Unity и C #, чтобы знать.Любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 28 мая 2018

Вся физика должна работать на FixedUpdate, а входные данные обычно используются при обновлении, попробуйте разделить их, чтобы улучшить поведение Rigidbody.

...