kidoOooOoooOOom

ゲーム開発やってます

管理ゼロ本を読んでふりかえりについて意識高くなった

"管理ゼロで成果はあがる ~「見直す・なくす・やめる」で組織を変えよう"

を読んで良いなと感じたり勉強になったことがたくさんあったので、メモっておく。

まず、第1部のふりかえりに関するトピックで、

週に1度、1時間の振り返りから始める

継続することでチームに改善の意識が定着する

ふりかえりを続けていく大きな効果は、「自分たちの現場は自分たちで改善していくのだ」という意識がチームに根付く

というのを読んで、ふりかえりを継続すること自体の価値に気づけた。

自分の所属するエンジニアチームも一応毎週金曜に振り返り(KPT)の時間を取っているけれど、他の予定が重なったり忙しかったりするとスキップして2〜3週間おきの実施になってしまうこともある。

そういう状況が続いてしまうと、ふりかえりの頻度が低くて当たり前になってしまい、チームの改善の意識が薄れてしまいそうだなと感じた。

最近はkpt-bot も導入して、何かK か P か T を感じた瞬間にslack上に書き込むようにしているんだけど、それも改善の意識を根付かせるのに良い効果があるなと思った。

qiita.com

今後もちゃんとふりかえり継続していくぞ〜

Arbor3のBehaviourTreeでシミュレーションゲームの敵反撃行動を実装

UnityAsset の Arbor3 を使うと、StateMachineやBehaviourTreeをノードベースで割と簡単に実装できる。

https://arbor.caitsithware.com/

今回、個人的に制作予定のシミュレーションゲームの敵行動AIの一部をBehaviourTreeで試しに実装した。

(BehaviourTreeの各要素の説明はこちらの資料がわかりやすかった) niconare.nicovideo.jp

こちらの資料を参考にしつつ、今回実装した敵の挙動は下記の通り。

状況:プレイヤーに攻撃をされた時の敵の行動

  • 反撃可能かつ、プレイヤーの攻撃をくらっても死ななそうなら反撃を選択する
  • 反撃しない場合、防御をして死ななそうならば防御を選択する
  • 反撃も防御もしない場合、回避を選択する

この挙動をBehaviourTreeで表すと、Rootの下にSelectorを1つ置いて反撃・防御・回避のどれか1つの選択を決定する。 反撃と防御のノードの中に、それぞれSequencerを1つ用意して条件をチェックする。

f:id:gidooom:20190202190026p:plain

これで期待通りの動きをしてくれた。

今後はもうちょっと複雑な動きもBehaviourTreeで作っていくl。

最近の自分の仕事環境

仕事場に私物スタンディングデスクを宅配してもらい、スタンディングデスク環境を構築している。

こんなやつ -> スタンディングデスク

スタンディング始めた頃は結構疲れたけど、最近はかなり慣れてきて1日のほとんどを立って仕事している。

立っていると作業に集中できるし、何より座りっぱなしよりも健康に良いことが証明されているので良いことのはず。

足は基本的にスリッパだけど、足つぼマッサージも置いているので時折乗っている。これも健康的でおすすめ。

最近読んだ、「SOFT SKILLS」の内容がとても良く、スタンディング環境をガチで構築したのもこの本の影響が大きい。

他にもこの本のおかげで改善できた点として、ポモドーロテクニックがある。

ポモドーロは昔から知っていて試してはいるけれども、いつの間にかやるのを忘れるというのを繰り替えしてきた。 だけど、「SOFT SKILLS」に書いているポモドーロのやり方を真似してからは、3ヶ月以上継続できている。

大事なことは割と単純で、1日に達成したいポモドーロの目標を決めてそれをちゃんと計測すること。それだけ。

自分の場合は平日1日8ポモドーロを目標にして、それをポモドーロツールのReport機能で毎週チェックしている。これで継続できるようになってきた。

f:id:gidooom:20190126234020p:plain
ポモドーロレポート画面

使っているポモドーロツールは Be Forcused Pro というツールで、Free版でも十分使えるけれど iPhone同期機能を使いたくて Pro版を買った。まあレポート機能さえあればなんでもいいかもしれない。

Unity認定エキスパート試験2回受けて2回とも落ちた

Unity認定エキスパート試験 Unity Certification - Expert Gameplay Programmer がUnityの勉強にもなるため会社でも取得を奨励されており、意識高く2回受けたけれど2回とも落ちてしまった・・・。

しかも2回とも、合格基準点500に対し、自分の成績は490点。 あと1問正解すれば・・・と後悔が残る内容。非常に辛い。

でも、合格はできなかったものの、とても勉強になったことは確か。 特に、1回目落ちて2回目を受けるために再勉強した内容がかなり収穫有りで、逆に1回落ちて良かったなと思える。 Unityマニュアル 2周ぐらい見直して、テラシュールブログさんもここ3年分くらい読み漁った。

docs.unity3d.com

まだまだ自分はUnity実践力が足りないことを知らしめる結果となったので、今年はUnity実践力アップを目標に自作ゲームの制作もやり遂げようと思う。

ゲーム制作過程についても、このブログで適宜アウトプットしていこう。

(もちろん受験費用は自腹なので、かなり高めの勉強代になった・・・)

Perforceでフォルダ名を一括で変更するコマンド

最近バージョン管理ツールとしてPerforceを使ってるので、それのメモ。

チームでは基本的にはGUIツールのp4vで操作しているのだけども、p4vからだとファイルやフォルダ名のリネームは1つずつしかできない。
最近、命名規則の変更などで大量のファイル・フォルダ名を変更したくて困ったケースがあった。

例えば、下記のようなbefore/afterにしたい場合

[before]
AAA/BBB/01_CCC/
AAA/BBB/02_CCC/
AAA/BBB/03_CCC/
...

[after]
AAA/BBB/0001_CCC/
AAA/BBB/0002_CCC/
AAA/BBB/0003_CCC/
...


スクリプトとかで下記p4 コマンドを生成して、コンソールから実行すれば一発でいける。

# チェックアウト
p4 edit AAA/BBB/01_CCC/...
p4 edit AAA/BBB/02_CCC/...
p4 edit AAA/BBB/03_CCC/...


# リネーム
p4 move AAA/BBB/01_CCC/... AAA/BBB/0001_CCC/...
p4 move AAA/BBB/02_CCC/... AAA/BBB/0002_CCC/...
p4 move AAA/BBB/03_CCC/... AAA/BBB/0003_CCC/...

# submit
p4 submit -d "rename"

slackの分報で「1日ひとつだけ、強くなる」を実践

ここ3ヶ月ぐらい続けていて、割と成長に繋がっていると実感している方法。

自分が大好きなプロゲーマーのウメハラさんの本を参考にした方法で、
slackの分報チャンネルにリマインダー機能を用いて
「今日の成長したことを書こう」*1
と夕方頃に促させる。
そしてそれに毎日ちゃんと返信をする。


これによって、毎日なにかしたら成長することを意識して過ごせるし、
今日1日を振り返るきっかけにもなっていい効果が得られていると感じている。

勉強の心理学的にも、毎日コツコツ覚えていくことが効果があると言われているようなので、今後もこのメソッドを継続して成長していければなぁと思ってメモった。

*1:実際はチャンネル別に「今日格ゲーで強くなったことを教えろ!」などリマインダーにもいくつかバリエーションもたせてる

UnityのUI-Default.shader 内のUNITY_UI_ALPHACLIP について

Unity 5.3 に含まれる UI-Default.shader でまだ理解できてなかったところを1つずつ消化していく。
UNITY_UI_ALPHACLIP関連について。

Properties
    {
        (省略)
        [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0
    }
    SubShader
    {
 (省略)
        Pass
        {
        CGPROGRAM
            #pragma multi_compile __ UNITY_UI_ALPHACLIP
   (省略)

            fixed4 frag(v2f IN) : SV_Target
            {
                half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;

                color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);

                #ifdef UNITY_UI_ALPHACLIP
                clip (color.a - 0.001);
                #endif

                return color;
            }

いくつか省略。まず最初の Properitesで定義している

[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0

トグルでON/OFF できるproperty 。ONの場合は UNITY_UI_ALPHACLIP 変数に 1 が入る。
[Toggle] _UseUIAlphaClip と書いた場合は _USEUIALPHACLIP_ON 変数に1が入る挙動らしい。
Unity - Scripting API: MaterialPropertyDrawer

#pragma multi_compile __ UNITY_UI_ALPHACLIP

multi_compile についての Unity manual を見てもよく分からなかった。
Unity - マニュアル: 複数のシェーダープログラムのバリアントを作る

こちらのページが分かりやすい。
qiita.com
#ifdef で分岐する/しない パターンのことをシェーダーのバリアントとして実現している感じ。
__ が UNITY_UI_ALPHACLIP =0 のときのバリアント、UNITY_UI_ALPHACLIPがUNITY_UI_ALPHACLIP=1のときのバリアント。

                #ifdef UNITY_UI_ALPHACLIP
                clip (color.a - 0.001);
                #endif

fragment shader内のここで、UNITY_UI_ALPHACLIP=1の場合のバリアントで HLSLのclip()を実行している。
clipは渡された値が0未満だったらそのピクセルを破棄する処理。つまり、アルファが0.001未満だったら描画しない(完全に透明扱い)
clip (DirectX HLSL)