La détection d'un objet avec Raycast2D

Je travaille sur une stratégie simple mécanique de jeu. J'ai une Caserne de la préfabrication. Quand j'ajoute de la Caserne sur la scène et cliquez sur la Caserne, je reçois un NullReferenceException erreur:

NullReferenceException: la référence d'Objet n'est pas définie à une instance d'un objet PlacementController.Mise à jour () (Assets/Scripts/PlacementController.cs:64)

L'erreur est reçu lorsque j'essaie d'atteindre collisionneur nom de la Caserne à l'aide de Raycast2D.

Caserne de la préfabrication a une Boîte Collider2D collider(trigger est cochée) et son étiquette est "Bâtiment" et sa couche est "Bâtiments". Il a un rigidbody2D composant et c'est une cinématique rigidbody.

Je ne peux pas comprendre ce problème. S'il vous plaît aider moi.

Merci pour votre temps.

using UnityEngine;
using System.Collections;

public class PlacementController : MonoBehaviour
{
    private Buildings buildings;
    private Transform currentBuilding;
    private bool _hasPlaced;
    public LayerMask BuildingsMask;
    public void SelectBuilding(GameObject g)
    {
        _hasPlaced = false;
        currentBuilding = ((GameObject)Instantiate(g)).transform;
        buildings = currentBuilding.GetComponent<Buildings>();
    }

bool CheckPosition()
{
    if (buildings.CollidersList.Count > 0)
    {
        return false;
    }
    return true;
}

//Update is called once per frame
void Update () {


    Vector3 m = Input.mousePosition;
    m = new Vector3(m.x, m.y, transform.position.z);
    Vector3 p = GetComponent<Camera>().ScreenToWorldPoint(m);


    if (currentBuilding != null && !_hasPlaced)
    {

        currentBuilding.position = new Vector3(p.x,p.y,0);

        if (Input.GetMouseButtonDown(0))
        {
            if (CheckPosition())
            {
                _hasPlaced = true;
            }
        }
    }
    else
    {
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit2D hit = new RaycastHit2D();
            Ray2D ray2D = new Ray2D(new Vector2(p.x,p.y), Vector3.down );
            //Ray2D ray = new Ray(transform.position,new Vector3(p.x,p.y,p.z));
            if (Physics2D.Raycast(new Vector2(p.x,p.y),Vector3.down,5.0f,BuildingsMask) )
            {
                Debug.Log(hit.collider.name); //error
            }
        }
    }

}

------------------ Je suis le partage de réponse, et merci pour votre aide --------------------

 if (Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
        {
            RaycastHit2D hit = new RaycastHit2D();
            Ray2D ray2D = new Ray2D(new Vector2(p.x,p.y), Vector3.down );
            hit = Physics2D.Raycast(new Vector2(p.x, p.y), Vector3.forward, 5.0f, BuildingsMask);

                Debug.Log(hit.collider.name);

        }

OriginalL'auteur Halil Cosgun | 2015-04-19