Gaming Life

一日24時間、ゲームは10時間

ほぼ週刊UE4日記01 マテリアルで色んな図形を描く1

最近、諸事情でUE4に触る機会が少ない。しかしドンドン進化するUE4をもっと使えるようになりたい。

というわけで始まった、UE4を触って得た何かを、毎週記事にして、UE4に慣れ親しんでおこうという突発企画。

いつまで続くかはわからないが。

今回の元ネタ・参考記事

docs.google.com

nn-hokuson.hatenablog.com

Unityシェーダーを使って、お絵かきする人の記事を見て、じゃあUE4のマテリアルで同じことやってみよう、という話。

2色に塗り分ける

以下のようなMaterial Function、「MF_SimpleStep」を用意

f:id:ai_gaminglife:20190409234434p:plain

中身はUnityのシェーダでいうところのstep関数。UE4標準でValueStepという、同じようなことを実現する関数があるが、個人的に使い勝手が悪いので自作した。

これを使えば、簡単に2色に塗り分けられる。

f:id:ai_gaminglife:20190409234447p:plain

「MF_DrawCircle」を作成。

f:id:ai_gaminglife:20190409234459p:plain

これを使えば円を描画できる。

f:id:ai_gaminglife:20190409234510p:plain

アンチエイリアスな円

「MF_DrawSmoothCircle」を作成。

f:id:ai_gaminglife:20190409234531p:plain

これを使ってアンチエイリアスの効いた円が描ける。

f:id:ai_gaminglife:20190409234547p:plain

繰り返しの輪

参考スライド43枚目以降を参考に実装。

f:id:ai_gaminglife:20190409234602p:plain

frequencyの数字を大きくすれば細かい輪を描画できる。

f:id:ai_gaminglife:20190409234614p:plain

大きさが変化する輪

f:id:ai_gaminglife:20190409234638p:plain

結果

f:id:ai_gaminglife:20190409234643g:plain

TimeノードをSin関数に流すことで、-1から1までの範囲でなめらかに変化する値が得られる。その絶対値を取れば、0から1までの範囲でなめらかに変化する値が得られる。

この値を使って、円の内側と外側の円の半径の長さを決定する。先程作成した「MF_DrawCicle」関数を2つ使って輪の外側と内側を作成し、外側を内側の円でくり抜けば、大きさが変化する輪が作成出来た。

縞模様

縦縞を生成する「MF_Strive_U」。

f:id:ai_gaminglife:20190409234656p:plain

TexCoordにR値でマスクを掛けると、U方向のグラデーションが得られる。

あとは、こちらの記事を参考にすれば実装できる。

横縞を生成する「MF_Strive_V」は、TexCoordをG値でマスクを掛けて得られるV方向のグラデーションを使えばよい。

f:id:ai_gaminglife:20190409234710p:plain

市松模様

こちらの記事にして実装。

f:id:ai_gaminglife:20190409234723p:plain

時間で変化するハート模様

ハートを描く数式にはこちらのサイトのものを、実装自体は参考スライド49枚目以降を参考に実装した。

f:id:ai_gaminglife:20190409234736p:plain f:id:ai_gaminglife:20190409234737g:plain

Customノードの中身は以下。

st = (st - float2(0.5, 0.70)) * float2(2.1, -2.8);
return pow(st.x, 2) + pow(st.y - sqrt(abs(st.x)), 2); 

まとめ

UE4のマテリアルは、Unityのシェーダと違い、作成途中の計算結果を、簡単にプレビューできる為、試行錯誤が容易にできる。触っていてとても楽しいので、もう暫く遊んでみたい。

大学生がゲーム会社にプログラマーとして内定が出るまでやってたことを晒す

表題通り、ゲーム会社に内定が出て内定承諾まで終わりました。何もなければ、来春からゲームプログラマーです。結局コンシューマとスマホ両方合わせて3社内定で、コンシューマの方に進むことにしました。

三年前、大学入学した頃は、ゲームプログラマーになりたいって夢はあったものの、現実は地元で公務員だろうなーと思っていたので、実現してしまってびっくりしている。

折角なので、三年前、大学入学直後に知りたかった情報ってのを、自分の経歴を振り返りつつブログに書き留めようと思う。

対象読者

筆者のスペック

  • 出身高校

    地元だとそこそこ名の通った公立普通科

  • 大学(在学中)

    駅弁中位クラスの国立大学工学部(システム系)

  • 大学入学当初のプログラミング経験

    パソコン他電子機器を弄ることは好きだがプログラムは全く書いたことがない

私のプログラミング・就活歴

大学入学~大学1年前期

Javaの入門書を買う。オブジェクト志向で詰む。調子に乗ってテスト勉強しなかったら高校数学レベルの線形代数のテストで30点を取り無事落単する。

大学1年後期

C言語の講義が始まる。多少なりJavaの勉強をしてたので講義ではさほど苦労しなかった。とは言え、上級者向けの課題では毎回10時間くらい掛けて解いてた。今なら20分あれば終わると思う。

前期の反省を活かし、テスト勉強はめっちゃ頑張った。この期は単位落とさなかった。

大学2年前期

「このままじゃゲーム業界行けないぞ!!!!!」と焦ってプログラミングの勉強を真剣に始める。最初はProcessingっていうJavaっぽい言語で遊んでいた。

その年のE3のYoutube配信で、UE4というゲーム制作ツール(以下、ゲームエンジン)で制作された「ドラゴンボールファイターズ」のPVを見て、殆どアニメみたいな画がリアルタイムで動いていることに感動する。それからしばらくして本屋でUE4の本を見て、これだ!!!と入門書を買う。今思うとこの本を買ったのが分岐点だった。

この辺りで自分で勉強したことをTwitterやこのブログにアウトプットする癖がついた。

大学2年夏

UE4をひたすら触ってた。プログラミング的な考えにこの辺りで馴染むようになり、オブジェクト志向を理解した。嘘。でも一年前Javaの本を読んだ頃の絶望感を思うとずいぶんわかるようになった。

この辺りから進捗をTwitterやブログに上げるようになった。

大学2年後期

10月か11月くらいにUE4を使ったゲームジャムに参加する。何もできなくて絶望する。しかし、そこで作った(チームの人に作ってもらった)プロジェクトのデータを頂いたので、それをひたすら解読して、自分のものとして吸収した。

確か2回ほどUE4関連の勉強会に参加してる。

大学2年春休み

UE4を使って1ヶ月のゲーム制作をするというコンテスト、UE4ぷちコンに参加した。パズルゲームを作る。

大学3年前期

夏にまた開かれるぷちコンに、今度はチームで参加したいと小規模の勉強会を主催するなどして、メンバー集めに奔走する。夏にインターンにも参加したいよなーと思い、知り合いに教えてもらったサポーターズの逆求人イベントに参加する。

確かこの頃にも勉強会に2回ほど参加した。

大学3年夏

ぷちコンにチームで参加する。インターンは逆求人イベントで知ったゲーム系のハッカソンに2つ参加した。

大学3年後期

ジースタイラスさんの逆求人フェスティバルが気になるなーってつぶやいてたらTwitterで公式からリプライ飛んできて参加決定。このイベントは本当に強い人だらけでまだまだ実力足りないなーと思い知らされた。

1月、2年前から存在は知っていたグローバルゲームジャム(GGJ)に初参加。

11月くらいに一社ES提出。12月に2社、2月に1社ES提出し、内三社に内定が出た。

大学に通う事のメリット

講義でC言語Pythonを学んだが、正直講義でやったことはあんまり記憶に残ってない。東大東工大京大の情報系学部クラスじゃないと、大学の講義だけで一線級のプログラマーとして食っていくだけの力をつけるのは難しいと思う。情報系の大学に行けば誰でもプログラミングマスターできるとか変な期待を持ってはいけない(私はちょっとだけ持ってた)。

とは言え、大学が全く役に立たないかというと、そんなわけがなく。基本的なことから体系立てて学べる機会はそうそうない。また、研究の最前線にいる教授に気楽に質問できるのも大学生の特権。いわゆるボーダーフリーの大学であっても、所属する教授陣の経歴を調べると大概とんでもない人だらけ。

大学図書館もとても貴重な存在。市の図書館にはなかなか所蔵されていない専門書が豊富に置いてある上、欲しい本があれば、リクエストして取り寄せて貰える。私は、プログラミング関連の書籍の購入を夜リクエストしたら、次の日の朝に承認が下り、3日後に図書館で借りた、という経験がある。

もう一つ。大学生は、学割が使える、という大きなメリットが存在する。Officeは今どきの大学なら無料で使えるし、Adobeは一般料金と比べてかなり格安で使える。VRChatの流行等で最近注目されてるSubstance Painter / Designerに至っては無料で使うことができる。

電車だって学割を使えば2割引で乗れるし、Amazon PrimeとかSpotifyとかも格安で使える。

調べると、想像以上に色んなものを学割で使えることがわかると思う。

とにかく大学に来た・行く以上は、数多ある、大学生の特権を思う存分使い倒してほしい。私はした。

逆求人系イベントについて

サポーターズさんやジースタイラスさん、あとはキャリアセレクトさん等、最近は色んな学生就活サポートのサービスが存在する。インターン、本選考の情報を沢山知ることができるのはもちろん、選抜制ではあるが、複数社の人事の方と一日にまとめて面接ができる、逆求人イベントも定期的に開催されている。

逆求人イベントの最大のメリットは、交通費が(基本的に)全額貰える事。学生にとっては、交通費が貰え、沢山の会社とまとめて面接ができる、怖いくらいメリットだらけのイベント。どこで利益出してるんだろうか。

本当にハイレベルな人しか行けない逆求人イベントもあるが、ある程度のアウトプット(例えば自作ゲームとか、ブログとか)がある人はかなり高い確率で参加できると思う。もしそういったものがなくても、登録だけはしておいて損はない。

インターンについて

ゲーム業界に限ると、夏のインターンスマホ系、秋冬のインターンはコンシューマ系が多い。(今年からまた新卒採用のシステムがガラリと変わるらしいので傾向は変わると思う)

私はスマホ系のゲーム会社2社のインターンに参加したが、現場で働いているゲーム開発者の方と直接話をしたり、同世代のとんでもねぇ奴らに心を折られたり、プロのアドバイスを受けながら開発出来たり、心を折られたり、貴重な経験が沢山できだ。

また、インターン参加者は早期選考ルートの案内をしてもらえることが多い。

絶対参加すべき、とは言わないが、都合が合うのなら是非参加してみるべきだと思う。お金貰える奴も沢山あるし。

面接について

慣れるまでは緊張する。当然。

こればっかりは当人の性格と、場数がものを言う。逆求人イベントや、インターンの選考などを通じて、慣れておくとよい。

あと、自己紹介と逆質問2、3個は必ず用意しような。

Twitterについて

Twitter、やろう。

Twitterには、沢山のつよいひとがいる。開発過程・進捗を、ハッシュタグをつけて(UE4だったら #UE4Study)ツイートすると、RT・ふぁぼしてもらえたり、アドバイスと言う名のマサカリが飛んでくる。それをモチベーションにしてまた新たな進捗を生み、また拡散・アドバイスしてもらえる。これを「正のSNSループ」と言う。今名付けた。

一人で孤独に開発し続ける、ってのも大切ではあるが、それを続けてると、大体挫折する。

「正のSNSループ」に乗ることがモチベーションを枯らさず開発を続けられるし、時折アドバイスが貰えたりする。

また、Twitterで著名な開発者をフォローすると、TLに開発にまつわる色んな最新情報が得られたりする。私は最近、ニュースサイトをいちいち巡回するよりも、Twitter見てたほうが良いんじゃないかと思っている。

Twitter、やろう。

ただしTwitterで質問するときは礼儀を弁えましょう。燃えるぞ。

結局ゲーム会社に就職するのに何すべきなのか

私なんぞがこんな主語のデカい主張をするのもおこがましいが、ゲーム会社への就職を目指してる人はここが気になると思う。なので、超個人的に思う、「ゲーム会社に就職するのにすべき事」ってのを挙げたいと思う。これをすれば絶対受かるってわけじゃないので話半分に聞いてほしい。

就活までにゲーム一本は作ろう

ここだけは誰に聞いても共通の回答をすると思う。

ゲーム会社の新卒採用ページを見てもらえればわかるが、プログラマー採用の人は、募集条件に、「自分が開発に携わった作品」の提出を求められる。

インターンに参加したいのなら、大学3年(就活1年前)の5月、就職のみを目指すなら就活解禁までに、ゲームエンジンを使って自作のゲームを作るべき。但しRPGツクールを除く。ないよりはましだけど。

また、コンシューマ系なら、Unity、UE4といったゲームエンジンで作ったゲームだけでなく、ある程度C++を生で触れる所を見せられるようにもしたい。大体のコンシューマ系会社がC++を書けることも求めてくる。

C++一本でゲームを作れとは言わないが、多少なり触っておこう。(私は今のところC++だけで作ったゲームはありません)

面接で普通に話せるくらいの経験は積もう

就活する上で面接だけは避けて通れない。バイトするなり、大学等で開かれる面接練習に参加したり、先述の逆求人イベントに参加するなどして、本番の面接で大失敗しないようにしておきたい。

情報をキャッチするアンテナを張ろう

Twitterなり、ブログなり、はてなブックマークなり、その他ニュースサイトなり。八方手を尽くして、最新情報についていけるアンテナを張るべき。

ついこの間まではスマホゲームがこの世の春を謳歌していたのにあっという間に赤字転落するような業界。そんな世界についていけるように情報の入手は怠らないでいきたい。

ゲーム・ゲーム開発を楽しもう

個人的に一番大切だと思うこと。

一般的な新卒採用ルートを通るのであれば、ゲーム業界に就職できる程のスキルを持つ人が、ギャンブル性が高く、平均給与もアプリ系、Web系等と比べて低いゲーム業界に就職するのは、どう考えても損。

それでもこの業界に進むっていうのならそれだけの理由が必要。そして、それが無ければ、就職がゴールとなって、その後は生きた屍になるのがオチ。

やっぱりその理由っていうのは、「ゲームが好き」、「ゲーム開発が楽しい」っていうものだと思う。

その他大学入学前私が気になっていたことのアンサー

Q. 学歴って必要なの?

部分的にYES。海外の超大手パブリッシャーや、京都のN社を狙うってのなら、可能な限り高い学歴が必要。

但し、それ以外の会社であれば、学歴は殆ど必要ないと言ってもいい。重要なのは、一定以上の開発力。主体的に開発に関わったゲームがあるってなら、どこかしらのゲーム会社には行けると思う。

Q. ゲーム業界、給料ってどうなの?

安いよ(N社と黄色いモンスター抱えてるあそこと一部スマホゲーム会社除く)。そもそもゲーム自体大儲けできるようなものでもないし、これは割り切るしか無い。ただ最近は上がってるよ。働き方改革を讃えよ。

Q. ブラックじゃないの?

昨今の働き方改革の煽りを受け、流石に最近は改善されつつあるらしい。働き方改革を讃えよ。

Q. ゲーム開発ってどうすればできるんですか?

そこにUnity or UE4とその入門書があるじゃろ?あとは気合じゃ。

Q. ゲーム専門学校ってどうなの?

ネットで言われてるほど悪いところではないと思うよ。専門学校でチームを組んでスゴクオモシロイゲーム作ってる人はたくさんいる。ウラヤマシイ。

但し、一度専門学校で講師をしている方に話を聞いたんだけど、やらない奴は本当に何もやらないらしい。そういう空気に流されそうなら素直に大学行ったほうが将来潰しが効くと思う。

まとめ

  • 大学から本格的にプログラミング始めてもゲーム会社に内定もらうことはできるよ

  • 逆求人イベントに是非参加しよう

  • 今ある環境にあるものを徹底的に使い倒そう

  • ゲーム一本くらいは作らないと就職つらいよ

  • ゲームは作れなくても、何かしらのアウトプットは継続しよう

  • Twitterはいいぞ(強調)

応援してます。

Windows10×VSCodeで快適なPython3.7開発環境を立てる

WindowsPython開発する機会があったので、その手順を紹介。今回はAnacondaを使って環境構築する。

動作確認

2019/02/13

既に入っているPythonを削除する

人によって既にPythonが入っていると思う。大概Pythonのバージョン更新はうまくいかないので、事情がなければ今入っているPythonをコントロールパネルから削除したほうがいい。

Anacondaをダウンロード

https://www.anaconda.com/distribution/

上記のサイトからwindows版のAnacondaインストーラーをダウンロード。

Anacondaをインストール

基本はデフォルトの設定でインストーラーの指示に従っていけばいいが、1つだけ注意。

f:id:ai_gaminglife:20190213180344p:plain

ここで[Add Anaconda to the system PATH environment variable]にチェックをいれないようにする。

Anaconda Promptを使ってみる

インストールが終了したらAnaconda Promptを起動。pythonコマンドが叩けたら正しくインストールが出来ている。(終了するときはexit()と入力する

VSCodePython開発環境を整える

Pythonに対応したエディタは数多あるが、今回は流行りのVSCodeを採用。

拡張機能からPythonをダウンロードする。

flake8を導入

ここまででとりあえずはpythonの開発、実行環境が出来上がるが、よりPythonを書きやすい環境を作る為、flake8という文法チェックツールを導入する。

このツールを導入することで、大抵のタイプミスを実行前に防ぐことができる上、かなり厳しいコードレビューを自動で行ってくれる為、自ずと見やすいプログラムを書くことができるようになる。

flake8をインストールするにはAnaconda Promptを起動し、以下のコマンドを実行する。

conda install flake8

VSCodeの設定を変更する

flake8をインストールしただけではVSCodeに適用されない。

setting.jsonに以下を記述した後、VSCodeを再起動すると、flake8が使えるようになる。

"python.linting.lintOnSave": true,
"python.linting.pylintEnabled": false,
"python.linting.flake8Enabled": true,

その他おすすめの設定

flake8のコードレビューはかなり厳しく、こんなの気にしなくていいでしょ、というものまで警告を吐く。

python.linting.flake8Argsに無視したい警告を記述すればそういった警告を除外することができる。

私が使っている設定は以下。

"python.linting.flake8Args": [
    "--ignore=W293,W504"
],

その他、setting.jsonに書いておいたほうがいい設定を示しておく。その中身についてはここでは記載しない。

"editor.minimap.enabled": false,
"editor.parameterHints.enabled": false,
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000

レオパレス民族大移動に巻き込まれた①

レオパレス民族大移動に巻き込まれた。

https://twitter.com/ai_9684_dct/status/1094171497399169026

家電付きの魅力に囚われレオパレスを選んだのだが、まさかこんなことになるとは。とにかく引っ越しの準備を急いでしなければならない。

で、先程レオパレスの担当者が謝罪と今後の予定について話しに部屋までやってきたので、そこで判明したことを共有。

  1. 本来退去時に必要な清掃費等は一切かからない
  2. 引っ越し先はこちら側の条件を聞きレオパレス側が候補を挙げ、そこから選ぶ。レオパレス物件から優先しての案内になるが、他社物件の可能性もある。
  3. 引っ越しにかかる費用は「全額」レオパレスが負担。(※ここでいう「全額」がどこまでを指すかは不明。見舞金が出るかどうかも言わなかった)
  4. 家電備え付けでない他社物件に引っ越す際、現在住んでいる住居に備え付けられている家電を持ち出すことができる。

特に家電の心配をしなくても良くなったのはデカい。

今後進展があれば書ける範囲で随時ブログに書くと思います。

※現在募集停止【告知】2D経営シミュレーション系ゲームのドッター募集

※今回の記事は個人的な告知です。

現在、私を含む開発メンバー二人で、2Dの経営シミュレーション系ゲームを開発しています。

今年末のデジゲー博、もしくは冬コミで頒布を目標として開発を進めていますが、ドット絵の素材の用意に非常に苦労しています。

そこで、2Dのドット絵を描いてくださる方を募集します。

依頼内容

  • C++(OpenSiv3Dライブラリ)で開発中の経営シミュレーション系ゲームで使用する人物系のドット絵の作成

「48x48のサイズ、差分は各キャラ2個ずつ」の仕様を満たしていればどんなキャラクターでも構いません。

報酬

  • 応相談。金銭的な報酬は多額は出せないと思います……

その他

  • 開発の中心メンバーとして加入という形でも、外注という形でも構いません。

連絡先

  • このブログのコメント欄
  • Twitterアカウント @ai_9684_dct

大々的には募集しませんが、プログラマーとして参加したいという方もいらっしゃれば連絡をください。

どうかよろしくお願いいたします。

UE4 マテリアルとRenderTargetを使ってライフゲームを作ってみる

一体どこに需要があるのかわからないが、マテリアルをとRenderTargetを使ってライフゲームを作ってみた。

wikipediaだったり検索すればすぐに分かりやすい説明が見つけられるので、ここではライフゲームがなんぞやという説明はしない。

バージョン

UE4.21.2

概要

パラメータとしてTextureを与えると、次のタイムステップのライフゲームの結果を吐き出すマテリアルを作成。

ブループリントでRenderTargetを2つ(RT1とRT2とする)用意し、最初に上のマテリアルで計算した結果をRT1、RT2に書き込む。

続けて、

  • RT2をマテリアルのパラメータに与えその結果をRT1に書き込む
  • RT1をマテリアルのパラメータに与えその結果をRT2に書き込む

をTickを使って交互に実行することでライフゲームの時間軸を進めていく。

マテリアルの中身

  • M_LifeGame

f:id:ai_gaminglife:20190202133223p:plain

注意はBase Colorに繋ぐのではなくEmmisive Colorに繋がねばならないこと。理由は後述。

  • MF_8NeighbourPixel

f:id:ai_gaminglife:20190202133236p:plain

f:id:ai_gaminglife:20190202133249p:plain

今見ているピクセルの8近傍ピクセルのR値を取得する関数。

キモはTexel SizeノードとTexCoord。

Texel SizeはTexture Propertyと検索すれば使えるノードで、入力として与えたテクスチャのピクセルサイズを取得することができる。

TexCoordには今見ているピクセルのUV座標が入っている。

  • MF_8NeghbourLifeGame

f:id:ai_gaminglife:20190202133258p:plain

MF_8NeighborPixelで取得した8近傍ピクセルのR値を四捨五入。それと現在のピクセルのR値を使って現在のピクセルの生存・死亡・誕生をCustomノードを使って判定する。

今回採用したライフゲームのルールは、

  • 今死んでいる時周囲のピクセルがちょうど3つ生きていれば誕生する
  • 今生きている時周囲のピクセルが2か3つ生きていれば生存する
  • 今生きている時周囲のピクセルが1つ生きていれば過疎で死亡する
  • 今生きている時周囲のピクセルが4つ以上生きていれば過密で死亡する

Customノードの中身は以下の通り。

float1 count = 0;
if(N1 == 0){count++;}
if(N2 == 0){count++;}
if(N3 == 0){count++;}
if(N4 == 0){count++;}
if(N5 == 0){count++;}
if(N6 == 0){count++;}
if(N7 == 0){count++;}
if(N8 == 0){count++;}

if(thisPixel==0)
{
    if(count <= 1)
    {
        return float3(1.0, 1.0, 1.0);
    }
    if(count >= 4)
    {
        return float3(1.0, 1.0, 1.0);
    }
    else
    {
        return float3(0.0, 0.0, 0.0);
    }
}
else
{
    if(count == 3)
    {
        return float3(0.0, 0.0, 0.0);
    }
    else
    {
        return float3(1.0, 1.0, 1.0);
    }
}

ブループリントの中身

  • 構成

Static Mesh Actorを継承し、MeshにPlaneなりBoxなりを割り当てる。マテリアルには先程作成したM_LifeGameを設定。

ライフゲームの初期状態として与えるTexture2D型の変数、InitialTextureを用意。Instance Editableにチェックを入れて置くと便利。

  • Construction Script

f:id:ai_gaminglife:20190202133309p:plain

メッシュのDynamic Material Instanceを作成し変数LifeGameDMIとして保存しておく。続けてSet Texture Parameter Valueを使ってライフゲームの初期状態を与える。

  • Event Begin Play

f:id:ai_gaminglife:20190202133318p:plain

初期状態テクスチャと同じサイズのレンダーターゲットを2枚作成。それぞれにLifeGameDMIの結果を書き込む。

ここにハマりポイントが2つある。

1つはCreate Render Target 2Dするタイミング。

この関数をConstruction Scriptで実行すると正しく動作しないので、必ずBeginPlayで作成する。

もう1つはレンダーターゲットに描くマテリアルについて。

Draw Material to Render TargetするのはEmissive Colorの結果のみ。Base Colorの結果は一切関係ない。先程ライフゲームの結果は必ずEmissive Colorに繋がなければいけないといったのはこういうこと。

  • Event Tick

f:id:ai_gaminglife:20190202133335p:plain

FlipFlopを使って交互に実行する。

最後にClass SettingでTickが呼ばれる回数を好みに設定して完成。

まとめ

Customノードの中身を変えれば簡単に他のルールのライフゲームを再現できそう。Draw Material to Render Targetはかなり面白いことができるのでもうすこし遊んでみたい。

参考

qiita.com

それでも小学生にプログラミングの授業はあってほしい

某バズった刺身タンポポ記事、大学生時分の私には身に覚えがある事が多すぎて余りに頭の痛い話だった。

note.mu

運良く地方の国立理系に通わせて貰っているが、プログラミングの講義の質は本当に先生次第。基本に忠実に、かつ最新の規格に沿って教えてくれる先生もいれば、まだC言語しか触っていない学科で、第二回で世界に挨拶し、第三回で説明もなくjavaでクラスを作らされ、置いてけぼりの学生をよそに講義予定の30分前に「もういいよね?」帰宅する先生もいる。

他大の話だが、リストを自作し、それも含めて課題を提出したのに「ライブラリに頼るな」というありがたいフィードバックを頂いたというお話をTLで観測したこともある(出来が良すぎたからどこかからコピペしたとでも思われたんだろうか)。

教えられる学生側もまぁ問題はあって、エラーメッセージ読まない、サンプルを丸写しだけして的はずれなことをやってる、質問の意図が意味不明など……元記事の通り色々問題はある。(もしこの記事をガチ同級生が読んでたらスマン。これは特定個人宛のメッセージではないし、私の知る同級生は皆私にないもの沢山持ってて羨ましいって日々思ってる)

大学でさえこの有様だから、政府が進める「小学校でのプログラミング教育」なんぞ上手くいくわけがなく。断言できる。

文科省の考えるプログラミング教育

文科省の資料によると、プログラミング教育の目的は、「プログラミング的思考を育成」らしい。

まぁそんなの無理だと思う。

バイトで小学生に算数を教えることがあるが、絶望的に出来ない子はいる。掛け算すらままならないような彼らに「プログラミング的思考を育成」なんて目的でやるプログラミング教育は絶対にうまくいかない。彼らにプログラミング・コンピュータに対する苦手意識を植え込むだけ。彼らはいずれ「圏外でLINEが繋がらないバグをどうにかしろ!」とクレームを入れるリテラシー皆無のモンスタークレーマーとなるのだろう。

結局のところ、伝統などと理由をつけて元号公表を必死に遅らせようとする政治が主導するプログラミング教育に期待してはならないのである。

だが小学校のプログラミング教育に賛成

悲観的な話ばかりしてきたが、私は小学校でのプログラミング教育は是非してほしい、と考えている。ただし、プログラミング的思考の習得などという高尚な理由ではなく、プログラミングに夢を抱く純真無垢な少年少女の「その幻想をぶち壊す」目的でなら、である。

閑話休題

私が本格的にプログラミングの勉強を始めたのは2年半前。小学校の頃から漠然と抱き、高校生時に読んだ「社長が訊く」で絶対になりたいと決めたゲームプログラマーという夢。夢自体は持っていたがその夢に向けて動き始めたのはつい最近になってから。理由は単純で「プログラミングの学び方」を知らなかったから。

田舎者で小心者の私は身近にプログラマーがおらず、探すことも出来ず。結局大学進学で親元を離れるまでプログラミングはしなかった。それでもパソコンは大好きで、実家のオンボロPCでOfficeを弄ったり、ブラウザゲームを遊んだり、Firefoxにアドオンを大量に突っ込んでマルウェアをインストールしてしまい大目玉を食らったりしてきた。

大学で漸くプログラミングが学べそうな情報系に進学した。あとで聞くと、大学の同期もざっくりと「プログラミングが学べそうだから」という理由で弊学科に進学している方が多いらしい。

入学した時はこの学科に来るような人はプログラミングの経験の有無はあれど、皆PCスキルは一定以上持っていると思っていた。

しかし実際は物理化学では私より遥かにいい成績を取れる人がexcelをロクに使えない という現実。プログラミングは出来なくともOfficeが使えたaiくんはいつの間にやら「パソコン詳しいオタク」扱いされるようになったのである。

変に持ち上げられてしまった以上、それに見合うスキルを得たいと、何冊も技術書を買って、独学でプログラミングを学ぶようになった。ここでようやく私は、交友関係、社会性を生贄に捧げることで「プログラミング書いたことない」から「プログラミングかけなくはない」にクラスチェンジすることができたのだ。

プログラミングの向き不向きは早めに判断したほうがいい

長々自分語りしてしまったが、言いたい事は一つ。

「もっと早くプログラミング勉強したかった!!!!!!」   私はゲームを作るためなら大学でのキラキラな交友関係や社会性を投げ捨ても構わないと割り切り、独学で(勿論講義で貰った資料、課題も参考にしたが)プログラミングを学び、一人でミニゲームを作れるくらいにはなれた。

しかしもっと早くから勉強できていれば今頃とんでもないゲームが作れていたかもしれない。今頃ゲーム会社のスーパープログラマーになれていたかもしれない。そんな後悔は尽きない。(まあまあ長いこと勉強してるのにその程度かって指摘はやめて。心折れる)

大学に入るまでプログラミングをしてこなかったのは、結局のところきっかけがなかったから。そして学び方が分からなかったからなのだろう。

もし小学校でプログラミング教育が実現すれば、プログラミングの才能、面白さに目覚めた小学生が私の様な後悔をすることなくとんでもない3Dゲームを作るかもしれないし、その若さ故の柔軟な発想で世界を変えるサービスを開発するかもしれない。

逆に今のままであれば、プログラミングで薔薇色の未来が待っているという幻想を抱き情報系の大学、専門学校に進み、そこで自分には向いていないと悟り四年(二年)をつまらなく過ごしてしまう人が生産され続けるだろう。

悲しいことにプログラミングは向き不向きがはっきり出る技能。大人になってそれを判断するよりかは、もっと早い段階で判断させ、向かない人にはプログラミングへの幻想を捨ててもらい別の道に迷いなく進んでもらう。向いている人には授業を足がかりにその才能を早くに開花させてもらう。

これならばプログラミング教育に賛成できる。

締め

随分元記事と趣旨がずれた話をしてしまった。

こんな記事を書くことにしたのは(打ち消し) 自分のツイートがバズってブログ告知ぶら下げたらアクセス伸びたから乗っかって記事書こうとおもった 元記事にプログラミング教育なんて無理、といった話があったから。TLで稀に見かける、真剣に小・中学生向けのプログラミング教育機材開発に取り組んでいる方を見ていると、そんなに悲観しなくてもと思う。

いつかこういったプログラミング教育機材でプログラミングに目覚めた子から産まれた傑作ゲームが遊んでみたい。