Unity编辑器篇(一)Scene界面

(一),向屏幕中心发射一条射线

lastActiveSceneView 类似于 Game场景的相机,(其实我也没搞懂是什么东西)

Ray ray = SceneView.lastActiveSceneView.camera.ScreenPointToRay(new Vector3(SceneView.lastActiveSceneView.camera.pixelWidth / 2, SceneView.lastActiveSceneView.camera.pixelHeight / 2, 0));
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit))
        {
                       Debug.Log("发射射线成功");
       }

(二)Scene场景刷新回调事件

 static void Init()
    {
        SceneView.onSceneGUIDelegate += OnSceneGUI;
    }

    static void OnSceneGUI(SceneView sceneView)

    {

每帧调用,里面可以做一下在scene界面操作的回调 ,如鼠标键盘事件


            Event e = Event.current;
            if (e.type == EventType.MouseDown)
            {
                Debug.Log("鼠标按下");
            }

(三)Layer层控制

扫描二维码关注公众号,回复: 9858082 查看本文章

眼睛代表是否能在Scene界面上看到

锁代表是否能在Scene界面上操作,如通过点击选择物体,拖动物体等响应事件

代码控制如下:

  Tools.lockedLayers = ~ (1<< 9);

原理:通过位运算达到控制多层的目的,全部取消设为0即可

(四)Hierarchy层右键扩展

 static object[] obj = new object[] { };
    static int temp = 0 ;

    通过放到GameObject层设置优先级达到可使用右键的目的

(由于unity内部机制问题,当选择多个物体时,通过右键的操作,此方法会被调用多次,所以通过选择的个数来控制打印次数)

-------------如有更好的解决方法,还望不吝赐教。
    [MenuItem("GameObject/计算当前选中物体的数量(Hierarchy)", false, 0)]           
    static void CalculateTheNumber()
    {
        object[] objs = Selection.objects;
        object[] objTops = Selection.GetFiltered(typeof(GameObject), SelectionMode.TopLevel);
        if (temp == 0)
        {
            Debug.LogError("当前选中物体的数量为:  " + objs.Length);
        }
        temp++;
        if (temp == objTops.Length)
        {
            temp = 0;
        }
    }

发布了26 篇原创文章 · 获赞 8 · 访问量 5795

猜你喜欢

转载自blog.csdn.net/LM514104/article/details/95093879