public void KeyDown(VirtualKey _key)
    {
        if (_key.KeyType != VirtualKey.kType.kReturn)
        {
            PlayKeyAudio();
        }


        if (TextInputBox != null)
        {
            switch (_key.KeyType)
            {
            case VirtualKey.kType.kShift:
            {
                mPressShift = !mPressShift;
            }
            break;

            case VirtualKey.kType.kCapsLock:
            {
                mCapsLocked = !mCapsLocked;
            }
            break;

            case VirtualKey.kType.kHangul:
            {
                if (mLanguage == kLanguage.kKorean)
                {
                    mLanguage = kLanguage.kEnglish;
                }
                else
                {
                    mLanguage = kLanguage.kKorean;
                }
            }
            break;

            case VirtualKey.kType.kSpace:
            {
                if (TextInputBox.TextField.Length <= MaxTextCount)
                {
                    TextInputBox.KeyDown(_key);
                }
            }
            break;

            case VirtualKey.kType.kBackspace:
            {
                TextInputBox.KeyDown(_key);
            }
            break;

            case VirtualKey.kType.kReturn:
            {
                if (OnReturnEventHandler != null)
                {
                    //OnReturnEventHandler(TextInputBox.TextField);
                }
                //do somehing
                //OnReturnEventHandler?.Invoke(TextInputBox.TextField);

                if ((bool)OnReturnDelegate?.Invoke(TextInputBox.TextField))
                {
                    PlayKeyAudio();
                }
            }
            break;

            case VirtualKey.kType.kCharacter:
            {
                if (TextInputBox.TextField.Length <= MaxTextCount)
                {
                    char keyCharacter = _key.KeyCharacter;
                    if (mPressShift)
                    {
                        keyCharacter = char.ToUpper(keyCharacter);
                        mPressShift  = false;
                    }

                    if (mLanguage == kLanguage.kKorean)
                    {
                        TextInputBox.KeyDownHangul(keyCharacter);
                    }
                    else if (mLanguage == kLanguage.kEnglish)
                    {
                        if (mCapsLocked)
                        {
                            keyCharacter = char.ToUpper(keyCharacter);
                        }
                        TextInputBox.KeyDown(keyCharacter);
                    }
                }
            }
            break;

            case VirtualKey.kType.kOther:
            {
                if (TextInputBox.TextField.Length <= MaxTextCount)
                {
                    char keyCharacter = _key.KeyCharacter;
                    if (mPressShift)
                    {
                        if (_key.HasShiftedChar())
                        {
                            keyCharacter = CHARACTER_TABLE[keyCharacter];
                        }
                        mPressShift = false;
                    }
                    TextInputBox.KeyDown(keyCharacter);
                }
            }
            break;

            case VirtualKey.kType.kSymbol_Star:
                //https://www.unicodepedia.com/groups/miscellaneous-symbols/
                /*WHITE STAR*/
                TextInputBox.KeyDown('\u2606');
                break;

            case VirtualKey.kType.kSymbol_Heart:
                /*WHITE HEART*/
                TextInputBox.KeyDown('\u2661');
                break;
            }
        }
    }