如何列出/存储由两个Vector 3之间绘制的Debug.DrawLine命中的GameObject?
使用Debug.DrawLine(p1.transform.position,p2.transform.position,Color.green,2,false);
我想记录由p1和p2之间的线命中的对象。
谢谢!
答案 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