imog

主にUnityとかの事を書いています

GWふりかえり

大洗帰省

心の故郷である大洗に帰省した

www.instagram.com

www.instagram.com

いつも日帰りだったので今回は一泊二日にしたところ、みんなで帰りを気にせず飲めるので最高だった。ドルフィンで酒を飲み知らない人と一緒に「ジョジョ ~その血の運命~」をデュエットして、翌日はレンタサイクルで大洗を駆け回り非常に充実していた。そろそろまた行きたい。

MMBAR

メタルマックスに出てきた料理を食べながらメタルマックスについて語るイベントがあったので行ってきた。

twipla.jp

前職でも現職でもメタルマックスの話題は誰も伝わらないので10年分くらい喋った気がする。

あと、アリとアリの卵を使ったオムレツを食べた。 www.instagram.com

桜えびの味がした。

ノアフェス勉強会

友人に連れられてノアフェスと呼ばれるイベントの事前勉強会的なのに参加してきた。

noahfes.jp

ノベル&アドベンチャーゲームの祭典らしい。同人やインディーゲーム開発においてノベルやアドベンチャーってあまりプログラマというのを見かけないイメージがあり、案の定プログラマはほとんどいなかった。しかしプランナーやシナリオライター側の発表はあまり聞いたことがなかったのでそれはそれで新鮮で楽しかった。 ノベルやアドベンチャーは観測している範囲だと吉里吉里やティラノエディタをベースに作るのが主流なので、他のジャンルとはまた違った空気感なのかもしれない。

輝夜月にハマる

VTuberはもともと知ってたけど、輝夜月のShowroom生放送を観たらドハマりしてしまった。投げ銭すると即時にからあげやタライが降ってきたり1万円で竹がにょきにょき生えてくるのは絶対テンション上がる。承認欲求が満たされていく。 そのまま委員長の放送見始めたのでその勢いは留まるところを知らない。

割とGW満喫したので明日から一般社会人に戻ります。 ちなみに明日からUniteですが、僕は三日間終日参加しているので気軽にお声がけください。

events.unity3d.jp

当日はUnityできますよTシャツが目印です。

28歳になった

友人からプレゼントが届いたのでじっくり読ませていただきます

誕生日である本日は18本入り550円の焼き鳥パックとスーパードライを捕食しながらSkypeで雑談をしていました。ちなみに去年は家を買うために奔走していました。

秋口の両親の病気から始まり将来を考え始め色々動き回った年でした。選択が正しかったかはわかりませんが動き続けるしかないなあというお気持ちですね。

新しい職場はまだ一週間ほどですが、今までやったことない部分に触れる機会があるのは楽しいです。GC走らないようにチューニングするとかチート対策とかは中々個人ではやらなかったので。 あと趣味でやってたUnityもそれなりに役に立っています。チームの人がチリチリ好きなのもポイントです。

仕事に慣れつつ、引き続き勉強会とかブログでのアウトプットは続けて行きたいところ。 最近はGodotEngineも楽しいのでそっちで勉強会も楽しそうですね。

Godot Engine - Free and open source 2D and 3D game engine

例のアレ貼っておきますのでみなさんそこんところよろしくお願い申し上げます

http://amzn.asia/iuzBsta

GodotEngineのsignalのメモ

最近趣味でGodotEngineを触り始めている。

Godot Engine - Free and open source 2D and 3D game engine

新しい単語や概念が多いので、とりあえず備忘録として。 とにかく日本語の資料が少ない。

signalとは

文字通り信号を送る機能。

http://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/gdscript_basics.html#signals

Godotではあらゆるイベントが発生した際にそれを通知するための仕組みがあり、それをシグナルと呼んでいる。

例えば衝突判定を扱うCollisionObject2Dは、3つのシグナルが存在している。

image

input_event mouse_entered mouse_exited は同名のメソッドをスクリプトで書いたら勝手にコールバックとして呼ばれる。 Unityで言うOnCollisionほげほげメソッドを実装する感覚に近い。

そしてこのシグナルは、自分で定義して通知することができる。

シグナルを自作する

例えば以下を考えてみる

  • Ankouノードは、任意のタイミングで「戦車前進」の通知を飛ばす
  • Kameノードは、「戦車前進」の通知が来たら何かする

image

Ankouはシグナルを通知する側なのでこんな感じで書く

extends Node

# 自作シグナル
signal panzer_vor

func _ready():
    # 自身の panzer_vor シグナルを受けとったら _on_panzer_vor にコールバック
    connect("panzer_vor", self, "_on_panzer_vor")
    # シグナルを送信する
    emit_signal("panzer_vor")
    
func _on_panzer_vor():
    print("Go Ankou")

やることは以下の三つ。

  • シグナルの定義
  • シグナルを受け取れるよう接続
  • シグナルの送信

自作シグナルは signal hoge で定義。 それを受け取れるよう connect でシグナル名、受け取るオブジェクト、コールバック先を書く。最後に emit_signal で送信する。

この時点でエディタ上で panzer_vor シグナルが見えるようになる。

image

Kameさんノードはシグナルを受け取るためにAnkouと接続する必要があるが、それ以外は何も変わらない。

extends Node

func _ready():
    var ankou_node = $Ankou
    ankou_node.connect("panzer_vor", self, "_on_panzer_vor")

func _on_panzer_vor():
   print("Go Kame")

通知を受け取るのをやめる場合、disconnect メソッドを呼ぶと終了できる。

一度Connectしたものを再度Connectしようとするとデバッガでエラーが発生するがゲームは落ちない。

基本的にノード同士のやりとりはシグナルでやったほうが楽そう。

GUI上でシグナルを受け取る

上記connect に相当する部分はGUI上でも定義できる。

image

ここをダブルクリックするとウィンドウが出てくる

image

ノードを指定してコールバックメソッド名を書く。Make FunctionオプションをONにしたらメソッドを生成までやってくれる。

image

適切に設定完了すると、GUI上でコールバック先まで確認できるようになる。

動的に設定しないのであれば、ここで書いてしまった方がわかりやすいかもしれない。

Godotユーザ増えてほしい

実家に帰省している

だいたい以下のことをしていた

 

・家の草むしり

・前職に挨拶

・酒を飲む

・実家のカラオケ喫茶の掃除

・家族と飲む

 

あと1週間ほど滞在するけど、基本のサイクル変わらなそう。

 

高校時代は奨学金を借りてたんだけど、それの完済の通知が実家に来ててテンション上がった。あとは大学のみだ。

 

母から「仕事を楽しくできないなら人生は楽しくない、日頃から考えよう」と言われてあー血が繋がってるなと思った。

 

実家にはインターネットがないので人と会話する以外の娯楽がないんだけど、これはこれでいいものです。

UnityのInspectorはDataStoreの一種かなと思った

ふと思ったのでメモ

今趣味で作ってるゲームはMVPで書いてるけど、ModelにDataStoreの概念があります。

public interface IDataStore<TEntity> : where TEntity : IEntity {
    TEntity ToEntity();
}

持ってるデータからEntityを生成してくれる君です。このデータはサーバからJSONで来てるかもしれないし、ScriptableObjectやAssetBundleかもしれないけどインタフェースで持つのであまり気にする必要はありません。

DataStoreがあるのでEntityはUnityの世界から切り離されていい感じになります。

public class Life : IEntity {
    public readonly int max;
    public int Current { get; private set; }
    public float Ratio { get { return max / Current * 100F; } }
}

雑なライフポイント的なEntityですが、ここにUnityの概念はありません。

一方で、Unityはインスペクタから値を設定できる機能が便利です。ライフポイントとかはまさにインスペクタからチョチョイと弄りたくなるようなやつです。 単純に実現しようとしたらどちらかになりそう。

  • EntityをSerializableにする
  • MonoBehavior継承したScriptにメンバ変数を持たせて内部でEntityを生成する

前者はありだけど、インスペクタからごにょごにょしたいがためにやるのはなんだか・・という気持ちに。 ならば後者かなと思ったが、Entity生成のためにプリミティブなメンバ変数を用意する必要があるので、ちょっと散らかしてしまうなあという気持ちになってしまう。するとこれはつまりDataStoreの仕事では?となった。

なので、InspectorのDataStoreを作ってみる。

[Serializable]
public class LifeStoreInInspector : IDataStore<Life> {
    public int max;
    public int current;
    public Life ToEntity() {
        // いい感じに生成して返す
    }
}

これをComponentに持たせてインスペクタからいじれるようにすればやりたいことは達成できる。持つ側もEntity用のパラメータをそれぞれ持たせるよりは見通しがよくなったかなーというくらいの気持ち。 でも、SerializableせずにMonobehavior継承したComponentとして独立させた方が切り分け方として正しいのかもしれない。

GMOペパボ株式会社を退職しました

2/2が最終出社でした。

f:id:adarapata328:20180205165014j:plain

写真は送別会でいただいたポテチです。 中にポテチ状のメッセージカードが大量に入ってました。Bigサイズくらいはあったと思います。

やってきたこと

2012年に福岡で新卒入社して、研修とOJTを経てロリポップ!レンタルサーバーのフロントやサーバサイドなどを4年ほど担当してました。 去年の春からAndroidエンジニアに転向して東京に転勤、minneアプリ開発を10ヶ月ほどやってました。だいたいReactive Extensionsの布教活動を行ってた気がします。

また、4年ほど新卒研修でメンター業などをさせていただきました。 そのほか、社内勉強会でシェーダ読書会やったり開発合宿でゲームリリースしたりを繰り返して、社内で「ゲームを作ってる人」ポジションで動いてたりしました。

感謝

入社時はhtmlタグすら書けなかった僕がいっぱしのエンジニアになれたのは、周りの方々の支援・指導の賜物です。とりあえず作れればいいやと考えていた自分がソフトウェアーキテクチャやチームビルディングまで考えて動けるようになったし、それは趣味の領域でも大いに役立ってます。

入社3年目くらいにWEBエンジニアとして力足りてないことに不安を覚えて、ゲーム作ってないでもっと集中した方がいいんじゃないかと悩んだことがあります。そのときに、研修してくださった @hsbt さんが「会社はただの通過点だから好きなことをやっていけばいい」と強く推してくれたのを未だに覚えています。あの一言があったので今の自分があると思ってるし、僕も後輩にも同じことを言ってます。

また、エンジニアだけでなく、皆さん本当に優しい人たちばかりで、この6年間は人間関係でで何一つストレス感じることなく働かせていただきました。最初に入った会社がペパボで本当によかったです。

次の職場

3月中旬から株式会社ミクシィXFLAGでゲームクライアントエンジニアとして働きます。学生時代から趣味でゲーム開発はしていましたが、今回初めて仕事としてゲームを作る人になりました。 でも趣味でも引き続き作っていきます。 引っ越しもしないし、オフィスがまた渋谷区で通勤手段全く変わらないので、正直生活変わんないです。

これから

一ヶ月半ほど自由人なので、積んでる本とか読みつつ趣味開発をやっていこうかと考えてます。 ただ、積み本の実践DDDが早速濃厚過ぎて終わらなくて困ってます。今月中に終わるか。 基本的に無職なのでごはんとか呼んでいただけると行きます。 また、福岡にも一旦帰るのでよろしくお願いいたします。

ウィッシュリスト

皆様ご確認のほどよろしくお願いします。

https://www.amazon.co.jp/hz/wishlist/ls/1RJ0EM23AIDBT?&sort=default

2018年の抱負

明けて一週間くらい経ってた。

昨年は家を買ったり東京に引っ越したり、家族が体調を崩したりとだいぶ大変な年ではあった気がする。

今年は2017年より忙しくはなさそうなので、抱負を二つ宣言しとこうかと考えた。

プログラム以外の領域に手を出す

具体的には、絵を書いたり作曲とかをやろうと思う。

きっかけは、東京でいろんなコミュニティに顔を出して様々な開発者と話してからだ。誰も彼も凄まじい情熱を持っており、デザインからコーディングまで全てを一人でやる人も珍しくはない。 自分は基本的にコーディングのみで、音楽やイラストなどのリソースはアセットストアや知人に依頼などが多い。質の良いものを出すという点で委託は良い手段だと思うしこれからもやると思う。が、それはやらない理由にはならんよなあと話してて思った。 作りたいものを他人に伝えられないというところも大きい。以前モデラーの人に作りたいものを文章と口頭で話したことあるけどかなり大変だったし、デザインラフでも描いておけば楽だったんだろうなあと思った。 現状、自分の表現の幅が狭いんじゃないか?という気にはなった。あと単純に楽しそうだから。

とはいえ本業はプログラマーなので、そこのキャッチアップはきちんとしていかないといけないのでどうしようかな〜〜と思ったところで腹が減ったので松屋に行ってきます。

もう一つの抱負は、健康に気を使う事です。