UnityEditor是场景视图中的Vector3

时间:2015-05-06 00:50:56

标签: c# unity3d

是否可以查看Vector3是否在Scene的查看区域内,而不是在对象的另一侧(也就是相机不可见的对象)?所以,例如:

public void OnSceneGUI(){
    Handles.color = Color.red;
    Camera camera = Camera.current;
    foreach(Vector3 handle in handles){
        Vector3 point = camera.WorldToViewportPoint(handle);
        if(point.x > 0 && point.x < 1 && point.y > 0 && point.y < 1){
            RaycastHit hit;
            Vector3 fwd = camera.transform.TransformDirection(handle);
            if (Physics.Raycast(camera.transform.position, fwd, out hit)){
                Debug.Log("here");
                //if(Vector3.Distance(camera.transform.position, handle);
                Handles.FreeMoveHandle(handle, Quaternion.identity, 0.001f, Vector3.zero, Handles.DotCap);
            }
        }
    }
}

这将检查矢量3是否在视图中,但它还包括位于同一对象另一侧的东西。

1 个答案:

答案 0 :(得分:0)

是的!至少有一种简单的方法,也许是两种方式!

你可以使用Raycast。为了让Raycast工作,你需要一个遮挡对象来获得某种类型的碰撞器(Mesh,Box,Collider2D等)。 然后使用相机中的Raycast到Vector3。如果碰到两者之间的任何东西,你就会发生碰撞。 http://docs.unity3d.com/ScriptReference/Physics.Raycast.html

如果在Vector3位置有一个对象,您也可以使用Renderer.IsVisible。这适用于非常小的物体。不知道如何使用部分可见的网格。

&#34; http://docs.unity3d.com/ScriptReference/Renderer-isVisible.html