(一),向屏幕中心发射一条射线
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;
}
}