Unity3d - Raycast需要在实例化之前检查图层

时间:2014-06-13 16:35:10

标签: unity3d instantiation raycasting

我制作了一个玩家触摸屏幕并且对象实例化的游戏。但是,我只希望对象实例化,如果Raycast命中特定图层上的对象(如果更容易,则触发特定标记)。我可以将光线抛出并实例化我喜欢它的预制件,但是当我添加检查图层的部分时,它会向我发送一个错误(NullReferenceException:对象引用未设置为实例一个东西)。这似乎是一件简单的事情,但我无法让它发挥作用。任何帮助都会非常感激!

var box : Transform;



function Update ()
{

if (Input.GetMouseButtonDown(0))
{
if(roomController.noMore == false){
var hit : RaycastHit;
var mousePos : Vector3 = Input.mousePosition;
mousePos.z = 9;
var worldPos : Vector3 = camera.ScreenToWorldPoint(mousePos);
Debug.Log("Mouse pos: " + mousePos + " World Pos: " + worldPos + " Near Clip Plane: " + camera.nearClipPlane);

if(hit.collider.gameObject.layer == "Ground" && HierarchyType.collider != null){
clone = Instantiate(box, worldPos, Quaternion.identity);
noMore = true;
Destroy(this);
}

}
}
}

2 个答案:

答案 0 :(得分:0)

尝试使用Physics.Raycast。

var hit : RaycastHit;
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), hit))
{
    if (hit.collider != null && hit.collider.gameObject.layer == LayerMask.NameToLayer("Water"))
    {
        Debug.Log("Instantiate");
    }
}

答案 1 :(得分:0)

  

但是当我添加检查图层的部分时,它会发送给我   错误(NullReferenceException:对象引用未设置为   对象的实例)。

这可能是因为实际上你没有投射任何光线并检查实际发生的命中(避免相对对撞机字段可能为空)。

我建议您查看Physics.RayCast重载,在投射时指定图层(通过LayerMask)可能会更有效,而不是稍后过滤结果。