PhysifApps

趣味と開発メモ保管庫

スクリプトに書いたショートカットキーの処理がEditorで動かない【Unity】

スクリプトに、ゲーム内でCtrl+CでコピーしてCtrl+Vでペースト、みたいな処理を書いたのにEditorで実行しても動かないぞ???と悩んでたんですが、すごいあっさり解決する話だったので書きます。

サンプル

再現するサンプルとしてこんなものを作りました。

using UnityEngine;
using UnityEngine.UI;

public class TestScript : MonoBehaviour {

    [SerializeField]
    private Text m_CopyText = null;
    [SerializeField]
    private Text m_PasteText = null;

    string text = "";

    void Update( ) {
        // Ctrl+C押されたらコピー
        if ( ( Input.GetKey( KeyCode.LeftControl ) || Input.GetKey( KeyCode.RightControl ) ) && 
            Input.GetKeyDown( KeyCode.C ) ) {
            text = m_CopyText.text;
            Debug.Log( "コピーしました:" + text );
        }

        // Ctrl+V押されたらペースト
        if ( ( Input.GetKey( KeyCode.LeftControl ) || Input.GetKey( KeyCode.RightControl ) ) &&
            Input.GetKeyDown( KeyCode.V ) ) {
            m_PasteText.text = text;
        }
    }
}

テキストが2つあり、Ctrl+Cでコピー元のテキスト「hoge」をstring型のtextに持たせておいて、Ctrl+Vが押されたらペースト先にtextに持たせていた「hoge」をペーストするプログラムです。

インスペクタはこんな感じ

実際にコピーしてみる

それではCtrl+Cを押してコピーしてみましょう!コピーしたらDebug.Logがでるので、コピーした文字列を確認できますね!

めっちゃ連打した

コンソールに一切出ませんなんで???

本当に動いてるか確認してみる

自分の場合ここの確認をしなかったので気づくまでが遅かったです…

ビルドをしてみて、本当に動かないのか確認してみましょう。

ビルドしたデータでCtrl+C、Ctrl+Vを押すと…?

ちゃんとコピー元のテキストがペースト先のテキストに反映されています!

結論

Editor上で動かして確認しようとすると、Unityのショートカットにキー入力を吸われて、ゲーム側のショートカットを動かしてくれてないみたいです。

なので、Editorの時だけ別のキー組み合わせにするとか対処してあげるのがいいのかなって思います。