ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity如何在Scene中进行一系列操作,例如事件监听和射线

2021-11-24 20:36:01  阅读:457  来源: 互联网

标签:hit void 监听 Unity Scene current 编辑器 public Event


  因为有的时候涉及到场景编辑器或者是自定义编辑器等功能,所以有时候需要在Scene界面里进行一些操作,比如监听事件等

  核心就是SceneView以及HandleUtility

  如果我们需要自己的编辑器窗口进行操作的话,如下图  

  编辑器窗口的代码如下:

  

 1 public class MyEditor : Editor
 2 {
 3 #if UNITY_EDITOR
 4     [MenuItem("MyTest/MyEditor")]
 5 #endif
 6     public static void OpenEditorWindow()
 7     {
 8         MyEditorWindow.ShowWindow();
 9     }
10 
11 }

 

  Editor会打开我们写的EditorWindow类

   然后,为了实现鼠标事件监听以及射线,需要在EditorWindow里写一些代码

 

 1 public class MyEditorWindow : EditorWindow
 2 {
 3     public static MyEditorWindow instance;
 4 
 5     public static void ShowWindow()
 6     {
 7         instance = GetWindow<MyEditorWindow>();
 8 
 9         instance.Init();
10     }
11 
12     public void Init()
13     {
14         SceneView.duringSceneGui += OnSceneGUI;
15     }
16 
17     public void OnSceneGUI(SceneView sceneView)
18     {
19         //不能用input,因为不是运行时
20         if(Event.current.type == EventType.MouseDown && Event.current.button == 0)
21         {
22             Debug.Log("mouse left click!");
23         }else if(Event.current.type == EventType.MouseDown && Event.current.button == 1)
24         {
25             //使用HandleUtility来进行编辑器的操作
26             Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
27             RaycastHit hit;
28             if(Physics.Raycast(ray, out hit))
29             {
30                 if(hit.collider != null)
31                 {
32                     Debug.Log("mouse right click : " + hit.collider.gameObject.layer.ToString());
33                 }
34             }
35         }
36     }
37 }

  HandleUtility中基本都是一些工具作用的函数,用来处理编辑器的一些问题

  SceneView则是UnityEditor专门用来控制Scene界面的一个类,除了进行事件监听以外,还可以进行移动Scene Camera等操作

  两个类详情见文档

  结果示例

  

  当点击鼠标左右键时,会出现相应的log,射线也可以检测到两个物体的层级

 

标签:hit,void,监听,Unity,Scene,current,编辑器,public,Event
来源: https://www.cnblogs.com/soulkeyboy969/p/15599913.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有