カウンセリングエンジニア

産業カウンセラーの有資格者が発信します。カウンセリング、マネジメント、Unityあたりの内容多めで構成する予定です

UnlitShaderにコメントを書いて処理を説明してみる

概要

Shaderを勉強し始めた友人に「とりあえず基本のShaderを読めるようになりたい」
と言われたので、UnlitShaderにコメントを書いて説明してみたところ
思いの外好評だったので載せてみます。

Shader

結果

コメント入れるのは自分の勉強にもなってよかった。
解説間違えているところがあればご指摘いただけると助かります。

環境

Unity2018.4.2f1

【Rider】#regionが自動で折りたたまれて表示される設定を無効化する。

概要

f:id:pond-comfat:20190623004155p:plain

上記のようなコードをRiderで開くと、

f:id:pond-comfat:20190623004209p:plain

このように#regionが折りたたまれて表示されます。
これくらいのサイズのコードなら問題ないのですが、
いくつか#regionが書かれているコードを読むときに地味にストレスなので無効化します。

方法

RiderのPreferencesから、Editor > General > Code Folding を選び、
Preprocessor regionsの項目のチェックを外します

結果

f:id:pond-comfat:20190623004155p:plain

これで#regionが折りたたまれていない状態でファイルが開かれるようになりました。
(画像だとわかりませんが)

環境

JetBrains Rider 2018.2.3

【Rider】変数を規定値で初期化したときに出る警告を無効化する

概要

Unity2018.3あたりから、下記のようなコードを書くと警告が出るようになりました

f:id:pond-comfat:20190623001707p:plain

警告回避のため、変数に初期値を入れてみます。

f:id:pond-comfat:20190623002558p:plain

すると今度はRider側で警告が出るため、この警告を無効化します。

方法

RiderのPreferencesから、Editor > Inspection Settings > Inspection Severity > C# を選び、
Redundant member initializerの項目のチェックを外します

f:id:pond-comfat:20190623003022p:plain

結果

f:id:pond-comfat:20190623003219p:plain

先ほど出ていた警告が無事に消えました。

環境

Unity2018.4.2f1
JetBrains Rider 2018.2.3

参考

[SerializeField] 属性をつけていると、CS0649警告が出るようになった。消したい。 - Qiita

技術書典6に行ってきました

techbookfest.org

第6回を迎えて認知度もかなり上がった技術書典に参加してきました!

第4回の秋葉原UDXは参加したので自身2度目の参加です。


前日準備

サークルリストの作成

techbookfest.org

公式サイトに載っているサークルリストから、
気になるサークルを選んでサークルチェックリストを作っておきます。

f:id:pond-comfat:20190414184249p:plain

僕が作ったリストはこんな感じで30 ~ 40サークルくらいチェックしました。
地図上にチェックしたサークルが表示されるのが嬉しいですね。

今回の新しいシステム

過去参加したときにはなかった(知らなかった)システムを理解しておきます。

かんたん後払いシステム

f:id:pond-comfat:20190414185249p:plain

僕が前回参加した第4回ではなかった気がするので第5回からのシステムでしょうか。
支払いがスムーズになるのと売り切れてても電子版ダウンロードできるとのことで便利そうですが、
いくら使ったかわからなくなりそうだったので今回は現金を用意していきました。

有料入場時間

f:id:pond-comfat:20190414184653p:plain

第5回は1万人以上が参加し混雑したことを受けて11:00 ~ 13:00は有料入場となっています。
混雑しているのが苦手なのでこの時間を狙って行くことにします。


会場の様子

僕が会場に着いたのは10:30くらいだったのですが、
その時点ですでに上記の様な長蛇の待機列が出来上がってました。
(写真を撮り忘れたためtweetお借りしています)

f:id:pond-comfat:20190414202904j:plain:w300

チケットの整理番号がすでに4500番w
有料時間が導入されたから大丈夫だろうと甘く見ていました。。

結局入場できたのが11:30頃
その時点ですでにこれくらいの混み具合でした。

ですが今回は会場の随所にのぼりが設置されていたこともあり
比較的困らずに目当てのサークルを回ることが出来ました。


戦利品

戦利品がこちら!
元々買おうと思っていたUnity関連の書籍以外にも面白そうな本が多くて
ついつい買いすぎてしまいましたw
少しずつ読んでこちらのブログでレビューしていけたらと思います。
主な戦利品をいくつか紹介します

Unity Graphics Programming

f:id:pond-comfat:20190414214417p:plain

Unityでのグラフィックスプログラミングテクニックの解説本
毎回内容が濃く、参加した際は買うようにしています。

継続的にアウトプットする技術

f:id:pond-comfat:20190414214713p:plain

今回はアウトプットやコミュニケーション術などソフトスキル関連の本が多かったのが印象的でした。
これを読んで継続的にアウトプットを続けていこうと思います。

虎の穴ラボの薄い本。vol.2

f:id:pond-comfat:20190414215330p:plain

虎の穴ラボさんの活動について書かれている本
なんと無料配布していました!
まだ中身読んでないのですがサラッと見ても結構なボリューム!
こういうのがあるのは嬉しいですね。


感想

今回の技術書典も凄く楽しめました!
自分の目当ての本だけでなく、フラッと立ち寄って衝動買した本が面白かったりと
自分の技術知識範囲外の出会いがあるのが良いですね。

また、ほとんどのサークルで物理本に電子版のダウンロードコードついてくるのが印象的でした。
物理でも電子でも読みたい自分としては凄く助かりました。

また次回があったら参加してみようと思います!

【Unity】巌窟王っぽいシェーダー作ってみた

始めに

f:id:pond-comfat:20190402014128g:plain

TVアニメ巌窟王のような、
キャラが動いても紙や服等の柄は動かない感じの表現をしたくなり試してみました。

環境

Unity2018.2.16f1

用意

f:id:pond-comfat:20190402015619p:plain

このSceneを元にキャラクターを巌窟王っぽくしてみます。

こちらのSceneには下記Assetを使用しています。
assetstore.unity.com

実装

結果

f:id:pond-comfat:20190402022844g:plain

まとめ

そこそこ巌窟王っぽい仕上がりになったのではないでしょうか。
UnityのUnlitShaderをちょっと変更するだけで、興味ある方は出来るので色々試してみてください。

参考

【Unity】【シェーダ】スクリーンに対してテクスチャをマッピングする方法を完全解説する - LIGHT11

【Unity】ずぶの初心者(自分)でもUnityのShaderを理解して使いこなしたい その4: ごった煮プログラミングバイブル

C# ref outの違いとそれぞれの使い所

概要

refとoutについて勉強がてらまとめます。

refとoutの定義

まずはrefとoutそれぞれの定義をMSDNから確認します。

ref

ref キーワードは、引数を値ではなく、参照によって渡すことを示します。 参照渡しで渡すことにより、呼び出されたメソッドの引数に対する変更が、呼び出し元のメソッドに反映されます。

madnより引用

out

out キーワードによって、参照により引数が渡されます。 これは、ref キーワードと似ていますが、ref では変数を初期化してから渡す必要があります。out パラメーターを使用するには、メソッド定義と呼び出し元のメソッドの両方で out キーワードを明示的に使用する必要があります。

madnより引用

これを見る限りrefもoutも参照渡しだが、引数の渡し方に違いがあるようです。
コードで確認してみます

public class RefOutSample
{
    public class Hoge
    {
        public string Name;
    }
    
    public void RefSample1(ref Hoge hoge)
    {
        hoge.Name = "refのサンプルメソッドです";
    }

    // outは中で初期化してから使う必要があるためこのメソッドはエラーになります.
    public void OutSample1(out Hoge hoge)
    {
        hoge.Name = "outのサンプルメソッドです";
    }

    // このメソッドのように中で一度初期化するとエラーになりません
    public void OutSample2(out Hoge hoge)
    {
        hoge =  new Hoge();
        hoge.Name = "outのサンプルメソッドです";
    }

    void Main()
    {
        Hoge hoge;
        // refは変数を初期化してから渡す必要があるためこの呼出はエラーになります
        RefSample1(ref hoge);
        // outは大丈夫です
        OutSample1(out hoge);
        OutSample2(out hoge);
    }
}

それぞれの使い所

上記から、 refは渡した変数に直接操作をしたい時
outはメソッドの中の結果を外に渡したい時に使うのが良さそうです。

out

outはTryParseの様な判定をboolで返しつつ結果も返して欲しい場面で使えそうです。

    void Sample()
    {
        string a = "100";
        int b;
        
        bool result = int.TryParse(a, out b);
    }

ref

refはMathの計算系で使うのが良さそうかなと思い、
下記のようなコードを書いてみました。

void Pow(ref int x)
{
    x = x * x;
}

void Main()
{
    int i = 10;
    Pow(ref i);
}

うーん。。微妙ですね^^;

int Pow(ref int x)
{
    x = x * x;
}

void Main()
{
    int i = 10;
    i = Pow(i);
}

の方がわかりやすい気がします。
誰かrefの良い使い所を知っている方いたら教えてください。。

まとめ

outは少し使い所わかったけど、refについては疑問が残ったまま。。
どちらにせよ基本的には値渡しにしてreturnで値を返してくれたほうがわかりやすいので、
そうした設計を心がけるようにします。

書評:『科学的な適職』は最高の意思決定本

f:id:pond-comfat:20200311010352p:plain

鈴木祐さんの『科学的な適職』を読みました。

著者の鈴木祐さんは年間5000本もの科学論文を読んでいるサイエンスライターの方で
その豊富な知識に活かして仕事の効率をアップし1日に2~4万文字もの原稿 を量産するという超人のような方です。

また、運営している「パレオな男」というブログも人気を博しており、
あのDaigoさんも尊敬する人として名前をあげているという方。

読もうとした動機

実は僕、昨年夏から転職活動を始めて12月から新しい職場で働いています。
本音では転職する前に発売してほしかったなと思いつつも、
自分の転職活動がどうだったのかを客観的に振り返るために読むことにしました。
なので今回は『科学的な適職』を踏まえて自分の転職についても振り返ってみたいと思います。

総評

本書は一言でいうと『意思決定手法の解説本』だと感じました。
転職本でありがちな自己分析や、特定の職業 / 業界の紹介といった内容が一切なく
『適職』=『幸福が最大化される仕事』という定義のもと、
幸福を最大化させるための職業選びという一見ふわっとした問題に対して
どのように意思決定していけば良いのかを解説してくれています。

職業選びという局面だけでなく日常の様々な意思決定に活かせるノウハウが詰まった1冊です。

具体的に参考になった箇所について触れていきます。

参考になったところ

正しい職業選択のための5ステップ「AWAKE」

「科学的な適職」では『AWAKE』と呼ばれる5ステップで適職を選んで行きます

  1. 幻想から目覚める(Access the truth)
    「好きを仕事にしよう!」などのよく聞くキャリアアドバイスの審議を検討し、
    職業選択で陥りがちな幻想から目を覚ましていくステップ
  2. 未来を広げる(Widen your future) キャリア選択を誤らせる”最大の原因”を特定し、 仕事選びに関する視野を広げるステップ
  3. 悪を取り除く(Avoid evil) 「人間を不幸に追いやる職場の条件とは?」という問題を考え、 数ある人生の選択肢の中から最適なものを選ぶためのツールを学ぶステップ
  4. 歪みに気づく(Keep human bias out) 人間の脳に巣食う「バグ(バイアス)」を探し出し、 取り除く方法を学ぶステップ
  5. やりがいを再構築する(Engage in your work) 仕事の満足度をチェックする方法や仕事にやりがいを持つ方法を学び、 日々の幸福度を高めるためのステップ

この各項目の頭文字をつなげて『AWAKE』と呼んでいます。

意思決定ツール「マトリックス分析」

デザインエンジニアのスコット・ビューが開発した技法で客観的な判断力を上げる効果が高く
米軍の意思決定などにも使われているとのことです。
転職でありがちな、複数の候補から「どれが良いか?」を絞りたい時に有効な手法です。

具体的には次の5ステップを実行して表をまとめていきます

  1. 基準のリストアップ
    幸福に繋がりやすい要素と幸福を破壊する要素を基準列にリストアップ
  2. 候補のリストアップ
    望む仕事の候補をすべて書き込んでいきます。
  3. 重要度の記入
    それぞれのマスに5点満点で重要度を記入していきます。
    「とても良い」なら5点を、「とても悪い」なら0点をつけます。
  4. 重みの決定
    それぞれの基準ごとの「重み」を3点満点で設定します。 これは大事なら3点、まぁまぁ大事なら2点、普通なら1点をつけます。
  5. 最終判断
    重要度と重みを掛け算、すべての点数を出して各候補ごとの合計点を出します。

この「マトリックス分析」を実際に自分に当てはめて実行してみた表が下記です。

f:id:pond-comfat:20200314135031p:plain

この結果からすると自分は転職するよりも前職に留まっていたほうが幸福度は高いとなりますねw
結果は残念ですが、この分析を行うことで自分が仕事において何を大事にしているのかという価値観が客観的に見れるのが良いなと感じました。

まとめ

『科学的な転職』いかがでしょうか。
よくある転職本とは違い、仕事を通じた幸福度の高め方や
複雑な問題を精度高く意思決定していく方法など
転職だけに限らないノウハウが詰まった良書だと感じました。

転職を考えていない人にもおすすめの一冊です。