Как поймать нажатие клавиши в SceneView

Раздел, посвящённый всему, что связано с программированием для Редактора Юнити. Скрипты Редактора, Wizards и прочее.

Как поймать нажатие клавиши в SceneView

Сообщение Summerscream 01 дек 2012, 21:59

Приветствую.

Ситуация:
1. Имеем загруженный из .xml уровень, состоящий из объектов
2. Для редактирования уровня необходимо ловить нажатие ключевых клавиш при выбранном объекте в SceneView
3. По нажатию на клавишу производить описанные в коде манипуляции с объектом.

Попробовал так:
Синтаксис:
Используется csharp

class DummyObj: MonoBehaviour
{
}

public class TestKeyCodePressInSceneView : Editor {

   [CustomEditor(typeof(DummyObj)]
    void OnSceneGUI()
    {
        if (Input.GetKey(KeyCode.Keypad8) && Input.GetKeyDown(KeyCode.Return))
        {
            Debug.Log("@@@@@@@@@@");
        }

       Event e = Event.current;
        switch (e.type)
        {
            case EventType.keyDown:
                {
                    if (Event.current.keyCode == (KeyCode.Return))
                    {
                       Debug.Log("##############");
                    }
                    break;
                }
        }
    }
}
 


Создаю в сцене DummyObj, пока он поселекчен - все работает, как только селект отваливается, инпут тоже не ловится, что в принципе очевидно.
Внимание вопрос - как ловить нажатие клавиши без вот этих вот танцев с бубнами, тем более что для моей задачи такое решение не подходит совсем. Мне надо двигать поселекченный объект по нажатию клавиши, а я не могу его поселектить, так как должен быть селект DummyObj, чтобы все работало.

P.S.
Один мой достаточно авторитетный товарищ ответил, что никак, но может все таки есть способ а?
Summerscream
UNIт
 
Сообщения: 62
Зарегистрирован: 01 фев 2011, 00:34
Откуда: msc

Re: Как поймать нажатие клавиши в SceneView

Сообщение theSILENT 02 дек 2012, 01:32

Таже проблема( Если найдешь решение, напиши сюда пожалуйста.
Аватара пользователя
theSILENT
UNец
 
Сообщения: 44
Зарегистрирован: 30 ноя 2009, 20:36
Откуда: Россия, Крым, г. Ялта
  • Сайт

Re: Как поймать нажатие клавиши в SceneView

Сообщение theSILENT 02 дек 2012, 02:33

Нашел решение:
Синтаксис:
Используется csharp
using UnityEditor;
using UnityEngine;

[InitializeOnLoad]
class Inputs{
    static Inputs ()
    {
       SceneView.onSceneGUIDelegate += SceneInputs;
    }

    static void SceneInputs (SceneView s)
    {
        Debug.Log("Here are my input events");
                                        Event e = Event.current;
                if(e.type == EventType.MouseDown && e.button == 0)
                        Debug.Log ("mouse button pressed : 0");
    }
}


Создаем эдитор класс , делегируем наш метод , для обработки инпутов, в SceneView.onSceneGUIDelegate . Ну а в SceneInputs() суете обработку ваших эвентов.
Аватара пользователя
theSILENT
UNец
 
Сообщения: 44
Зарегистрирован: 30 ноя 2009, 20:36
Откуда: Россия, Крым, г. Ялта
  • Сайт

Re: Как поймать нажатие клавиши в SceneView

Сообщение Summerscream 02 дек 2012, 09:28

О, круто. Спасибо. Действительно работает.
Summerscream
UNIт
 
Сообщения: 62
Зарегистрирован: 01 фев 2011, 00:34
Откуда: msc


Вернуться в Editor

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2