Как проверить столкновение между игроком и конкретным объектом TileBase в Unity? - PullRequest
0 голосов
/ 16 января 2019

У меня есть пара переменных tilebase, которые устанавливаются с помощью инспектора единства:

public TileBase obstacle; //obstacle tile
public TileBase spikes; //instant death tile

Я использую OnCollisionEnter2D в сценарии, который настроен для актива tilemap.

void OnCollisionEnter2D(Collision2D col)
{
    if (col.gameObject.name == "Player")
    {
        PlayerPrefs.SetInt("Collision", 1);
    }
}

Я хочу быть в состоянии определить, когда игрок столкнулся с шипами TileBase, поскольку это должно привести к окончанию игры. Имя актива, которое задается для переменной spikes через инспектор, также называется в палитре Spikes или Spikes (Tile).

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

void OnCollisionEnter2D(Collision2D col)
{
    Debug.Log(col.gameObject.name);
}

Но все, что возвращается, - это название карты тайлов.

1 Ответ

0 голосов
/ 17 января 2019

Сначала вы должны добавить слои к вашим объектам. Простой пример - добавить слой «TileBase» или «Tile» в ваши объекты TileBase.

Затем вы можете позволить своему Игроку сталкиваться только с определенными вещами, а НЕ с вашей картой тайлов. Смотрите матрицу столкновений для этого.

Затем измените свой код следующим образом:

void OnCollisionEnter2D(Collision2D col)
{
    var tilebase = col.GetComponent<TileBass>();
    if (tilebase != null)
    {
        Debug.Log(tilebase.gameObject.name);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...