我正在使用Unity创建一个简单的瓦片地图编辑器扩展,因为默认的编辑器缺少我项目所需的很多功能。我继承了EditorWindow类。
当按住左键并拖动鼠标时,我想在场景中放置瓦片(在编辑器模式下)。
下面的图片说明了我想要的行为。 我可以帮您进行翻译。以下是您需要翻译的内容:
第一个案例(单个瓦片放置)按预期工作。但我无法捕获“按住左键”事件。我可以捕获鼠标移动事件
在Unity中,当按住左键并移动鼠标时,默认行为似乎是创建选择框:
下面的图片说明了我想要的行为。 我可以帮您进行翻译。以下是您需要翻译的内容:
我面临的问题是如何识别此事件。这是我使用的处理鼠标输入的函数:
void HandleMouseInput() {
Event e = Event.current;
switch (e.type) {
case EventType.MouseDown:
if (e.button == 0) PlaceTile();
break;
case EventType.MouseMove:
Debug.Log("Moving");
Debug.Log(e.button); // <-- always show 0 (left click) even though mouse is not clicked.
break;
}
}
第一个案例(单个瓦片放置)按预期工作。但我无法捕获“按住左键”事件。我可以捕获鼠标移动事件
EventType.MouseMove
,但我需要知道是否有左击。根据Unity文档,e.button == 0
表示左击(在第一个switch case中按预期工作)。但在第二个case中,无论点击哪个鼠标按钮,e.button
始终为0。还有一个EventType.MouseDrag
,但似乎只有在选择场景中的游戏对象并拖动时才会触发。在Unity中,当按住左键并移动鼠标时,默认行为似乎是创建选择框:
如果在编辑器左上角选择手的图标,则可以拖动整个场景。
实际上,我想捕获此事件并用自己的功能覆盖结果。
编辑:我认为我可以通过创建自定义工具https://docs.unity3d.com/ScriptReference/EditorTools.EditorTool.html来解决这个问题。