Unity在Scene视图中如何获取鼠标事件对一个新手来说是有一定难度的,今天作为一个新手,分享自己做到这一功能的方法(各位如果发现问题欢迎指出)。我通过定义编辑器类,利用方法OnSceneGUI即可实现功能,下面看具体代码。
using UnityEngine; using System.Collections; public class Test : MonoBehaviour { }
新建一个Test类,内部不需要有任何多余方法即可实现功能,主要功能实现在如下代码:
1 using UnityEngine; 2 using System.Collections; 3 using UnityEditor; 4 [CustomEditor(typeof(Test))] 5 public class Helper : Editor { 6 public GameObject GOTarget; 7 void OnSceneGUI() 8 { 9 GOTarget = GameObject.Find("Capsule"); 10 if (Event.current.type == EventType.mouseDown) 11 { 12 Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); 13 RaycastHit hit; 14 if (Physics.Raycast(ray, out hit)) 15 { 16 GameObject obj = (GameObject)GameObject.Instantiate(GOTarget,hit.point,GOTarget.transform.rotation); 17 } 18 } 19 } 20 }
其中,CustomEditor表示自定义编辑器类,Unity API提示:“这是一个编辑器类,如果想使用它你需要把它放到工程目录下的Assets/Editor文件夹下。编辑器类在UnityEditor命名空间下。所以当使用C#脚本时,你需要在脚本前面加上 "using UnityEditor"引用”
根据需要,我将Test脚本挂在需要点击的物体,选中Test脚本所在物体(只有该物体是选中状态才能够监测到鼠标在Scene窗口的点击),在Scene窗口点击一次该物体,就能在点击位置生成一个Capsule.