【问题标题】:Unity3d - Raycast Needs to Check Layer Before InstantiateUnity3d - Raycast 需要在实例化之前检查层
【发布时间】:2014-06-13 16:35:09
【问题描述】:

我正在制作一个游戏,玩家触摸屏幕并实例化一个对象。但是,我只希望在 Raycast 击中特定图层上的对象(或者如果更容易,则为特定标签)的对象时实例化该对象。我可以让光线投射出来并在我想要的地方实例化一个预制件,但是当我在检查层的部分中添加时,它会向我发送一个错误(NullReferenceException:Object reference not set to an instance of an object )。这似乎是一件很简单的事情,但我无法让它发挥作用。任何帮助将不胜感激!

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);
}

}
}
}

【问题讨论】:

    标签: unity3d instantiation raycasting


    【解决方案1】:

    尝试使用 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");
        }
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-12-14
        • 1970-01-01
        • 2017-04-01
        • 2013-10-29
        • 1970-01-01
        • 2015-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多