OnCollisionEnter2D не вызывается

#c# #unity3d

Вопрос:

Я создаю сценарий на лифте, который должен телепортировать игрока, когда он находится рядом с ним, и нажать e

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class interactible : MonoBehaviour
{
    public Transform player;
    public Transform pos;

    private bool collide;

    void Start()
    {
        collide = false;
    }

    void OnCollisionEnter2D(Collision2D collider)
    {
        collide = true;
    }

    void OnCollisionExit2D(Collision2D collider)
    {
        collide = false;
    }

    void Update()
    {
        if (Input.GetKeyDown("e") amp;amp; collide)
        {
            player.position = pos.position;
        }
    }
}
 

Я определил как игрока, так и pos, сделал 2d-коллайдер для лифта и установил «is trigger» на true .
Что я делаю не так?

Ответ №1:

Ваша проблема в том, что 2 триггера не могут сталкиваться, только триггеры и коллайдеры могут работать друг с другом.

ОБНОВЛЕНИЕ: Основная проблема оказалась в том, что, когда вы имеете дело с триггерами, вам нужно использовать OnTriggerEnter2D вместо OnCollisionEnter2D

Комментарии:

1. Что ты имеешь в виду?

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

3. если это то, что вы говорите, у моего плеера нет «триггера», установленного на true, но у лифта есть, поэтому он должен работать.

4. о, я просто забыл, что мне нужно использовать жесткое тело, не так ли?

5. @swisscheez84 Я запрыгну на свой компьютер, и мы обсудим это в чате

Ответ №2:

Input.GetKeyDown примите перечисление, так и должно быть

 if(Input.GetKeyDown(KeyCode.E) amp;amp; collide)
 

Комментарии:

1. это не потому, что я убрал «amp;amp; столкновение», и это сработало, когда я нажал «e»

2. OnCollisionEnter() срабатывает на долю секунды, поэтому трудно зафиксировать нажатие клавиши одновременно, поэтому попробуйте использовать OnTriggerStay или использовать LineCast.