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层控制

眼睛代表是否能在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;
        }
    }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值