rb.addforce не отвечает, даже если столкновение работает - PullRequest
0 голосов
/ 04 сентября 2018

как дела? Я работаю над простой механикой отбрасывания, при которой, если мой персонаж сталкивается с именем «враг», жесткое тело игрока, которое перефразируется как (rb), имеет добавленную силу «назад».

Вот мой код, пожалуйста, обратитесь к тому, где я обведу звездочкой.

публичный класс Move: MonoBehaviour {

public float speed;

private Rigidbody rb;

public int health;
private float knockback;


// Use this for initialization
void Start()
{
    rb = GetComponent<Rigidbody>();
    knockback = 2f;

}

void OnCollisionEnter(Collision col)
{
    if (col.gameObject.name == "enemy")
    {
        health = health - 20;  //**this works**
        rb.AddRelativeForce(Vector3.forward * knockback); //**but this doesnt :c **
    }
}

void death()
{
    if (health <= 0)
    {
        print("i died");
    }
}

void playerWalk()
{
    var x = Input.GetAxis("Horizontal") * Time.deltaTime * 75f;
    var z = Input.GetAxis("Vertical") * Time.deltaTime * 5f;

    transform.Rotate(0, x, 0);
    transform.Translate(0, 0, z);

}
void Update()
{
    death();
    playerWalk();

}

}

Проблема, как вы уже догадались, Мои триггеры не работают. Моё здоровье = здоровье - 20; линия работает, но мой rb.addforce нет.

В чем здесь проблема? Спасибо:)

изменить 2 #

Просто хочу отредактировать это и сказать, что я выяснил проблему. Проблема была в том, что мое значение с плавающей точкой было недостаточно высоким xD

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Попробуйте удалить deltaTime:

     rb.AddRelativeForce(Vector3.forward * knockback);

Значение по умолчанию ForceMode для AddRelativeForce равно AddForce и не требует масштабирования времени.

0 голосов
/ 11 сентября 2018

Я не эксперт, но это мой ответ .... Вы прикрепили жесткое тело к преобразованию .... таким образом, изменяя положение твердого тела, равное положению преобразования ... Вы вызываете два метода в обновлении ... так что они будут вызываться непрерывно .... так что вы перемещаете направление преобразования вперед с помощью клавиши со стрелкой вверх ... Но вы добавляете силу только при входе при столкновении ... ввод при столкновении вызывается только один раз, но Метод playerwalk вызывается непрерывно ... поэтому добавленная сила не распознается .... Проверьте эту ссылку http://unityweltech.blogspot.com/2018/09/rbforce-is-not-responding.html?m=1

0 голосов
/ 04 сентября 2018

Как вы написали, фрагмент «rb» - это не поле, а локальная переменная внутри метода «Start». Если вы получаете исключение в упомянутой строке, возможно, это из-за этого. Если вы хотите, чтобы ´rb´ было полем, доступным для всех методов класса, вам нужно объявить его в теле класса, например:

public int health;
private float knockback;
private RigidBody rb;

// (...) the rest of your code

Если это не так, просто скажите мне и дайте нам больше информации о вашей проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...