C#Unity Debug.DrawLine碰撞

时间:2016-01-30 02:08:40

标签: c# unity3d

如何列出/存储由两个Vector 3之间绘制的Debug.DrawLine命中的GameObject?

使用Debug.DrawLine(p1.transform.position,p2.transform.position,Color.green,2,false);

我想记录由p1和p2之间的线命中的对象。

谢谢!

2 个答案:

答案 0 :(得分:1)

据我所知,Debug.DrawLine无法实现这一点,但可以使用Physics.RaycastAll:

http://docs.unity3d.com/ScriptReference/Physics.RaycastAll.html

你可以这样做:

您可以使用列表或数组,如果您使用列表,请确保包括:

 using System.Collections.Generic;

然后获取你的数组/列表:

    RaycastHit[] hits;
    hits = Physics.RaycastAll( transform.position, transform.forward, 100.0F );
    List<GameObject> gameObjectsHit = new List<GameObject>(hits.Length);
    //or GameObject[] gameObjects= new GameObject[hits.Length];
    for( int i = 0; i < hits.Length; i++ ) {
      RaycastHit hit = hits[i];
      gameObjectsHit.Add( hits[i].transform.gameObject );
      //or gameObjects[i] = hits[i].transform.gameObject;
    }

    //you now have a list or array of hit gameobjects

在回答关于如何在两个物体之间投射光线的评论中的第二个问题时,假设您有objA和objB,可以执行以下操作:

-1。获取对象之间的距离:

float dist = Vector3.Distance( objA.transform.position, objB.transform.position ); 

-2。使用距离作为maxRange:

将来自objA的光线投射到objB
 hits = Physics.RaycastAll( objA.transform.position,
 (objB.transform.position - objA.transform.position).normalized, dist );

其余代码可以保持不变。

答案 1 :(得分:1)

Debug.DrawLine是一个图形化的调试模式线条绘制元素。如果你想看看你碰到的碰撞器/触发器,那么你应该看看Raycast。 http://docs.unity3d.com/ScriptReference/Physics.Raycast.html是它的手册页。

基本上你可以投射一条&#39;射线&#39;沿着最大距离的方向并产生它击中的碰撞器阵列。有各种不同的形式,因此您需要选择最适合您案例的形式。

HTH