RayCast2D игнорирует попадание собственного коллайдера - PullRequest
1 голос
/ 05 марта 2020

Board.cs

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

public class Board : MonoBehaviour
{
    public Transform m_emptySprite;
    private int m_height = 14;
    private int m_width = 6;

    // number of rows where we won't have grid lines at the top
    public int m_header = 8;

    // Start is called before the first frame update
    void Start()
    {
        DrawEmptyCells();
    }

    void DrawEmptyCells()
    {
        for (int y = 0; y < m_height - m_header; y++)
        {
            for (int x = 0; x < m_width; x++)
            {
                Transform tile;
                tile = Instantiate(m_emptySprite, new Vector3(x, y, 0), Quaternion.identity) as Transform;
                tile.name = "Tile ( x = " + x.ToString() + " ,y = " + y.ToString() + ")";
                tile.transform.parent = transform;
            }
        }
    }
}

Tile.cs

public class Tile : MonoBehaviour
{
    private Vector2[] adjacentDirections = new Vector2[] { Vector2.up, Vector2.down, Vector2.left, Vector2.right };

    void OnMouseDown() 
    {
       GetAllAdjacentTiles();
    }

    private GameObject GetAdjacent(Vector2 castDir)
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, castDir);
        if (hit.collider != null) 
        {
            print(hit.collider.gameObject.name);
            return hit.collider.gameObject;
        }
        return null;
    }

    private List<GameObject> GetAllAdjacentTiles()
    {
        List<GameObject> adjacentTiles = new List<GameObject>();
        for (int i = 0; i < adjacentDirections.Length; i++)
        {
            adjacentTiles.Add(GetAdjacent(adjacentDirections[i]));
        }
        return adjacentTiles;
    }
}

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

К каждой плитке прикреплены скрипт плитки и BoxCollider2D, почему она не печатает все 4 плитки, окружающие текущая плитка?

1 Ответ

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

По умолчанию для Physics2D вы попали в свой собственный коллайдер, в котором начинается Raycast.

Чтобы решить это go до Настройки Physics2D через EditProject SettingsPhysics2D и отключить параметр

Запросы запускаются в коллайдерах

Включите эту опцию, если вы хотите, чтобы физические запросы начинались внутри коллайдера 2D, чтобы обнаружить коллайдер, с которого они начинают.

enter image description here

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