ブログ・お知らせ

世界に一つだけのカスタマイズマクロキーボード

こんにちは、5月いっぱいで入社して2ヶ月になる新入社員です。
まだ知らないことがたくさんあって、基本的な業務の技術から少しづつ学んでいくところです。
会社の雰囲気と福祉がよくてとてもいい会社だと感じました。

すぐ本題ですが、タイトルに書いた通り、
今回は私が使っているキーボードに関して紹介したいと思います。


プログラマーだと、一日中長い時間パソコンをいじることが多いですよね。
特にIT系の仕事だとキーボードを打つことが多く、
方向キーとかを操作するため手を動かしたりする時がたくさんあると思います。
ちょっとだけならそこまで気にする問題ではないですが、色んな操作をするために
一日でも何時間を打つ、それが毎日、毎週、何ヵ月になると
いくら高級なものを使っても手首には負担になりますよね。


その中で自分は少しでも負担を減らしてくれる方法を探して
効率を高めるマクロキーボードを作ることができました!


まず先にお伝えしますが、


今回のマクロの場合だと、
購入したキーボードから提供するソフトウェアの機能を利用することになるので、
私が使っているブランドではないと
一般キーボードでは対応できません。


私が使っているこちらのキーボードに興味がある方はぜひ最後までご覧ください!

Corsair K70 PRO MINI WIRELESS Review - RTINGS.com

こちらは現在私が使っているキーボードです。
(オリジナルデザインの写真がなく、ネットから持ってきました。)

機械キーボードで ‘コルセア’ (corsair) というブランド名です。
モデル名は “K70 PRO MINI” です。
高いブランドなので、買うまですごく悩みましたが、
無線で小さく、デザインがおしゃれで、押し心地もすごくいい感じです。
もともとはゲーミングキーボードなので、反応速度とか同時入力にもできて
見た目だけじゃなくしっかりされていると感じられました。

機械キーボードは交換性がよくて
他のキーキャップを入れ替えることでキーボードのデザインが変わります。


今になってみると、なぜか最初よりダサくなった感じがしますね。
私にデザインの感覚がないことを改めて感じました。

デザインのことで雑談が長くなりましたが、マクロの本論に入ります。

この’コルセア'(corsair)というキーボードは

ICUEというアプリケーションを提供します。
私はこのモデルだけに対して説明していますが、
このモデルだけではなく、このブランドのキーボードならどのモデルでも
ICUEアプリケーションが対応できます。

照明の光を自分の欲しいキーキャップだけに光るようにする設定など、
このアプリケーションからコルセアの製品を連携し、それぞれの設定からたくさんのカスタマイズができます。

こちらが今回のメインです。

左側のキー割り当てから各キーにそれぞれの機能を持たせることができます。


上記のイメージをみると、真ん中に白い□の中、Sと書いていますね。
その横には”下側へ”と書いてます。
これは Sを押したとき、Sの英語文字が入力されることではなく、
下側の方向キーの動作になることです。

またwadにもそれぞれ”上側へ”, “右”, “左”を実装しました!


見てらっしゃる方はすでに気づいたかも知れないですが、
私が使っているキーボードには方向キーがありません。
なのでwasdを打つことで方向キーを動かすことができました!

でも”あれ?じゃ英語と日本語はどうやって打つの?”と思っちゃいますね。

このコルセアのマクロには

キーボードを押したままにすると、その押している間には別の機能を持たせることができます。

こちらはプロファイールです。現在は二つのプロファイールを使っています。

左側の下を見るとプロファイルスイッチという機能があります。
こちらの機能は現在使っているマップされたキーから別のプロフィールに転換することができます。

私は左側にある”CAPSLOCK”のキーは使うことがほとんどないので
このキーを転換キーですることにしました。

こうすると、”CAPSLOCK” のキーを押してないときは一般キーボードと同じ状態ですが、
“CAPSLOCK”を押している間にはそれぞれのキーに別の機能を持たせることができます。


はい、押したらこう変わりますね。

ご覧の通り、今アプリケーションをタスクで起動するときは反応が遅いですが、
実際に設定が終わったらプロファイルスイッチに反応制限はないです。

プロファイルスイッチで”CAPSLOCK”を押している間に
上記で設定したWASDが方向キーになるのも設定ができたので

では、実際にどういう動きになるか直接にみて見ましょう。

はい、片手で方向キーを動かすことができました!

このマッピングは私が勝手にしたやり方なので必ずwasdにする必要なく
方向キーを右にすることもできるので特にこだわりはありません。

最初は右側に設定しましたが、
右の手はマウスを操作しながら左の手に方向キーをするのが楽でしたので
後から左手に再マッピングしました。(現在の設定です)

これで右手に負担を減らすことができましたね。
特に手が “asdf jkl;” の並びを維持しながら操作できるのはかなり強いです。
これに加えて上記のマクロ設定のイメージみたいに
私はすでにたくさんのマクロを入れ込みました。

片手に操作ができるとすごく便利なので私はよく使われる機能を全部入れて使っています。

その中からよく使うコマンドを入れたキーに関していくつか紹介します。

Q,E

こちらは HomeとEndに使っていますね。
文脈の端っこに移動する機能としてよく使っていますので
これも片手でできるようQ,Eに設定しています。

Tab, R

こちらはタブを移動する時よく使います。
このコマンドは一般キーボードでも片手で操作できるので
いらないかな?という気持ちだったのですが、
まさかの方向キーの次で一番使っている機能です。
なによりキーボードは 打ちやすくて手が楽なのはすごく大事だ と感じました。

X : 左の端っこまでドラッグ
T : enter
F : 削除
G : backspace

主に使う機能を持ってきました。
特にマクロにする必要まではないですが、やっぱり指から近いところに設定すると楽ですね。
これが左の片手で操作できるのはすごく強いです。

もっといろんな機能がありますが、
長い話になりそうなので、今回はここまで紹介します

最後実際の使い方を見てみましょう。

ここまで読んでいただき、ありがとうございます。

おすすめのお役立ち情報

2024年もあっという間に5月に。。。
相変わらず X(旧twitter)を中心に情報収集していますが、2024前半のお役立ちポストをいくつかご紹介します!

その1:SEO情報

Google発SEOスターターガイドの改訂版の公開されました。

その2:コーディング

受託案件では様々な仕様のコードに触れるので、こういう機能があると助かります。

CSSでもネストが使えるようになってきて、if文のような使い方もできるようになりました。

その3:デザイン

こういった素材を自作できるようになっておくと他のデザインに応用がきくようになります。
練習あるのみ!

AdobeXDの更新が止まったこともあり、Figmaを使い始めました。
こういう作業効率を上げる便利なプラグインの情報は助かります。

その4:その他

ITだってものづくり。自分たちの仕事に関わる権利くらい知っておかないとですね。

お花見散歩

こんにちは。3月は寒い日が多かったですがついに春がやってきましたね。
春といえば桜の季節!
今回は、桜の見どころをめぐるお散歩のおすすめをお届けします。

まずは、会社から歩いて行くことできる距離にある靖国神社です。
桜の木はたくさんありますが見逃せないのは、開花のニュースでおなじみの標本木です。

Q.さくら(そめいよしの)の観測はどこで行っているの?
A.靖国神社で観測を実施しています。開花・満開を観測する対象を「標本木」と言い、1966年から靖国神社のさくらを観測するようになりました。
それ以前は、気象庁構内に植えてあったさくらの木で観測していました。

引用:東京管区気象台ホームページより

次は、東京でお花見といえばこちら中目黒の目黒川沿いです。
お洒落にスパークリングワインを飲みながらお花見をされている方がたくさんいらっしゃいました。
某有名コーヒー屋さんは1200組待ちだったとか・・・。
ソメイヨシノ老齢化により、樹勢の低下や倒木・枝折れ対策として去年から剪定と植え替えを行っているため桜のアーチにはならなくなってしまっているのが寂しいです。

お洒落な雰囲気なら中目黒駅から池尻方面ですが、桜なら中目黒駅から反対方向へ歩いて行くのがおすすめです。

人も少なくてオススメのお花見お散歩は、桜新町です。
桜新町といえば、サザエさんです。長谷川町子美術館があります。
そのサザエさん通りから日体大前までの桜並木は人も少なくゆっくり散歩ができます。

来年の桜の季節にお散歩してみてはいかがでしょうか。

花粉の季節

こんにちは。社員です。

担当になったのですが、特に書くことがありません。

そういう時は季節の話をするのが決まりです。なので、表題通り花粉のお話です。

自分は花粉症ですが、基本は薬で対処しています。ただ、現代において正解は生成AIが知っているはずなのです。色んな方がいるので、聞いてみました。画期的な解決方法を知っているはずです。

全員に「花粉症対策を教えて下さい。100字程度でお願いします。」と質問してみました。

ChatGPT 3.5

花粉症対策:マスクの着用、室内でのエアコン利用、外出時の帽子やサングラスの着用、目のケアと定期的な手洗い、抗アレルギー薬の服用を心がけましょう。

Google Gemini

花粉症対策
外出時:
・マスク、ゴーグルで花粉をガード
・衣服に花粉をつけない
・帰宅後はうがい、手洗い、着替え

生活習慣:
・睡眠と栄養バランスを整える
・適度な運動
・ストレスを溜めない

その他:
・花粉情報チェック
・早めの治療

これらの対策で、快適な生活を送りましょう。

Microsoft Bing

花粉症対策のポイント:
1. 治療薬を使用: アレルギー症状に適した薬を摂取。
2. 花粉を避ける: マスク着用、飛散時期外出避ける。
3. 洗眼・鼻うがい: 花粉を体外へ。
4. 免疫力アップ: ビタミンCや抗酸化物質を摂取。

Claude 3 Sonnet

花粉症対策は、外出時にメガネやマスクを着用し、帰宅後に洗顔やシャワーで花粉を落とすことが重要です。室内ではこまめな掃除機がけや加湿が効果的です。症状がある前から対症療法薬を服用し、十分な睡眠とバランスの良い食生活を心がけましょう。花粉飛散情報を確認し、必要以上の外出は避けるのもポイントです。

だそうです。

マスクして薬飲みます。

明けましておめでとうございます。

初めまして。
新年一発目のブログを任されました。望月と申します。
今年もよろしくお願いいたします。

さて、なにを書こうか迷いましたが、新しい年ということでここはひとつ、新年に因んだお話をしようかと思います。

抱負について

皆さんは新年の抱負を掲げていますか?
新年を迎えるとき、「新年の抱負」として新しく目標を立てる人がいると思います。
まだ考えてないという方、ぜひこのブログを読み終わったあとに考えてみてください。
もう既に考えてる方も、参考にしてみてください。

本題に入る前に「抱負」という言葉の意味を今一度おさらいしましょう。
ChatGPTさんに聞いてみました。

「抱負」という言葉は、特定の目標や志向を実現しようとする強い意欲や希望を表す言葉です。
通常、自分が成し遂げたいと思う大きな目標や、将来に対する願望や計画に関連して使われます。
例えば、新年に立てる新年の抱負や、キャリアや人生の進路に関する抱負などがあります。

とのことです。
今回はこれを基に少しお話ししようと思います。

2023年の抱負は?

2023年、私が掲げた抱負は「めんどくさがらないこと」でした。
ChatGPTさんに言わせれば、物足りない抱負かもしれません。
毎日が少しでもいい日になればいいなと、そんな思いで考えました。

実際のところ、めんどくさがることは減ったと思います。
洗濯がめんどくさい、食器洗いがめんどくさい、掃除がめんどくさい、などなど。
人によっていろんな「めんどくさい」があると思います。
そんなときに抱負を思い出し、重たい腰を上げることもありました。

めんどくさがり屋な人にはおすすめの抱負となっております。
ぜひお試しください。

いざ、2024年。

そんなわけで2024年の抱負について。
今年はChatGPTさんを見習って、方向性を変えて少しだけスケールを大きくしてみます。

私は海外の映画やドラマを見るのが好きで、英語のまま楽しみたいと常々思ってました。
題して「英語の映画を英語音声&英語字幕である程度理解できるようになる」です。

英語の勉強は過去に何回も挫折してきました。
しかし、2023年の抱負を経て以前よりも少しだけめんどくさがらない私が出来上がりました。
今の私ならあるいは。ということで、英語を扱えるようになると可能性が物凄く広がるのではと今から夢見てます。

今の私は簡単な英語ならなんとか理解できる程度のレベルです。
もし、またブログを書くことになったら経過を報告しようと思います。
果たして継続しているのか。

まとめ

いかがでしたでしょうか。
一年の始まりに抱負を立てたものの、一ヶ月後には忘れてる。なんて経験がある人もいるかと思います。私もそうです。
そんな人は私と同じように「めんどくさがらないこと」から始めてみるのもいいかもしれません。

2024年が素敵な年になりますように。
ここまでお読みいただきありがとうございました。

Godotを使ってみよう

はじめまして。
入社1年と半年くらいの者です。
まだ知らないことが多かったり締め切りが次々にやってきたりと、毎日目が回りそうになりながら過ごしています。

さて、今回はOSSのゲームエンジン「Godot」(ごどー)の使い方を見ていきます。  
お仕事とはまったく関係ありません。  
作るものは3DゲームでのHello World!である(と私が思っている)Roll a ballです。  
ボールを操作してフィールドに散らばるコインを集める感じのやつです。

Godotを触るのは初めてだったので、AIの先生方に作ってもらって「オォ!」みたいな記事にしようと思っていたのですが、なかなか難しかったのであきらめました。

インストール ~ プロジェクトを作る

この辺は特に迷わないと思うので飛ばしていきます。
公式サイトからアーカイブをダウンロードして解凍するだけ。
中身の実行ファイルがGodotです。

プロジェクトの作成もまず迷わないでしょう。

  1. 「+New Project」して適当な保存場所を選ぶ
  2. プロジェクト名を指定して「Create Folder」を押す
  3. 「Create & Edit」を押す
  4. エディタが開く

分かりやすいですね。
プロジェクト名は「Roll_a_ball」としました。

画面上のオブジェクトを作る

ここからが本題です。
見た感じ、Godtではプレイヤーや地面などオブジェクトのまとまり1つ分がシーンという扱いのようです。
ゲーム > シーン > 基本的なオブジェクト  のようなメンタルモデルなんでしょうかね。
あんまりよく分かってないですが、雰囲気で進めていきます。
お仕事で作ってるわけではないので怖いものなしです。

地面

まずは地面を作ります。
右上の「3D Scene」を押して「Node 3D」を追加します。
これは何も入っていない、何も設定されていない空っぽのハコです。

このハコに地面としての特徴を足していきます。
Node3Dのコンテキストメニューから「Add Child Node」を選択し、「Create New Node」のダイアログで「MeshInstance3D」を指定します。

Meshって付いてるやつは見た目など、モノのカタチ系のあれですね。たぶん。

そして、InspectorでMeshに「New PlaneMesh」を指定します。

これで「Node 3D」を一枚の平面として視認できるようになりました。

次に実体をつけていきます。
今は目には見えているものの、他のオブジェクトと接触することはありません。
プレイヤーがこの平面に着地することができない状態なのです。

画面上部の「Mesh」から「Create Trimesh Static Body」を選びます。

「StaticBody3D」と「CollisionShape3D」というものが追加されましたね。

これで他のオブジェクトが接地できるようになりました。
Collisionと付いてるものは衝突判定を持つ何かですね。おそらく。  

地面はいったん出来上がりです。
「Ctrl+S」を押すとシーンの保存ダイアログが出ますので、「Plane.tscn」として保存しておきます。  

本当はプレイヤーが地面の端から奈落に転落しないよう四方に壁を作ったりしたいところですが、余白が足りませんので割愛です。

プレイヤー

次にプレイヤーを作ります。

シーン

まずはプレイヤーのシーンを作成します。
「res://」のコンテキストメニューから「Create New > Scene…」を選択します。

「Create New Scene」のダイアログが出ますので、以下を指定して「OK」します。

  • Root Type: RidgitBody3D
  • Scene Name: Player

Rigidと付いているものは硬い実体で物理的な影響を受けるものみたいですね。
加速とか摩擦とか重力とかのあれです。

これでPlayerシーンができました。

次はPlayerのモデルです。
モデルはBlenderなどで作成したモデルデータを取り込んだりアセットを使ったりするのですが、今回のプレイヤーキャラクターはただの球体ですので、組み込みの基本オブジェクトを使うだけです。

地面のときと同じく、Playerのコンテキストメニューから「Add Child Node」を選択して、「MeshInstance3D」を追加します。
そして、MeshInstance3Dの設定で「Mesh」に「New SphereMesh」を指定します。

エディタ上で球が見えるようになりましたね。

衝突判定

Playerも地面やコインと触れ合いたいのでCollisionを付けます。
Playerのコンテキストメニューから「Add Child Node」を選択して、「CollisionShape3D」を追加します。  
そしてCollisionにもSphereの形を与えます。
CollisionShape3Dの設定で「Shape」に「New SphereShape3D」を指定します。
そこにあるモノのカタチが実際に見えている形と同じとは限らないのです。不思議ですね。

あと、ちょっと面倒なのでさぼるためにナゾの設定を1つ追加します。
Playerの設定で「Lock Rotation」というチェックをOnにしておいてください。

とりあえずプレイヤーもこれで出来上がりです。
「Ctrl+S」でシーンを保存します。

コイン

なんだか慣れてきましたね。よし。
シーンを作って、形(Mesh)をつけて、衝突判定(Collision)をつける、です。
そして出来上がったものがこちら。

後から撮ったキャプチャなのでFileSystemに余計なものが映り込んでいますがお気になさらず。。

Meshには「New CylinderMesh」というものを使っています。
ただ、そのままだと厚みがあるのと、寝そべってしまっていますので、以下のようにTransformを設定してコインが立っているような見た目にします。

  • Scale y: 0.1  (平べったくなります)
  • Rotation x: 90  (直立します)

Transformというのはモノのカタチを変えたりするやつです。
設定内容に見られる通り、大きさ、回転、位置などを変えることができます。

くっつけてみる

出来上がったものたちを地面のシーンでくっつけてみましょう。

地面のシーンを開きます。
開いたらPlayer.tscnのコンテキストメニューから「Instantiate」を選択します。

Planeのシーンの中にPlayerを配置できました。
しかし、だいぶ世界が狭いですね。。
地面を広げます。
PlaneのMeshInstance3Dを選択し、TransformでScaleのxとzを30に変更します。

広くなりましたね。
これでいったん動かしてみましょう。
右上の再生ボタンを押すとゲームをデバッグ実行できます。
何か聞かれますが「Select Current」で大丈夫です。  

虚無。

カメラ

カメラを忘れていました。
ゲームの中の世界はカメラを通して見ることになるので、カメラがないと何も見えません。
今回はプレイヤーである球に追従する感じにします。

まずPlayerのシーンを開きます。
Playerのコンテキストメニューから「Add Child Node」を選択して、「Camera3D」を追加します。  

カメラが追加されました。
エディタ上で紫の枠が向いている方向がカメラに映る範囲を示しています。
上にくっついてる△は何でしょうね。「こっちを上にしてるよ」の記号かな?

ただ、今はカメラが球の中心にめり込んでいるのでプレイするときに見づらいです。
(エディタ上の「Preview」をチェックすると、このカメラを通して世界を見ることができます)  

カメラを球の後ろ上方に移動させ、軽く見下ろすように角度を調整してみましょう。
カメラのTransformで以下のように設定します。

  • Position (x, y, z): (0, 2, 2)
  • Rotation (x, y, z): (-20, 0, 0)

もう一度くっつける

地面のシーンに戻って再生してみましょう。

まだ何か変ですね。。
世界がほとんど灰色なのと、どうやら落下しているようです。

灰色を直す

一面灰色なのは、光がないために世界が暗黒に包まれてしまっているという状態です。

地面のシーンで、エディタ上部の縦の「…」(表現しづらい)から「Add Sun to Scene」を選択します。エディタ上だと分かりづらいですが、これで太陽が追加されます。
もう一度縦の「…」を開き、「Add Environment to Scene」を選択します。
これで青空が見えるようになります。

これで光ができたので良しとします。

落下を直す

落下しているのは、Playerが地面にめり込んでいるために接地判定が起きていない、という状態です。
これは直すの簡単そうですね。
PlayerのTransformでPosition yを1にしてあげます。
これでPlayerが少し上に配置されるようになり、地面に着地できるようになります。

これで実行してみましょう。

よさそうですね。
ついでにCoinもいくつかInstantiateしておきます。

スクリプト

あと少しです。
ここまでで見た目はなんとかなりましたが、まだPlayerを動かすことができません。
オブジェクトにスクリプトをくっつけることで動かせるようにしていきます。
Godotには組み込みの言語としてGDScriptというものがありますので、今回はこれを使ってみます。

プレイヤー側

とりあえず、矢印キーで動けるようにしましょう。
マウス操作で向きを変えられるようにもしたいですね。

Playerのシーンを開き、Playerのコンテキストメニューから「Attach Script」を選択します。
何か聞かれますが、「Create」で大丈夫です。

エディタが開きますので↓のスクリプトをコピペします。
(シンタクスハイライトがないと見づらいな。。)

extends RigidBody3D

# 他のスクリプトからPlayerを参照できるようにします。
class_name Player

# y軸方向に対する回転を加えるためのオブジェクトです。
# 最初、直接Playerに回転を加えたらなんかうまくいかんかったので間にこれを挟んでます。
@onready var yaw := $Yaw

# y軸に対する回転方向の入力値を保持しておきます。
var yaw_input := 0.0

# Called when the node enters the scene tree for the first time.
func _ready():
    # マウスカーソルをゲーム内にキャプチャします。
    # キャプチャすることでマウスの入力値が扱えるようになります。
    Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)

# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
    move_player(delta)
    rotate_player(delta)
    reset_mouse_capture_at_ECS()

# なんか組み込みのメソッド。よくわからん。
func _unhandled_input(event: InputEvent) -> void:
    # マウスのx軸方向の移動をPlayerの回転として利用するために保存します。
    # 入力値は大きすぎるので1000分の1してます。
    if event is InputEventMouseMotion:
        if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
            yaw_input = - event.relative.x * 0.001

# 移動
func move_player(delta) -> void:
    # 矢印キーによる左右の入力をx軸(左右方向)、上下をz軸(前後方向)にマッピングします。
    # これがPlayerを動かす力の元になります。
    var input := Vector3.ZERO
    input.x = Input.get_axis("ui_left", "ui_right")
    input.z = Input.get_axis("ui_up", "ui_down")

    # マッピングした力をRigidBodyに加えます。
    #    $Yaw.basis: 現在のYawオブジェクトのベクトルに対して力を加えます。
    #               (Yawの背中を押すように力を加える、と言えばよいか)
    #    input: 前後左右の入力値を反映した力を加えます。
    #    1000.0: しかし、このRigidBodyを動かすにはinputの値だけでは足りないので、1000倍します。
    #    delta: 前回のフレーム描画からの経過秒数です。たぶん。
    #            ゲームを実行する機器の性能によって1秒当たり何回画面を描画できるか(fps)が変わります。
    #            前回描画からの経過時間を乗算することで、経過した時間分の移動に必要な値が求まり、
    #            どの機器であっても適切な移動後の位置に描画することができるようになります。
    apply_central_force($Yaw.basis * input * 1000.0 * delta)

# 振り向き
func rotate_player(delta) -> void:
    # カメラにマウスカーソル移動分の回転を加えます。
    # 回転を加えたままにするとグルグル回ってしまうので、すぐに0.0を入れて次のフレームで止まるようにします。
    yaw.rotate_y(yaw_input)
    yaw_input = 0.0

# ESCキーを押すことでマウスカーソルのキャプチャを解除できるようにします。
# ゲームウィンドウを閉じるときに必要になります。
func reset_mouse_capture_at_ECS() -> void:
    if Input.is_action_just_pressed("ui_cancel"):
        Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)    

# 他のオブジェクトとの当たり判定です。
# コインと接触した場合はそのコインを取り除きます。
func _on_body_entered(body):
    print(body.name)
    if body is Coin:
        body.queue_free()

コイン側

次にCoinのシーンを開き、同様にスクリプトを追加します。
こちらは「Coin.gd」になります。

pythonextends RigidBody3D

# Playerとの接触判定に使うために名前が必要になります。
# オブジェクトの名前の方だけで何とかならんものか。。
class_name Coin

イベントの通知設定

イベントの発生を監視し、スクリプトに通知する設定を追加します。
キーボード入力などは入力機器からのイベントなのでデフォルトで監視していますが、ゲームオブジェクト同士の接触といったイベントは個別に設定してあげる必要があるようです。

まずは、Playerの設定で以下を設定します。

  • Max Contacts Reported: 1
  • Connect Monitor: On

これはイベントの発生を監視対象にするかどうか(たぶん)と、Max~は何でしょうねこれ。
とりあえず、ここが0だったりOffだったりするとオブジェクト同士が接触しても通知が行われず、イベント処理のためのメソッドが呼ばれません。

次に、イベントとイベント発生時に呼ばれるメソッドを紐づけます。
Playerの設定のNodeタブを開き、「RigidBody3D > body_entered(body: Node)」のコンテキストメニューから「Connect…」を選択します。  

何か聞かれますが、そのままOKで大丈夫です。  

これで、イベント発生時に先ほどコピペしたスクリプトの_on_body_enteredが呼び出されるようになります。  

やったか

これで動くようになったはずですが、どうでしょうか。。

やり切った。よかった。
お疲れさまでした。

このままではまだゲーム性のカケラもないですが、手始めとしてはイイ感じなのではないでしょうか。
ここから、

  • 全てのコインを回収するまでのタイムアタックにしたり、
  • 次のコイン取得までの所要時間に応じて得点のレートが上がるスコアアタックにしたり、
  • エネミーを追加したり、
  • 自機を白黒反転できるようにして同じ色のコインに接触したら得点、違う色なら1ミス(いいゲームですね!)にしたり、

のようにいろいろ付け加えていくこともできます。

最後に

今回はGodotを使ってRoll a ballを作ってみました。
普段はお仕事で業務アプリ的なものを作っていますが、ゲームは業務アプリとは違ったパラダイムに触れることになるので新鮮です。
性能面がシビアで10fpsを割り込んでしまいまともに動かせない、昔別れてそれきりだった三角関数や微分積分と偶然再会(そして勉強し直し)、といったいろいろなイベントもあります。
ということで、気分転換にゲーム作り、いかがでしょうか。

みなさまの過ごす日々が実り多いものでありますように。

リモートワークの1日

こんにちは、エンジニア2年目のOです。リモートワークしてますか?

トリックスタジオの社員は、ほぼ全員がフルリモートワーカーです。いい会社ですね。

今回は、私のリモートワーク&フレックスのリアルな1日をシェアしたいと思います。

それではどうぞ!

AM9:50~AM9:55 起床

・ご近所の犬に吠えられるレベルでうるさい目覚ましで起床。

・iPhoneの生やさしいスヌーズ機能ではリモートワーカーは起きられないからです。

AM10:00~AM11:00 出勤と朝会

・Slackで「勤務開始します」と報告します。

・プロジェクトのメンバー15人くらいで朝会を行います。エンジニアだけでなく、デザイナーさんやディレクターさんも同席します。

・今のプロジェクトはアジャイル開発です。それぞれ持っているチケットの進捗や、今スプリントの目標が達成できそうかなどを話し合います。

「リモートワーク ミーティング」で検索したら出てきたフリー画像です。本当に?(引用:Pixabay)

AM11:00~PM13:00 仕様書確認と設計

・新しくチケットを取ったので、そのタスクに取り掛かります。企業様からいただいた資料を確認し、噛み砕いて、簡単な設計書を作ります。資料の不明点や不足点などはディレクターさんにSlackで確認します。

PM13:00~PM14:00 昼食

・昼ごはんはほぼ毎日パスタです。

・食べ終わると30分ほどベッドで仮眠をとります。リモートワークの1番いいところですね。

・けたたましい目覚ましで起きます。

PM14:00~PM15:00 仕様確認やコードレビュー

・19分前に「今電話いいですか?」と連絡が入っていて心臓がヒュッとなります。

・結局ミーティングは1時間後になったので、一旦紅茶を淹れて脳を目覚めさせます。カルディに売ってあるJanatのダージリンがおすすめです。janatは表参道にカフェもあるのでぜひ行ってみてください。ピラミッドというバナナチョコレートケーキが絶品です。

https://janatea.com/jp/tearoom/

・午前の作業の続きをやります。今度はPostmanでAPIを叩いて仕様を詳しく確認します。

・コードレビュー依頼がいくつか来ていたのでレビューします。

(引用:Pixabay)

PM15:00~PM17:15 ミーティング

・確認した仕様の疑問点や改善点を洗い出し、エンジニアのリーダーとミーティングで話し合います。リリースまでにかかる具体的なサブタスクやスケジュールを切ります。

・夕会に参加し、今日の進捗を報告します。

・全部終わるとラジオ体操します。下半身の筋肉を動かさないといずれ恐ろしい目に遭うと整体師さんに脅されたからです。

PM17:15~19:00 開発

・企業様から連絡が来るまで手が空いたので、別のチケットを取り、実装に取りかかります。

・午後は固定ミーティングが入っている日が多いので今日はラッキーです。

PM19:00 退勤

・退勤!!!!!!!!!!!!!!

・あとは寝るまで遊びます!やったーー!!!!

(引用:unsplash.com)

いかがでしょうか?

これは私の典型的な1日ですが、8時出勤17時退勤でそのあと歯医者へ、なんていう日もあります。

ライフワークバランスを柔軟にとりやすいのがリモートワーク&フレックスの良い点ですね。

悪い点は体重が7kg増えたところです。

この記事が参考になれば幸いです。

パンクロックおじさんの休日

みなさん、こんばんは!
宮野です。

去る8月1日の早朝、僕は富山に降り立っていました。

なぜなら、『乱シリーズ 越中・小矢部の乱』に出陣をするためでした。
本来であれば8月中に公開すべき内容でしたが、自身のガラパゴスゾウガメの歩みよりも遅い筆のスピードにより、ここまで時間がかかってしまいました。
こんなに遅くなってしまって、反省してま〜す。

結論からいうとマジで最高でした。

まぁ、それはとりあえず置いておいて!
早朝に着いたので、ライブの時間までまだまだ時間があります。

なにかちょっとした観光ないかなーって思って地図を見ると近くにお城があるみたいです

引用元:富山市の観光サイトTOYAMA NET

歩いて20分かからないくらいで着いちゃいました。
朝はよ〜なので全然暑くなく、さくさく歩けました。
いろんな場所にレンタサイクルがあったので、観光する方はそちらを利用してもいいかもしれません。

池の透明度が高すぎです。
透明度が高すぎて高杉晋作になりました。

池ごしの富山城・・・雄大です。

もうちょい近づいて

現在は郷土博物館として城内を見学できるそうです。
一通り、富山城と周りの公園を散策して富山駅に戻ります。

喉が渇いたのでコーヒーでも飲もうかと思い、近くのカフェを検索すると

「富岩運河環水公園」には、世界一美しいと言われているスタバがあるんです!

というツイートを発見!!!

富山駅から徒歩10分ほどの場所ということなので行ってみました。
朝一で訪れた為、他のお客さんはおらず貸切状態でした。

世界一かはわからないですが、めちゃくちゃ美しかったです。
これは写真センスの問題。。。

せっかくなので、テラス席にしました。
日陰になっているので、それほど暑くなく、過ごしやすかったです。
過ごしやすすぎて、アイスコーヒー一杯で1時間くらい粘ってしまいました。

電車の時間が近づいてきたので、富山駅に戻り、[あいの風 とやま鉄道]に乗り込み。いざ石動駅へ

石動(いするぎ)駅

今回のライブが行われる[クロスランドおやべ]の最寄駅になります。
そこから市営バスに揺られること約10分。。。

つきました!
クロスランド小矢部!

昼前につきました。
物販開始は15時なんですが、マキシマム ザ ホルモンだけめちゃくちゃ並んでる!
他のバンドの物販は並んでいないのに、歴戦の腹ペコ達は既に長蛇の列となっていました。

1時間くらい外で並んだあと、建物の中に入りました。
建物に入った瞬間にこの光景が!!

気合いをいれて3時間並びました。
欲しかったグッズは全て買えたので長時間並んだ甲斐がありました!

グッズを買った後は会場まで少し時間があったので軽食食べて、クロスランド小矢部を散策。

カマキリの形をした遊具がありました。
それにしてもめちゃくちゃ天気が良い。

そして17時。。。開場です。
もちろん陣取る場所はモッシュやダイブが激しい最前エリアです。

ステージを見るといよいよって感じがしますね。

主催者の方の挨拶と屈強なセキュリティの紹介のあと、1番手のマキシマム ザ ホルモンが登場です。
登場した瞬間からボルテージはマックス、めちゃくちゃ最高でした。
途中酸素の限界を感じて後ろの方に逃げたりしましたが、気がついたら最前エリアでモッシュしてるんですよね。。

期待していた曲もやってくれて他の参戦者と踊ったりサークルモッシュしたり1バンド目から最高でした。

セットチェンジの間はひたすら休憩。体力回復に努めます。

つぎのバンドは10-FEET。
マキシマム ザ ホルモンに負けず劣らずボルテージは最高潮!
まぁ、この場にいてテンション下げろという方が無理です!

ただ年齢にはやはり勝てないのか、またもや途中酸素の限界を感じて後ろの方に逃げてしまいました。
気がついたら最前エリアで再びモッシュしてるんですけどね!

大ヒット曲である[第ゼロ感]の時にはお父さんに肩車されたちびっこがモッシュエリアまでやってきていて、最高でした。
お父さんめちゃくちゃキツかっただろうな・・・

セットチェンジの間はひたすら休憩。体力回復に努めます。

最後は圧倒的な貫禄と共にken yokoyamaです。
やはり最初からテンションはマックス。
最前エリアの真ん中に陣取ることができて酸素が多かったのか、kenさんの時は後ろに逃げずに済みました。

やはりkenさんのMCはほとんどが下ネタ。。。
子供に聞かせられないような話は子供がたくさんいる前でしていました。笑

なんというかあっという間の時間でした。
帰りは駅までタクシー、電車に乗って終電間際の富山駅から夜行バスで帰ってきました。

まじで最高の時間でした。
帰りのバスの中では乱シリーズプレイリスト作ってました。
しばらくはそのプレイリストしか聞かなかったです。

また、こんな神みたいな3マンがあったら絶対行きたい!

最後に、『乱シリーズ 越後・新潟の乱』の KenYokoyama のダイジェストが公式からアップされていたのでご覧ください。

これだからパンクロックは最高なんだよ!!!

南インドの有名な食べ物

こんにちは!
今年の4月に入社したサティです。インド出身です。
日本に来て4年になります。食事はほとんど自分で料理を作って食べています。
インドのスパイスも持っていますのでたまにビリヤニを作ります。
ビリヤニはインドで凄い有名な食べ物の一つです。

出典 https://www.charcoaleats.com/post/different-state-different-taste-biryanis-of-india

ビリヤニとは(日本ビリヤニ協会オフィシャルサイト)
ビリヤニは肉やスパイスをご飯に入れて、炊き込んだご飯です。
マトン、チキン、野菜など、いろんな種類のビリヤニがあります。

自分はインドの南の方です。南インドで人気な食べ物はカレー、ドーサ、ご飯などです。
南インド人は毎日カレーを食べており、その種類はとっても豊富です。

出典 https://thelotusheart.co.nz/menu-type/curry-dosa/

カレーにスパイスを使っていても辛くない料理はもちろんあります。
その中でレモンライスっていう混ぜご飯タイプの食べ物は辛さもマイルドで美味しいですし、
日本人の口にあうと思います。

東京にはレモンライス用の専門の店もございます。
https://lemonrice.tokyo/

皆さんもお試しください!