Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity光线投射标记而不是图层_C#_Unity3d_Raycasting - Fatal编程技术网

C# Unity光线投射标记而不是图层

C# Unity光线投射标记而不是图层,c#,unity3d,raycasting,C#,Unity3d,Raycasting,我做了一个游戏,我使用光线投射来确定玩家是否在一个物体上。我知道如何使用层来实现这一点,但我更愿意这样做,以便它检查它是否碰到带有标记的对象。代码如下: isObject = Physics2D.Linecast (this.transform.position, groundedEnd.position, 1 << LayerMask.NameToLayer ("Object")); isObject=Physics2D.Linecast(this.transform.pos

我做了一个游戏,我使用光线投射来确定玩家是否在一个物体上。我知道如何使用层来实现这一点,但我更愿意这样做,以便它检查它是否碰到带有标记的对象。代码如下:

  isObject = Physics2D.Linecast (this.transform.position, groundedEnd.position, 1 << LayerMask.NameToLayer ("Object"));

isObject=Physics2D.Linecast(this.transform.position,groundedEnd.position,1您可以使用以下代码:

 RaycastHit2D h = Physics2D.Linecast(p1, p2);
 if(h.collider.tag == "YOUR_TAG")
 {
     //Do your stuff
 }

没有2D光线投射的经验,但在3D中检查光线投射命中对象的标记是这样的,也许您可以将其更改一点以应用于2D:

RaycastHit raycastHit;
if(Physicas.Raycast(from, to , out raycastHit, maxDistance)){
Collider = raycastHitCollider = raycastHit.collider;
    if (raycastHitCollider.gameObject.tag == "Your tag here"){
    //do stuff
    }
}

这似乎不起作用,它没有意识到我用那个标记击中了对象。没有办法替换“否”。用层过滤光线投射对象的能力来自于这样一个事实,即层的数量有限,这允许unity保持一个方便的数据结构(我假设)但是,您可以拥有任意多的标记,这将无法达到此数据结构的优化目的。您还可以使用
OnCollisionInter2D
事件来检测2D碰撞