Unity OnCollisionExit () не работает - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть объект игрока и рампа под названием StartRamp.Я использую приведенный ниже код, чтобы изменить положение моих игроков и вращение к поверхности вне рампы.Когда мой игрок находится вне рампы, я хочу изменить вращение игрока по оси x, чтобы оно составляло только 50, -50.

Но мое утверждение else, когда поверхность имеет значение false, не выполняется.Что заставляет меня думать, что мой OnCollisionExit () не так.Кто-нибудь может мне помочь?

Скрипт с кодом добавлен к объекту игрока

private void OnCollisionStay(Collision collision)
{
    if(collision.gameObject.name == "StartRamp"){
        surface = true;
    }
}
private void OnCollisionExit(Collision collision)
{
    if (collision.gameObject.name != "StartRamp")
    {
        surface = false;
    }
}

public void playerToSurface(){

    if (surface == true){ // Change Position When On Ramp

        Ray ray = new Ray(transform.position, -transform.up);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, 1.5f) == true)
        {
            Debug.DrawLine(transform.position, hit.point, Color.green);
            rotCur = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;
            posCur = new Vector3(transform.position.x, hit.point.y, transform.position.z);
            grounded = true;
        }
        else
        {
            grounded = false;
        }
        if (grounded == true)
        {
            transform.rotation = Quaternion.Lerp(transform.rotation, rotCur, Time.deltaTime * 5);
        }
        else
        {
            transform.position = Vector3.Lerp(transform.position, transform.position - Vector3.up * 1f, Time.deltaTime * 5);
        }

    }else{ // Change Position When Off Ramp

        Debug.Log("Player is off ramp.\n");

    }
}

// Update player position to ground
private void Update()
{
    playerToSurface();
}

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Я сделал это, и он отлично работал в единстве.

private void OnCollisionExit(Collision collision)
{
    if (collision.gameObject.name == "StartRamp")
    {
        surface.SetActive(false);
    }
}
0 голосов
/ 25 апреля 2018

Поскольку OnCollisionExit ищет коллайдер, с которым вы больше не контактируете, ни с кем из вас это не так, вы должны сказать, что имя объекта это startramp, а не не .

private void OnCollisionExit(Collision collision)
{
if (collision.gameObject.name == "StartRamp")
    {
        surface = false;
    }
}
...