VRChat Keyboard World Assets


Written in English and Japanese

TL;DR - 要約

I distribute my VRChat keyboard world assets in the public domain.
Download Link


Note: The keyboard doesn’t work since WebPanel had been disabled.
注: WebPanelが無効化されたためキーボードは動作しません。

What is this? - これは何?

It's my Unity assets which I made from scratch to use in my VRChat keyboard world, Tell Your Word.

VRChatのキーボードワールド、Tell Your Word で使うために私がフルスクラッチで作成したUnityアセットです。

Requirements - 要件

I confirmed that it works with:

  • Unity 5.6.3p1
  • VRChat SDK 2018.

License - ライセンス

Public Domain

How to Use - 使い方

Just import the Unity package to your project and open Assets/TellYourWord/Scenes/TellYourWordSimply to see how it works.

Unityパッケージをインポートして Assets/TellYourWord/Scenes/TellYourWordSimply を開き、使い方を確認してください。

Prefabs - プレハブ

The Unity package has three prefabs.


The mirror that turns on itself automatically only when a player approaches


The chair that has two stations for large/small avatars


The chat system that has the keyboard you can type in VR and reality

Multiply ChatBooth - ChatBoothを増やす

When you want to multiply ChatBooth, you have to create a new material. Select the Window material and press Ctrl + D. You would get a new copy. Rename it as you want and set it in the hierarchy tab like this.

ChatBoothを増やしたい場合、新しいマテリアルを作成する必要があります。Windowマテリアルを選択した状態で Ctrl + D を押すとコピーが作成されるので、それを任意の名前に変更し、ヒエラルキータブで以下のようにセットしてください。


Known Issues - 既知の問題

The mirror turns off itself when a player sits a chair.

It's because you lose your collider when you enter VRC_Station, then OnExitTrigger fires. It can't be helped.


I can't see the chat window.

To leave and join again would help you. If not so, restart the VRChat client. I guess that it's because the VRChat client doesn't handle a race condition properly but I'm not sure. It can't be helped.


I recommend you to upload the HTML on the Internet and set its URI to the web panel. In my experience, loading from the Internet with HTTP is more stable than loading from local, especially when your project has many web panels.


The following sections are for those who want to customize the keyboard.

Basics - 基本

The keyboard system is not complicated but simple. The HTML on the web panel has some JavaScript functions and the SetWebPanelURI action sets URI like javascript:key('A') to activate the function. That's all.

このキーボードの仕組みは簡単で、WebPanelにセットされたHTML上のJavaScript関数をSetWebPanelURIアクションで javascript:key('A') のように呼び出しているだけです。

I wrote an article about the keyboard system. It's written in Japanese but it might be no problem since it has many images and codes.



You Should Know - 注意点

When you rewrite HTML, you have to break the prefab instance and delete the prefab file itself. Otherwise, you can't apply your code to the web panel.


My Friends Works - VRChatキーボード開発の現状

Since I released my keyboard world, various people have been developing various keyboards. I'll introduce two of them.


Beanow, my Dutch friend, develops the keyboard which has Japanese IME. You can use it in his world, Language University. Beanow has a plan to distribute his keyboard.

オランダのBeanowさんが開発しているのは日本語IMEが使えるキーボードで、Language Universityというワールドで使用可能です。Beanowさんはこのキーボードを配布予定だそうです。

Chiu, my Japanese friend, develops the keyboard which has Japanese IME. Each players have each keyboards and can use it wherever they go. Chiu too has a plan to distribute the whole chat system.


Beanow's has the US layout, Chiu's on the other hand has the JP layout. It's related to the reason I don't develop by myself but cooperate with my friends and distribute my assets in the public domain. I'll talk about it in the next section. It's a long story but I think it's worth it.


My Purpose - 配布の目的

First of all, the most important thing here is that each language keyboards have different keyboard layouts.


Take a look at the general US layout and the general JP layout, you may realize that special characters are almost different, aside from alphanumeric characters.


Second, you should know that VRChat SDK handles only a key being typed physically. It means that you must develop the key combination by yourself. For example, 'a' as only 'A', 'A' as 'Shift + A'.

さらにもうひとつ重要なのは、VRChat SDKが扱えるのは物理的に押下されたキーのみで、コンビネーションキーの働き、たとえば、A → a、Shift + A → A、といった違いは自前で実装しなければならない、ということです。

Things are getting more complicated. There are some characters VRChat SDK doesn't receive. For example, 'Shift + ;' is for ':' in the US layout, but the JP layout has a single key for ':'. Basically, VRChat SDK doesn't receive such a key. Because there is no setting for such a key in the OnKeyDown/Up triggers. The only exception I know is '@' in the JP layout since it's mapped to '`'.

ここから少しややこしくなります。たとえばUS配列では : (コロン)は Shift を押しながらの ; (セミコロン)キーで、JP配列では ; キーの隣の単キーとなっていますが、このような文字、US配列で Shift を押しながら入力する文字で、他の配列のキーボードでは単キー入力する文字は、VRChat SDK上では基本的に入力不可能となっています。OnKeyDown/Upトリガー上に対応するキーが存在しないからです。私が把握している唯一の例外はJP配列の @ です。これはUS配列の ` にマッピングされているので例外的に入力可能となっています。

Every language keyboards have almost the same layout for alphanumeric characters and comma and period. These characters are only character keys my keyboard has. How come? The reason is not based on technical issue but my philosophy.

各言語でほぼ合致しているのが英数字と句読点のキーで、私のキーボードではこれ以外の文字キーを実装していません。なぜか? これは技術的な問題によるものではなく、私の思想によるものです。

I had no problem making a Japanese keyboard since I was a native Japanese speaker. However, I had a problem making the other language keyboards since I hardly spoke them except for English.


VRChat is a world-wide platform that various language speakers gather. If I couldn't provide every language keyboards, somebody would feel exclusive. I don't want to make anybody feel exclusive in my world.


Additionally, many languages have a way to describe with alphabet like the romanization of Japanese. I've seen a lot of Chinese speakers and Korean speakers talking in their mother tongue with my keyboard even though those languages are far from English. Twenty-six characters have much power to describe various words.


Also, many people were asking me "Add the question mark key," but I was worried about how to manage the layout problem. The key is placed at different position in some languages, such as Spanish, Italian.

「クエスチョンマークを付けてくれ」というのもよく言われるのですが、これも先程のキー配列の問題があり、一時期かなり悩みました。スペイン語イタリア語の ? の位置が違うからです。

Yes, the question mark is important to talk. I was thinking that the function keys were very useful for it but I rejected because it would break affordance. The best UI is the UI nobody cares. I, myself, don't want to learn a rule for specific situations.


When I come to think of it, language grammars themselves have a way to make interrogatory sentences. For example, "Do you ..." in English, "... ですか(desuka)" in Japanese, "... 吗/嗎(ma)" in Chinese. Moreover, you can add "question mark" as it is at the end of sentence. I've seen it a lot of times in my world.

さらに、よく考えてみると、疑問符というのは補助的なものであり、疑問文を表現する方法は各言語の文法それ自体に内包されていると気づきました。日本語の「~ですか」や、英語の「Do you ~」、中国語の「~吗/嗎」、等々。さらに、どうしても必要な場合は文末にそのまま「question mark」と付けることもできます。実際、私のワールドでよく見かける光景です。

Then I thought, what should I do next? It seemed that I got stuck here because of my philosophy. I already fixed most of bugs as far as I could. It looks like my keyboard is stable now. So, the next thing I should do is to hand it over to someone who develops.


Through these thought processes, I decided to stop developing by myself and distribute it to everyone. I want you to customize it, develop some features, make your own language keyboard and distribute it without any hesitation. That's why I put my assets in the public domain.


About Me - 作者について

VRChat: Kanata 2nd
Discord: Kanata#3360
Twitter: https://twitter.com/Kanata_VRC
Culture Blog: https://medium.com/@kanata
Tech Blog: https://qiita.com/katanov