Нужен совет по поводу жесткого тела gameObject, доступ к которому осуществляется с помощью триггера.

Я пытаюсь сделать прыжковые площадки для своей платформенной игры в единстве, используя С#.

Я в тупике, как добавить силу другому игровому объекту с помощью триггеров?

пытался использовать rb = gameobject.getcomponent<rigidbody> в пустом запуске, не сработало.

это мой код ближе всего к тому, что я ожидаю

public float force = 1500f;

void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player")
        {
            other.GetComponent<Rigidbody>().AddForce(Vector3.up * force * Time.deltaTime);
            Debug.Log("trigger!");
        }
    }

Я ожидал, что если мой игрок приземлится на спусковой крючок, он поднимется вверх, но это не так. Я также должен отметить, что в журналах консоли отображается «триггер!». так что есть ошибка и сила.

Нет сообщений об ошибках.


person jaaaco    schedule 30.08.2019    source источник


Ответы (2)


Time.deltaTime — это очень маленькое число, и оно вам не нужно, когда функция вызывается один раз. Вы также можете попробовать other.GetComponent<Rigidbody>().AddForce(Vector3.up * force, ForceMode.VelocityChange);

Подробнее о методе AddForce можно прочитать здесь: Rigidbody.AddForce

person Dave    schedule 30.08.2019

Я знаю, что опаздываю, но ты можешь попробовать использовать свой прыжок из игры. Я имею в виду, что вы заставили игрока прыгать, если он нажимает пробел. Вы можете использовать это повторно.

это мой прыжок

private void Jump()
{
    if (grounded && readyToJump)
    {
        readyToJump = false;

        //Add jump forces
        rb.AddForce(Vector2.up * jumpForce * 1.5f);
        rb.AddForce(normalVector * jumpForce * 0.5f);

        //If jumping while falling, reset y velocity.
        Vector3 vel = rb.velocity;
        if (rb.velocity.y < 0.5f)
            rb.velocity = new Vector3(vel.x, 0, vel.z);
        else if (rb.velocity.y > 0)
            rb.velocity = new Vector3(vel.x, vel.y / 2, vel.z);

        Invoke(nameof(ResetJump), jumpCooldown);
    }
}

Теперь вы можете сделать что-то вроде этого

private void OnCollisionEnter(Collision collision)
{
    jumpPad JumpPad = collision.collider.GetComponent<jumpPad>();
    if (JumpPad != null)
    {
        //Add jump forces
        rb.AddForce(Vector2.up * jumpPadForce * 1.5f);
        rb.AddForce(normalVector * jumpPadForce * 0.5f);

        //If jumping while falling, reset y velocity.
        Vector3 vel = rb.velocity;
        if (rb.velocity.y < 0.5f)
            rb.velocity = new Vector3(vel.x, 0, vel.z);
        else if (rb.velocity.y > 0)
            rb.velocity = new Vector3(vel.x, vel.y / 2, vel.z);
    }
}

Это самое простое и быстрое решение. Просто создайте новую силу прыжка и назовите что-то вроде силы прыжковой площадки. Вот и все.

person StefanSubotic    schedule 17.10.2020