Gaming Life

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

プログラミングに関する調べ物や最新技術のキャッチアップ方法

※注 ポエム要素が高い記事です

最近は研究室で忙しく、ブログに公開できるようなネタになるようなことをやれないでいる。 しかし、月イチ更新は守りたい → じゃあプログラミングを始めた頃の自分が知りたかった情報を書こう → プログラマーってどうやって最新技術を追いかけて、わからなかったことを調べているんだ、と当時考えていたことを思い出す

というわけで、今の自分が実践している、プログラミングに関する調べ方、最新技術のキャッチアップ方法をつらづらと書いていく。

Google検索

まずはここから。どんなときも、わからないことがあったらGoogleに聞けば大体解決する。しかしながら、ここ最近のプログラミング関連のワードの、Google日本語検索の上位に出てくる記事は くだらないゴミ記事 正しい情報が書かれていないモノが増えてしまい、求めている、正確な情報には簡単にたどり着けなくなっている(特にPythonとか酷い)。あまりにも酷いサイトは、ブラウザの拡張機能で検索結果に表示されなくするのが吉。(FireFoxユーザの私はPersonal BlockList を使っている)

初学者の内は日本語情報でも十分だが、そのうち、日本語情報では不足するようになる。そういったときは、公式リファレンスや、Stack Overflow、Google英語検索を利用している。英語が読めなくても近年の機械翻訳は相当な精度なので、十分読めている。

書籍

信頼と安心の情報源。古い本だと、最新の環境で使えないことがままあるが、それでも、基礎を抑えるには最良の手。なにか新しい言語、ライブラリに挑戦するときは、まず、書籍を当たるようにしている。

また、特に買う予定の本もないのに本屋に行く事も続けている。何か行き詰まっていたり、求めている機能を提供してくれるソフトが見当たらなかったりした時、本屋に行くと答えがあったりする。そして買う予定のなかった本を買って財布が薄くなる。

はてなブックマーク

Qiitaやら、ITMediaやら、engadgetやら、各サイトそれぞれ見にいくってのも一つの手ではあるが、毎日全部見るというのは、現実的には難しい。私は、代わりにはてブテクノロジーカテゴリのトレンド を一通り見ている。 トレンドに上がっている中で、気になる情報があればそのサイトに飛んでみるし、タイトルだけ見ておくだけでも、最新トレンドを知(った気にな)ることができる。

Twitter

その分野の第一人者とも言えるような人をフォローし、 TweetDeck でその人の全ツイートを追っかける、みたいなストーカー的ムーブができる。真似しないほうがいい。

最近、ハマっているのは、エラーに悩まされていたり、ソフトの使い方がわからなかったときに、Google検索の前に、Twitter検索で調べるということ。「Python リスト」みたいなざっくりした検索ワードだと、なんの役にも立たないが、エラー番号等、詳細なキーワードで検索すると、Google検索するより早く解決することがある。

興味のある技術分野に関わる人々を沢山フォローすると、TLを眺めているだけで有益な情報が集まってくる。

デメリットはTwitterにハマりすぎて、作業が疎かになりがちなこと。(そしてこれが最近の悩みでもある)

まとめ

こういって調べ事をしていると、最初の内は何のことかわからないワードだらけだが、継続は力なり。いずれ理解できる日が来る。そして1理解すると10理解できない事が生まれ、またそれを調べる。プログラマーとはそうやって永遠に終わりのない調べ物をし続ける生き物なのだなぁとつくづく思う近頃。これからも続けていきたい。

Dungeon Template LibraryをUE4で利用してLandscapeを自在に操る

@wanotaitei さんが開発しているDungeon Template Library(以後DTL) がUE4で使えそうだったので使ってみた。

f:id:ai_gaminglife:20190518201300g:plain

github.com

画像

UE4でDTLを使えるようにする

上記リンクからDTLをcloneしておく。

C++プロジェクトとしてUE4プロジェクトの Source/ 以下に library/DTL ディレクトリを作成。そこに、DTLライブラリの include 以下をコピーする。

UE4プロジェクトを開き直し、 (プロジェクト名)Build.cs に以下を記述。

        PublicIncludePaths.Add(ModuleDirectory + "/library/DTL/");

        PrivateDependencyModuleNames.AddRange(new string[] { "Landscape", "LandscapeEditor" });

これで、DTLと、後に使うLandscape関連の関数が利用できるようになる。

Landscapeを操作する関数を実装する

BlueprintFunctionLibraryを継承したクラスを作成し、以下をコピペ。

  • DTLLandscapeControlInEditor.h
#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "DTLLandscapeControlInEditor.generated.h"

UCLASS()
class DTLSAMPLEUE4_TPS_API UDTLLandscapeControlInEditor : public UBlueprintFunctionLibrary
{
    GENERATED_BODY()

    UFUNCTION(BlueprintCallable, Category = DTL, meta = (HidePin = "worldContextObject_", DefaultToSelf = "worldContextObject_"))
    static bool perlinNoise(const UObject* worldContextObject_, float scale);
};
  • DTLLandscapeControlInEditor.cpp
#include "DTLLandscapeControlInEditor.h"

#include "EngineUtils.h"
#include "Landscape.h"
#include "LandscapeInfo.h"
#include "LandscapeEditor/Public/LandscapeEditorUtils.h"

#include <DTL.hpp>

bool UDTLLandscapeControlInEditor::perlinNoise(const UObject* worldContextObject_, float scale)
{
    UWorld* world = worldContextObject_->GetWorld();
    for (TActorIterator<ALandscape> actorItr(world); actorItr; ++actorItr)
    {
        ALandscape* landscape = *actorItr;
        if (landscape != nullptr)
        {
            // 2: ULandscapeInfoの初期化
            ULandscapeInfo::RecreateLandscapeInfo(world, false);

            FIntRect rect = landscape->GetBoundingRect();
            int32 w = rect.Width() + 1;
            int32 h = rect.Height() + 1;

            using shape_t = uint16;
            std::vector<std::vector<shape_t>> matrix(h, std::vector<shape_t>(w, 0));
            constexpr double frequency = 6.0;
            constexpr uint8_t octaves{ 16 };
            const uint32_t seed{ static_cast<uint32_t>( rand() ) };

            const dtl::utility::PerlinNoise perlin(seed);
            double frequency_x{ w / frequency };
            double frequency_y{ h / frequency };

            for (std::size_t row{}; row < h; ++row)
                for (std::size_t col{}; col < w; ++col)
                    matrix[row][col] = static_cast<shape_t>(50.0 * perlin.octaveNoise(octaves, col / frequency_x, row / frequency_y));

            TArray<uint16> Data;
            Data.Init(0, w * h);
            for (auto x = 0; x < w; x++)
            {
                for (auto y = 0; y < h; y++)
                {
                    Data[x * h + y] = static_cast<uint16>(FMath::FloorToInt(scale * matrix[y][x]));
                }
            }

            LandscapeEditorUtils::SetHeightmapData(landscape, Data);
            return true;
        }
    }
    return false;
}

エディタ側からコンパイルし、通れば成功。

実装した関数を呼び出すActorを作成

Actorを継承したブループリントクラスを作成。画像のようなBPを組む。この際、EventPerlinNoiseCall in Editor フラグにチェックを、Scale float変数は、Instance EditableExpose on Spawn にチェックを入れる、

f:id:ai_gaminglife:20190518201112p:plain

作成したActorを 適当にレベルに配置、続いて、Landscapeを作成し、機能別サンプルから取ってきたLandscape Material を適当に割り当てて上げれば完成。

まとめ

現在エディタ側からしかLandscapeを操作出来ないが、ランタイムでLandscapeを操作できると嬉しい。また、まだ試してないが、他のダンジョン生成関数との連携は簡単にできそう。

参考サイト

unwitherer.blogspot.com

WSLのUbuntu18.04でmatplotlibを使えるようにするまで

WSLのUBuntu18.04はGUI表示が存在しないので、matplotlibを使ったグラフ描画ができない。だが、調べてみると、何とか描画できるようにできたので、メモしておく。

前準備

> sudo apt update && sudo apt upgrade
> sudo apt install python3-pip

matplotlibの導入

pip3を使ってmatplotlibと、セットで使われがちなnumpyを導入しておく

> pip3 install numpy
> pip3 install matplotlib

matplotlibを使った参考プログラム

vim等のエディタを使って、以下のコードを入力

> vim sampleGraph.py
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.random.randn(100)
plt.plot(x, y)
plt.show()

これを実行してみる。

> python3 sampleGraph.py

この時点で Tkinterがないだのというエラーが出たら、以下のコマンドを実行

> sudo apt install python3-tk
> sudo apt install tk-dev

ウィンドウに描画できるようにする

sourceForgeで、VcXsrvをDLする。

インストーラーでは特に追加設定の必要なし。指示通り勧めていけばよい。

インストールが終わったら、Windowキーを押し、XLaunchを実行する。

デフォルト設定のまま進め、完了を押す前にSave configurationを押し、設定ファイルをわかりやすいところ、例えばデスクトップに保存しておく。

完了を押せば、XLaunchが起動する。

WSLに戻って、以下のコマンドを実行。

> sudo vim ~/.bashrc

最後の行に以下を追加して保存する。

export DISPLAY=:0.0

WSLを再起動(ウィンドウを閉じるか、exitすれば良い)すればこの設定が読み込まれて、設定が反映される。

この後pythonを実行すると

> python3 sampleGraph.py

f:id:ai_gaminglife:20190429204952p:plain

こんな感じでウィンドウが表示されるようになる。

ほぼ週刊UE4日記02 Editor Utility Widgetを試してみる

UE4.22から、Editor Utility Widgetなる、エディタ拡張をUMGとBlueprintで簡単に実装できる機能が出来たらしいので試してみた。

といっても正直公式の人のQiita記事が十分過ぎる程丁寧に説明してくれている。

qiita.com

qiita.com

ここでは、1つ目の記事で紹介されている「レベル上にあるTick有効なActor, Componentを可視化する」エディタ拡張に、「レベル上にあるTick有効なActorを選択する」ボタンを追加してみた。

BPの中身はこんな感じ。

f:id:ai_gaminglife:20190421171952p:plain

用意したボタンの「On Clickedイベント」で、レベル上のTick有効アクターを配列に格納し、「Set Selected Level Actors」ノードでそれらを選択するというだけ。

Create TransactionとSequenceノードを使うことで、Undo・Redoに対応している。

Create TransactionとSequenceノードの組み合わせでUndo・Redo対応させるのは、毎回使う処理なので、以下のような、"Auto Close Create Transaction"マクロを作成し、マクロライブラリに用意しておくのはありだと思う。

f:id:ai_gaminglife:20190421172002p:plain

まとめ

  • Editor Utility Widgetは現時点でかなり沢山の事が、気軽に実装できる
  • Create Transactionを使えばUndo・Redoに対応させられる

ほぼ週刊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の本を見て、これだ!!!と入門書を買う。今思うとこの本を買ったのが分岐点だった。

Unreal Engine 4で極めるゲーム開発:サンプルデータと動画で学ぶUE4ゲーム制作プロジェクト

Unreal Engine 4で極めるゲーム開発:サンプルデータと動画で学ぶ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