君のキーボードなんかうるさくない?(静音化の話)

この記事は自作キーボード Advent Calendar 2017 7日目の記事です。

お気に入りのスイッチでキーボードを自作して、職場でドヤ顔しながら
カチャカチャ!ッターン!!
などとやっていたら、何やら視線を感じたり舌打ちが聞こえてきたりしませんか。

せっかく作ったキーボードを誰にも咎められることなく堂々と使えるように、この記事では静音化についてまとめました。
※Cherry及び互換スイッチに関して扱います

そもそもなぜうるさいのか

Cherry系スイッチは軸とハウジングに分かれていますが、押下時に軸が底に当たるとき、また離して軸が押し戻されハウジング上部に当たるときに音が鳴ります。Cherry青軸では更に押下時に軸の一部が中のバネによって弾かれる事で音が鳴ります。青軸はもうそういう物なので、音を気にするときは選ばないようにしましょう。
Cherryのサイトで詳細なスペックや機構が見られるので参考にしてください。
https://www.cherrymx.de/produkte/mx-red.html
その他ケースの素材やスイッチの位置によっても音は変わるので、お持ちのキーボードと普段の打ち方でどのタイミングが一番うるさいのか検証しつつ対応するとより効果的に静音化できるかと思います。

静音化の方法

完成したキーボードに装着するものや、組立時に必要なものがあります。

O-Rings


https://mehkee.com/products/o-rings-for-mx-switches
静音性 ★☆☆
打鍵感 ★★☆
コスト ★★★
みんな大好きO-Rings。色々なメーカーが販売しています。とにかく安く入手も導入も容易ですが、性質上押下時の音しか軽減できません。ゴムが厚い為、打鍵感はかなり変わってしまいますが、メンブレンや東プレの打鍵感が好きなら逆に良くなるかもしれません。とにかく手軽に試せるので、キーボードを静かにしたいならまずはこれを試してみることをオススメします。

Zealencio Silencing Clips


https://mehkee.com/products/zealencio-silencing-clips
静音性 ★★☆
打鍵感 ★★★
コスト ★☆☆
スイッチの上部に嵌めるタイプで、押下時、離した時いずれもクッションが音を軽減してくれます。ただしクッション材が薄い為か、打鍵感がほぼ変わらない反面、押下時の音があまり軽減されない印象です。価格は若干高く、スイッチと同じ数購入すると結構な金額(5,000円~)になってしまいます。
嵌め込むと爪が引っかかり、取り外しにくくなります。またケースによっては横から見える為見栄えが良くないです。

Silent Switches


https://mehkee.com/products/cherry-mx-silent-switches
静音性 ★★★
打鍵感 ★★☆
コスト ★★★
静音赤軸(ピンク軸)、静音黒軸と呼ばれるものです。
軸の接触する部分が柔らかい素材になっています。押下時、離した時いずれもかなりの静音化が見込めます。底に当たるときの感触が他の軸と比べると柔らかくなりますが、O-Ringsより少し固い程度です。東プレに近い気がします。
コストについては、他のスイッチとあまり価格が変わらない為、追加の費用が必要ないのもポイントです。

Silicone Gel Keycaps


http://dro.ps/b/MPmbbEh/t?mode=guest_open
静音性 ★☆☆
打鍵感 ★☆☆
コスト ★★☆
シリコン製のキーキャップです。素材により音が響かなくなる為若干の改善はしますが、軸自体が当たる音は軽減されないのであまり効果は無いです。また、押下時にハウジングに干渉することがあり、打鍵感がかなり損なわれます。ボックス型でない場合は付けないほうが良いかもしれません・・・。


上記(Silicone Gel Keycapsを除く)の比較を撮りました。
あまり同じ強さで叩けていないので参考程度に。

まとめ

上記の静音化は組み合わせることで効果が増すこともあるので、色々検証してみると良いと思います。ちなみに私はCherry Silent RedとO-Ringsを組み合わせています。他の軸を使う場合、O-RingsとZealencio Silencing Clipsの組み合わせが打鍵感は大きく変わりますが効果が高いです。
また、どのようなケースでも本体及び設置している机が響くことがある為、下記のような対策も効果的です。
– 各パーツの素材を音が響きにくい物にする
– 本体内部に何らかの詰め物をする
– キーボードの下に布またはゴム系のマットを敷く(デスクマット、マウスパッド等)
 ※個人的にオススメはこれです
静かになったキーボードでカチャカチャッターン!していきましょう。

この記事はErgoDox EZ Shine(Gateron赤軸)で書きました。

サウンド系アセットのはなし

この記事はUnity アセット真夏のアドベントカレンダー 2017 8日目の記事です。
素材系(主に効果音)と総合的なオーディオソリューションについて扱います。

サウンド素材アセット

イケてる効果音の素材集を紹介します。

Universal Sound FX


5000ファイル以上、16bit 44.1kHz .wavファイル形式の効果音素材集。広く浅い感じで、とりあえずこれを買っておけば大抵のケースには対応できそうです。爆風や物が割れる音、水の音などリアル系の素材が多いです。UI系も含んでいますが、少し弱い印象です。
含まれているフォルダはこんな感じ。

更にサブフォルダで分類されているので、詳しくはストアページをご覧ください。

Advanced UI


900ファイル以上、16bit 44.1kHz .wavファイル形式の効果音素材集。ファイル数は少ない(?)ですが、こちらはUIにフォーカスしていて、様々なジャンルのゲームに適したサウンドが含まれています。
こちらはSci-Fi系効果音のDigital ElementsModulated Movementを含むバンドル版があります。
中身はこんな感じ(バンドル版のAdvanced UIのみ展開したスクリーンショット)。

Modulation Movementは移動時の風切音などがメインで若干使いづらい印象があるので、Sci-FiをやらないならAdvanced UIのみ、やるならDigital Elementsバンドルがオススメです。

素材の賢いimport方法

上記の様なアセットを活用する際、実際に使用するファイルは含まれるファイルの一部になると思いますが、import時及び不要なファイルの削除時に結構な時間と手間が掛かる為、取り込みたいプロジェクトに直接importするのはオススメしません。importするファイルはチェックボックスで選択できますが、その時点で試聴できないのであまり現実的ではないです。
また、UnityEditorは音をプレビューしながら探すのに向いていません。音を確認するには対象のファイルを選択してインスペクタ上で波形が表示されている部分を操作する必要があります。

素材をimportしてから選定〜プロジェクトに取り込むまで、私が普段行っている手順を紹介します。

1. Unityで素材用プロジェクトを作成
2. 素材用プロジェクトにアセットをimport
3. Studio One Primeのブラウザに、素材用プロジェクトのAssetsフォルダを追加
 
4. Studio Oneのブラウザ上でクリップを選択(選択時に音が鳴る)
 
5. 使用するクリップをStudio OneのブラウザからUnityのProjectビューへ直接D&D

唐突にStudio Oneというものが出てきましたが、所謂DAWです。Primeは機能制限有りの無償版ですが、クリップを選択するだけで即プレビューできるので、ブラウジングに便利です(私はカーソルキー↓を連打して探しています)。また、簡単な加工がその場で出来てしまうのでオススメです。
素材系アセットはアップデートでファイルが追加されることがありますが、上記手順3までのセットアップをしておけば、以後その素材用プロジェクトに更新分をimportすることでStudio Oneのブラウザですぐに管理できます。
他のDAWでも似たようなことができるので、BGM作成用等で所持している方は試してみると良いと思います。
※ちなみに記事用に無償のStudio Oneを入れてみましたが、私は普段はAbleton Liveを使用しています。

オーディオソリューション

オーディオの再生やロード等の管理をするAssetの紹介です。

Master Audio: AAA Sound


Unityで音声を再生しようとすると、どの様にロードするか、ロード対象のリストをどう持つのか、再生するときはどうするか、オブジェクトプーリングの実装、といったような面倒なことが色々ありますが、それらをまとめて解決してくれるのがMaster Audioです。

基本的なワークフローは、Master AudioのメインとなるGameObjectをシーンに配置し、使用するサウンドを各種類1個ずつD&Dして登録します。

上記はarrow、blast、Screamというオーディオクリップを登録した状態です。ここから更に、各サウンドについてバリエーションを登録することができます。例えば殴る音や矢を射る音等を再生するとき、一つのオーディオクリップのみ使用すると単調に聞こえますが、バリエーションを使用すると射る時の微妙な強弱等を良い感じに再現できます。
各グループの音量調整もここで行うことができます。プレビューボタンがついているのも便利です。

弾の発射及び着弾程度ならインスペクタ上で全て実現できます。
例えば下記の様なイベントを付けたGameObjectをInstantiateまたはSetActive(true)すると”arrow”が再生され、DestroyまたはSetActive(false)すると”blast”が再生されます。

他にもプレイリスト等様々な機能やスクリプトからの制御もできますが、長くなってしまうので公式ドキュメント等参考にしてみてください。

※2017.1で動作しますが、現時点でスクリプトの変換が走ります

SoundManagerPro 3: Next-Gen Audio and Sound Toolkit


軽く触ってみようと思いましたがあまり直感的でなかったのと、台風が接近してイライラしていたのでやめました。たぶんMaster Audioと同じようなことができるんじゃないでしょうか・・・無料なので試してみてください。
2015年で更新が止まっていますが、2017.1で動作しました(demoシーンだけみた)。

まとめ

今回紹介したアセットは、じっくり作り込むときは勿論、かなりの時間短縮が可能な為、最近ホットな#unity1weekなどで活躍しそうです。
アセットストアだけでなく使えるものはなんでもつかって開発を加速していきましょう。

明日(8/9)はザバイオーネさんです。

unityroomのゲームジャムに参加した #3

Unity 1週間ゲームジャム
お題「積む」
https://unityroom.com/unity1weeks

前回も参加していたが、爆死したので記事は書いていない(忘れたい)。
今回は無理せず自分のできる範囲で企画したのと、実装が楽だったので余裕をもって作業できた。

今回作成したゲーム「ゲーム積む積む

github … https://github.com/teriyakichan/unity-tsumige

企画

今回のお題を見て、最初はやはり物理エンジンを活用したゲームを考えていたが、何にしようか悩みつつSteamでゲームを買っていたら物凄い大量の積みゲーを持っていることに気づいたので、これを題材にしてゲームを積むゲーム(?)を作ることにした。

(上記はぼくの積みゲー on Steam)

最近はダウンロード販売も増え物理的に積むことも減ってきたので、数字だけ増やせばいいや、ということでクリッカーにした。
時間がギリギリだったので少々汚いが、実装は特に悩むことは無かった。一般的なクリッカーにある施設と強化はまとめて1アイテムに両方の効果をもたせるようにした。

素材

できれば素材は作りたくないが、今回はそうもいかないのでイラストを描いた。
ペンタブが無かったのでKindleリーダーと化していたiPad Proとあぽーぺんを引っ張り出してProcreateというアプリで作成。
購入後殆ど使用していなかったが、これが物凄く使いやすかった。レイヤも使用できるので、テンプレートとなる画像を1つ作成しておき、複製して量産した。
DropBoxに送る機能もあるので、描き終わってすぐUnityにインポートできた。
今回は使用していないが、iPad用のドット絵エディタも買ってあるので機会があれば使ってみたい。

レベルデザイン

今回最も時間がかかったのがレベルデザインだ。数字だけなので仮データはすぐできたが、良い感じのバランスにするのにかなり苦労した。某クリッカーの攻略Wiki等をあさりなんとなく感覚を掴みつつ作成した。
必要コストの高いアイテムをデバッグするために最初からプレイしていては日が暮れてしまうので、デバッグ用に1キーで100,000点程加算する機能などを作った。

また、データはCSVにしてアイテムの追加、数値変更を容易にできるようにした。
作成したデータはこれ。1クリックあたりの得点、レベル毎に上昇する得点、初期コスト、レベル毎に上昇するコストなどを定義している。

その他

本当は降ってくるゲームを積む演出を作りたかった。現状MAX100オブジェクトが降ってくるが、積むとなるとオブジェクトが画面上に残り総数は増えそうなので、オブジェクト数を減らしつつ良い感じに積んで見えるようにする方法を考えたが思いつかず、今の演出に落ち着いた。

全体的にやりたいことは大体できたので満足している。
次も余裕をもって作業できるよう企画~設計をしっかりしたい。

unityroomのゲームジャムに参加した

Unity 1週間ゲームジャム
お題「跳ねる」
https://unityroom.com/unity1weeks

@stella_tohrupomが引っ越しで居なかったので一人で参加。
水曜くらいにTwitterで知って土曜日の12時から作業開始、日曜19時半にupで作業時間は15時間程度。
平日はOverwatchをプレイしていたが土日は起きてる間ほぼフルで使った。締め切りがあると集中できて良いね。

ゲームジャムは初めてだったので色々と反省点がある。次に活かしたい。

今回作成したゲーム「Drop and Bounce

github … https://github.com/teriyakichan/unity-dropandbounce

企画

ゲーム内容は30分程度で考えた。というよりは、過去にストックしていた案で「跳ねる」というお題にマッチするものをピックアップするだけだったので時間はかからなかった。
要件としては、
 1. ステージ自動生成
 2. 遊んでもらうための仕組み
 3. 簡単操作

1については、締め切りまでの時間がないので、ステージクリア型等の膨大なコンテンツを用意するのが現実的でない為。ステージクリア型にするとおそらくステージエディタの作成からになってしまうので、FlappyBirdの様にロジックを組んでしまえば後はなんとでもなるものを目指した。

2はランキングを用意した。ステージクリア型ではないので、リプレイ性を高めるにはプレイヤー同士で競わせるかゲーム内容(アイテムやギミックのパターン)を盛るしかなく、工数的に前者が軽いのでランキングを優先した。

3についてはunityroomの性質上、ブラウザでプレイするのであまり複雑な操作にはしたくなかった。1~3キーで考えていたが操作はシンプルであればあるほど良い。

ステージの自動生成

アイテム及び床ブロックは予め10個ずつInstantiateして使いまわすようにした。
いずれもランダム配置、前に配置したアイテムとの距離を一定以上保つようにした。床ブロックは反射したときの挙動を変えるため、角度もランダムで配置。
このあたりのバランス調整にあまり時間を割けなかったので、難易度がいまいちな感じになってしまった。上手ければぽんぽん進めるようにしたかったが、無限に進んでしまうことのないように気をつかったところ、誰がプレイしてもにたようなスコアになってしまった。
結果、公開から3時間経過しても、テストプレイで自分が出したスコアが1位という悲しい結果になってしまった。遊んでくれた人ありがとう。

ランキング

これが意外と時間がかかった。普段開発に使用している自宅サーバをぶっ壊したまま放置していたので、このブログを設置しているさくらのレンタルサーバ上で作業。
.vimrcを移すところから始まり、SSL等のサーバ設定、ドメイン設定で無駄に時間がかかってしまった。
最近MySQLを触っていなかったのでテーブル設計はあまりイケていない。負荷を気にしたがアクセス数を考えると問題はなかった。ただし現状の設計ではプレイ毎にINSERTするので、ある程度インストール数が見込めるiOS/Android向けには使えそうもない。現状でも2000レコード程あるので、1プレイが短い本作には向かなかった。
ランキングは汎用的に使えそうなので、今後似たようなシステムを採用することがあったら今回作成したものを改善して流用したい。

警戒していたクロスドメイン問題は普段経験していたのでとくに躓かなかったが、C#とPHPを並行で書いていたので色々と混乱した。サーバはプロダクションで動いていたのでエラーが表示されず、シンタックスエラーで悩まされたりした(変数の$わすれたりとか)。このあたりは環境をしっかり整えて対応したい。

またMiniJSONによるJSONのデシリアライズをUniRxで非同期処理にしたかったが、WebGLではうまく動かなかった。同期で動作を見たところ大した時間がかからないのと、デシリアライズするタイミングはちょうど画面の描画が止まっていて特に違和感はなかったので同期にした。おそらく現在のレコード数なら16ms以内に終わっている。
このあたりは今のうちに調査しておきたい・・・。

他の作品ではランキングを実装しているものはあまりなかった。その代わり(?)Twitterでシェアする機能が多かった。ハッシュタグもあるのでかなり反響はありそう。まったく考えていなかったがこの手のイベントなら必須機能かもしれない。

操作とルール

シンプルに徹しすぎたかもしれない。現在の仕様だとかなり運ゲーになるので、もうすこし何らかの機能(例えば消費アイテムで一定時間スローになるとか)を追加してもよかったかもしれないが、検討中に締め切り時間になってしまった。
またボールが上昇したときにカメラを引くなどして、もう少しドロップのタイミングをプレイヤーが考える余地をもたせたかったがこれも時間が足りなかった。

その他

未完成では出したくなかったので、そのままiOSビルドしたらリリースできるようなものを目指した。見栄えは拘ったつもりだがUI系はデフォルトを使用しているのでもう少し詰めたかった。このSkyboxシェーダのお陰でかなり見栄えがよくなったと思う。今後も活用したい。
効果音については完全にタスクが漏れていたのでまにあわなかった・・・。作業開始前にタスクを全て洗い出す必要がある。締め切り当日の15時くらいにタスクを洗い出して絶望していた。

まとめ

他の人の投稿を見ると一発ネタも多いがどれも瞬発力があってすごく面白かった。アイディア勝負になるところが大きいが、自分には到底思いつかないものばかりだったのでもっと人の作品を見て吸収したい。
特にBounce Shooterという作品がヤバかった。こういうゲームが作れるようになりたいな。
Unityで開発している人なら誰でもしってる某ブログの人も参加していてとても良い刺激になった。やはりあの人はすごい。

次は一週間フルに使って頑張りたい。

進捗#3

進捗ダメです。

・モチベーションがあがらない
 → 作るものを変更したので今は準備が大変
・時間が無い
 → Overwatchが楽しい

Unite行けばモチベーションは上がりそうだがその前のGWを有効活用したい。

WordPressのサーバを壊したので、さくらのレンタルサーバに移した。
WP専用にしたかったのでVPSにはしなかったが、sshログインができたので移転が楽にできた。
コントロールパネルは死ぬほど使いづらいが機能的には値段の割にとても良い。

自宅サーバは実験やらなんやらでよく壊すので、ホームページを安定したサーバに移転するのは必要だった。本当は壊す前に移転したかった。

進捗#2


・とりあえず左右移動はできるようにした(rotateも)
・板を走らせてもモチベーションが上がらないので仮モデルを買った
・買ってから一度も使っていなかったAllSkyを入れてみた

現状RigidbodyにAddforceしているが、キビキビ動いてほしいのでTransで動かす予定。