Наземные коллайдеры Unity 2D работают, но не обнаруживаются OnTriggerEnter2D - PullRequest
3 голосов
/ 05 июня 2019

Я делаю свой первый платформер Unity, и мне пришло в голову, что я никогда не останавливал своего игрока от бесконечных прыжков.Я попробовал типичное решение с использованием логического значения, которое переключается при прыжке и столкновении с землей.Проблема в том, что мой плеер сталкивается с землей. OnTriggerEnter2D, похоже, не обнаруживает его.

И да, я трижды проверил, что на земле есть правильный тег.

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

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

public class PlayerController : MonoBehaviour
{

    //movement variables
    public float movex;
    public float speed;
    public float jumpforce;

    //interactivity variables
    public Rigidbody2D rb2d;

    private bool isJumping;

    Vector3 startingPosition;

    // Use this for initialization
    void Start()
    {
        rb2d = GetComponent<Rigidbody2D>();
        startingPosition = transform.position;
    }

    // Update is called once per frame
    void Update()
    {        
        // localScale;
        if (Input.GetKeyDown(KeyCode.Space) && !isJumping)
        {
            rb2d.velocity = new Vector2(rb2d.velocity.x, jumpforce);
            isJumping = true;
        }

    }

    void OnTriggerEnter2D(Collider2D col) 
    {
        Debug.Log(col.tag);

        if (col.gameObject.CompareTag("Floor"))
        {
            isJumping = false
        }      
    }
}

Ответы [ 2 ]

3 голосов
/ 05 июня 2019

Хорошая работа по поиску ошибки самостоятельно, OP.Ваше решение обычно так :) У вас, вероятно, будут проблемы со столкновениями в будущем.Я обнаружил, что основные проблемы, возникающие у людей, когда столкновения не запускаются:

  1. Вы используете 3D-компоненты коллайдера в 2D-игре.
  2. Ни один из сталкивающихся объектов не имеет твердого тела (2D).
  3. Объект, к которому присоединен скрипт, не имеет компонента Collider
  4. Входным параметром является Collision, когдаэто должен быть коллайдер или наоборот.
  5. Логическое значение isTrigger не установлено (для OnTriggerEnter (2D))
  6. Скрипт не прикреплен к объекту
  7. Вы программно исключаете слои, которые сталкиваются.Вы также можете установить это в настройках проекта через матрицу.(Обычно это не так, поскольку, если вы сделали это, вы, вероятно, знаете, что делаете)
  8. Ваш объект движется слишком быстро, и у вас не установлен режим непрерывного столкновения (выпадающий список на вашем компоненте Collider)
3 голосов
/ 05 июня 2019

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

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