HandleUtility.PickGameObject의 기능을 단축키로 불러내고 싶었습니다.
출처 : https://docs.unity3d.com/kr/current/Manual/ShortcutsManager.html
물론 특정 키가 눌렸는지 스크립트에서 확인하는 방식으로도 가능합니다.
출처 : https://docs.unity3d.com/kr/current/Manual/ShortcutsManager.html
하지만 단축키 관리자에 등록하고 원하는 키 조합으로 변경하는 방식을 추구하고 싶었습니다. (이 기능을 사용하면 이미 중복된 단축키를 사용하고 있는 유저가 다른 키 조합으로 수정할 수 있게 됩니다.)
출처 : https://docs.unity3d.com/kr/current/Manual/ShortcutsManager.html
그러던 중 ShortcutAttribute에 대해서 알게 됐습니다.
출처 : https://docs.unity3d.com/ScriptReference/ShortcutManagement.ShortcutAttribute-ctor.html
여러 생성자가 존재합니다. id를 설정해 주면 해당 id로 단축키 관리자에서 나옵니다. "카테고리/이름"의 형태로 지정해 주면 해당 카테고리에 존재하게 됩니다.
defaultKeyCode를 설정해 주면 해당 키를 눌렀을 경우 실행이 됩니다.
출처 : https://docs.unity3d.com/ScriptReference/ShortcutManagement.ShortcutModifiers.html
defaultShortcutModifiers은 Alt, Shift와 같은 보조적인 키를 추가해 주는 것입니다.
출처 : https://docs.unity3d.com/kr/current/Manual/ShortcutsManager.html
context는 특정 뷰 또는 툴 집합을 사용할 때만 동작하게 해줍니다. typeof(SceneView)를 작성해 줄 시 씬을 선택한 경우에만 동작합니다.
원하는 형식으로 작성하여 함수에 붙여줍니다.
잘 추가된 것을 확인할 수 있습니다.
같은 코드를 사용하셨다면 단축키를 눌렀을 때 오류가 뜨는 것을 볼 수 있습니다. OnGUI밖에서 HandleUtility.PickGameObject를 사용하였기에 발생한 오류입니다.
숏컷을 누른 경우 OnSceneGUI에서 동작하게끔 코드를 짜주면 문제를 우회하는 방법으로 해결할 수 있습니다.
테스트 결과 정상 동작합니다. 씬을 context로 정했기에 씬이 아니면 동작하지 않습니다.
context를 지정하지 않은 마우스 단축키는 허용되지 않습니다.
출처 :
https://blog.unity.com/kr/engine-platform/introducing-unity-2019-1
2019년 이후 버전에서 사용 가능합니다. 당연하게도 버전에 따라 차이점이 존재합니다.