Попытка запрограммировать двумерный код Unity, который показывает, заземлен мой персонаж или нет, и он не работает - PullRequest
0 голосов
/ 19 марта 2020
error CS1061: 'Collision2D' does not contain a definition for 'GetComponent' and no accessible extension method 'GetComponent' accepting a first argument of type 'Collision2D' could be found

Как сделать землю так, чтобы персонаж узнал, что она земля? Я пытаюсь сделать 2D прыжковое движение. Либо Collisions2D не удалось найти GetComponent, либо игра работает, но персонаж вообще не прыгает.

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

public class Grounded : MonoBehaviour
{
    GameObject Player;

    void Start()
    {
        Player = GetComponentInParent<GameObject>();
    }

    void Update(){
    }

    void OnCollisionEnter2D(Collision2D col) {

        if (col.GetComponent<Collider2D>().tag == "Ground") {

            Player.GetComponent<Move2D>().isGrounded = true;

        }
    }

    void OnCollisionExit2D(Collision2D col) {

        if (col.GetComponent<Collider2D>().tag == "Ground") {

            Player.GetComponent<Move2D>().isGrounded = false;

        }
    }
}

1 Ответ

1 голос
/ 20 марта 2020

Попробуйте вместо этого использовать col.collider.tag == "Ground".

col.collider относится к входящему коллайдеру в вашем случае на земле. Потому что это коллайдер, с которым вы сталкиваетесь (конечно, только когда вы касаетесь земли).

col.otherCollider можно использовать для вызова другого коллайдера, в вашем случае самого игрока. Это может быть полезно при большом количестве столкновений.

Не стесняйтесь обращаться за дополнительной помощью, если этого недостаточно.

...