Unity编辑器篇(一)Scene界面

  • Post author:
  • Post category:其他


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

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;

}

}



版权声明:本文为LM514104原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。