Valdish’s blog

UE4初心者がただひたすらに基礎の基礎をやって報告していくだけの日記・・・かな?

基本的な文法のおさらい(1)

今週もやってきました、個人的な業務外で業務速度改善するための勉強会。 本当はもう少し進めてるんですが、文字として書き出すのが遅すぎるのと内容がわかりにくいことはご容赦いただきたい。 今日はライブラリも何も入れない状況でのPythonの基本的文法をおさらいして書いて行きたいと思う。
と言うよりこれ書いている時点で前回から1週間経っているのはおかしくない・・・?


今回の目次

  • プログラミングの基本的な動作思考
  • 結果出力
  • コメントアウト
  • if文
  • while文
  • for文

プログラミングの基本的な動作思考

早速の個人的暴論が始まりますが、プログラミングに触れ始めていろんな言語で共通して学んだことは「プログラム処理は極論して3つの動作で動いている。」ということでした。

3つの処理というのは、順次、分岐、繰り返しです。(全部二字熟語にしたかったけどいいのが思い浮かばなかった・・・。)

順次というのはそのまま順序よく処理を行なっていくことで、プログラムを書いているときも実行しているときもそうですが基本的には上から下に私たちもプログラムも読んでいきます。
1の処理
2の処理
3の処理
といったように処理を書いたとして実行優先とか特別な指定をしていない限り2,3,1や3,1,2みたいな順番でプログラムで実行はされないよということで覚えていればいいと思います。

分岐は処理に条件をつけて異なる結果や処理を実行する処理のことを指します。
例えば人間には食事を行うという処理がありますが、ある昼食にラーメンを食べるか、もやし定食を食べる選択肢があり、その人間はラーメンが大好きだとすれば、ラーメンを食べる処理に対して満足度100の結果が返ってきますが、もやし定食を食べる処理に対しては満足度70の結果が返ってくるといったように分岐の条件によって実行する処理も結果も異なるものを出したい場合に行う処理になります。(これは例えが悪すぎた・・・)

最後の繰り返しは最初に決めた回数分同じ処理を繰り返すことになります。
使う場面で言うと、ソシャゲのガチャなどはよくある処理だと思います(処理内容は知らない。
1から100までの数字をランダムに出力する処理をガチャの処理に仮定すると、10連ガチャを引きたい場合は同じ処理を10回繰り返すことで処理ができると言うことになります。

この説明で説明できているのか非常に不安ですが、ご指摘いただけたら随時修正投稿したいかなと・・・。


結果出力

まずは全ての基本、要するに答えを見える形にすることです。
注意するべきことは、この結果はプログラムを実行した結果として出力されるものであり、一般のWEBアプリなどで返ってくるポップアップでの出力ではないことくらいですかね。
やり方は単純で「print関数」を使います。

print("この中に表示したい文言を書く")

print関数の例については前回に書いた環境構築の記事で基本の「Hello World」を出力した画像があるので、そちらをみていただけたらと思います。(不親切極まる
特に付け加えることもないので次

コメントアウト

コメントアウトはどのプログラミング言語を取り扱っていても存在する重要なものだと思います。
コメントアウトとはプログラムソース上で実行しないように指定したもののことを指します。
利用方法も様々ですが、自分の主な使い方は2つあります。

1点目はデバック作業でのソースコードの一時退避です。
プログラムを描いている途中で思った動作をしない時や、一部のソースを飛ばして実行したい時に対象のソースコードを丸ごとコメントアウトして実行したりしています。コメントアウトしているコードに対しては実行自体がされないため、一部機能の確認などに重宝されると思います。
下記画像のように「print関数」で1行目は『Hello World!』、2行目は『See You World!』と出力されるようになっています。
本来なら結果として

Hello World!
See You World!

と出てくるはずなんですが・・・画像では『See You World!』だけが出力されています。
これは1行目のprint関数の行頭にコメントアウトの「#」が入っているため、1行目のプログラムを読み込んでいないためです。
使い方として、行頭に#を置くことでその行全体がコメントアウトされます。
または複数行全体をコメントアウトする方法として、複数行のコメントアウト記号自体はないですが、ダブルクォーテーションかシングルクォーテーションを3つで囲むことで擬似的に可能になります。

"""
こんな風に
"""

f:id:Valdish:20210116223208p:plain

2点目はチーム開発での保守コメントを残すことです。
これは個人開発の場合でもあったほうが便利なので皆さんも使っていくことをお勧めします。
どう言うことかというと、コメントアウトソースコードに対してだけではなく、単純な文字列も入れることができます。
つまり、ソースコード内に隣接したコードの役割説明を入れたり、作りかけの途中で更新日時を記録しておくこともできます。
チーム開発においては同一のソースコードに複数人が変更を加えることもあり、変更を加えた経緯や、加えたコードの説明などをコード内に入れておくことで引き継ぎや内容理解が時間をかけずに行うことができます。(決して口頭での説明を怠っていい理由にはなりませんが・・・
簡単なものですが使い方の例としては以下のコード例を参考にしてください。

print("Hello World!")
#↑「Hello World!」を出力する。
print("今日こそはブログ更新をしよう!")
#2021/01/18 今日は前回更新した日から丁度1週間経った・・・早く更新しなければ・・・ by管理者A
print("日が経つのが早すぎる・・・")
#2021/01/16 いつの間にか今週が過ぎ去っていた・・・記事が完成していないが、あとは頼んだ by管理者A
print("ソースコード完了")
#2021/01/16 今週があと15分で終わるんですけど!? ここで投げ出されても困るんですけど!? by作業者X

・・・はい、お分かりいただけたでしょうか。
2行目のコメントアウトは1行目のコードの説明をしており、それ以降のコメントアウトは更新した日時と更新者の情報が共有情報として書かれていました。
例のようにソースコード上で会話も開発チームでできてしまうわけですね。
つまり、チームチャットなどで報告しにくいことや後から伝えたいことなどをここに書いておけば問題ないと言うことですね!(問題は大ありなのでやめましょう
なぜ今回のような変な例を書き上げたかと言うのには非常に困った理由があります・・・。
そうです、察しのいい方もいらっしゃると思いますが、例に書いてあるとおり月曜投稿をしようとしていたのにもかかわらず記事を書く時間がなく、土曜の今までになってしまいました!
自分の自己管理能力の欠如がただただ原因のため、なんともいえませんが自己流言い訳をして1週間に1度の投稿なら次の週の土曜日の23時59分まではセーフ!と言う謎の考え方が出てきてしまったのも否めません。
目次とは異なってコメントアウトまでしかかけていませんが、一旦ここで区切って来週こそ月曜日に続きの投稿をさせていただくことで週1投稿を果たさせてください。なんでもはしません(土下座はします
とりあえず日がこえて日曜になりそうなので、今回はここまで

久しぶりの言い訳と新しい開発環境整備

明けましておめでとうございます。半世紀ぶりにはてなブログの存在を思い出した。

まあ、備忘録だしという言い訳も苦しいが書いていないと色々忘れそうで久しぶりに更新という事になった。

更新といってもUE4は全然進捗を生み出せていないこともあり(今友人とは映像制作しないかとの誘いがあったが何すればいいのかわからん)、今回は仕事で使えそうで勉強を始めたpythonでデータ分析のお話になる。

なぜUE4をやるといっておきながらPythonなのか。

答えは単純で、仕事で趣味の時間を確保できていない無能だからに他ならない。

つまりここで仕事に役だつことをメモして忘れないように業務に生かして趣味の時間を作ろう。そういうことだ。

今回は単純にPCにPythonの開発環境を整える。


目的

趣味に使う時間を増やすために仕事の自動化に使えそうなプログラムの作成を行いたい。


知識0で今できそうだと考えていることは以下のこと。勉強の中で増えたり減ったりすると思う。

  • csv形式で集めたデータを統合してデータ分析のための資料作り
  • 開発テスト用の模擬データ精製自動化

 

環境構築目次

  • Python Anacondaインストール
  • vscodeインストール

Python Anacondaインストール

まずは大元のPython本体とも言えるPython Anacondaのインストール作業。

PythonはわかるけどAnacondaってなんだ?っていう人がいると思う。

Python Anacondaはいわゆるディストリビューションと言われるもので、簡単に言えばAnaconda = (Python本体+IDEやライブラリなど基本以外にも入れておくべきオプション)といったお得パックと認識していただければいいかなと思っている。

要するにゲームでよくあるコンプリートパックと同じだ。(余計ややこしくなりそう・・・。)

導入方法は極めて単純で、https://www.anaconda.com/products/individualにアクセスしてAnaconda Installers欄から自分の使っているOSとビットに合わせたインストーラをダウンロードする。

f:id:Valdish:20210104091641p:plain

python anacondaインストーラ画面

あとはインストーラを起動して画面の指示通りにインストールを進めていく。

インストール画面は基本英語なので読めない人は基本的にnextボタンを連打でOKだ。(危険思考)

インストールが完了したらプログラムの一覧にAnaconda Navigatorが見つかると思うので起動しよう。

f:id:Valdish:20210104092643p:plain

f:id:Valdish:20210104092909p:plain

上記のような画面が出てくるが画面にあるのが現在インストールされているライブラリとアプリケーションになる。

ぶっちゃけていうと、すでにこの段階でPythonは導入完了で開発もすぐにできる状態なのだ。

ただ単にコードを書いて実行するだけならIDE(統合開発環境)であるspyderやブラウザ上で実行結果を確認できるnotebookがあるのですぐにコードを書きたい人はこれらを起動して体験してみようspyderに関しては最初は英語画面だが他IDEと違って言語設定から日本語をすぐに選んで変更できるところが魅力だ。

ここですぐにコーディングの勉強に入りたいところだが、他言語とも互換性のあるエディタとして優秀なVScodeをインストールしていきたいと思う。

繰り返すようだが、pythonだけの利用であったり、必要性を感じられないのであればここでインストール作業は完了でもいいと思う。


vscodeインストール

次はプログラミングするにあたって必要不可欠なエディタであるVScodeのインストールをしていく。

VScodeとは正式名称Visual Studio Codeというマイクロソフト社が提供しているオープンソーステキストエディタで、これの存在を知らないとエンジニアの方に驚かれることもしばしば(少なくとも私は驚かれたし、笑われた)

プログラミングは極論メモ帳に書いて保存しても実行環境さえあれば実行はできるが、私がVScodeを選んだ理由は色々あるが今回は長くなりそうなので別の機会に書ければいいかなと思う。

導入方法はこちらも単純、公式HP(https://code.visualstudio.com/download)からインストーラを落としてきて起動するだけ!(お手軽説明、説明放棄ともいう

ただこちらはインストーラの案内も全て日本語で行われるからこっちの方がわかりやすいのかもしれない。まあ、基本は全て「次へ」を押すだけの仕事かと思う。

あとはまた同じようにプログラム一覧からVScodeを起動すればOKだ。

f:id:Valdish:20210104103950p:plain

上記画像の一番左上のボタンを押して開いた部分を右クリック→新しいファイルでファイル作成をすることができ、ファイル名を今回の場合は「~.py」とつけることでPythonの実行ファイルを作成する。

Pythonの実行ファイルを作成すると右下にポップアップが出てくると思うが内容を読むとPythonの実行に必要な拡張機能をインストールするか?と聞かれているものならば即座にYESだ。これでコードを書いて間違えた部分は赤波線で強調してくれるし、予測変換や主要な部分の自動的色変更までコーディングテキストエディタとしての基本的な機能は使えるようになっている事かと思われる。


あとここが今回一番重要な事だがPythonインタープリターを変更する。

この設定がなぜ必要か、簡単に言えばAnacondaとの連携設定になる。

冒頭でAnacondaとはPython本体とオプションをまとめたものと書いたが、今の設定のままだとVScodeで設定されたPython本体だけの共通機能しか使えないのだ。

わかりやすくプログラムを書いて説明しよう。

以下の画像は大体のプログラムで最初にやりたがるであろう「Hello world」を出力するプログラムだ。

f:id:Valdish:20210104110532p:plain

単純に共通機能、print関数で()内の引数を表示させているだけなので実行するとしっかりと結果パネルに「Hello world」が 出ているのがわかる。

f:id:Valdish:20210104111125p:plain

だが、今度はデータの取扱などでよく使われるライブラリであるNumpyを使ったプログラムを書いてみる。

以下の画像ではNumpyの基本である配列を生成している。今回は変数xの中に1,0,1という3つの数字を入れている。

f:id:Valdish:20210104111548p:plain

実行すると以下の結果が返ってくると思われる。

f:id:Valdish:20210104112446p:plain

重要なエラー文言は最後の1行「ModuleNotFoundError: No module named 'numpy'」だ。

日本語で言えばNumpyのライブラリが入っていないから呼び出せないよっていうことになる。

ゲームでも本体しか買っていないのにダウンロードコンテンツのストーリーを遊びたいよといっても遊べないのと同じですな(すぐにゲームに例える)

ただ今回はちゃんと全部入っているフルコンプリートパックであるAnacondaを入れたよな?と思われている方もいるでしょう。

言われていることはごもっとも、フルコンプリートしているのに動かないのには理由があります。

単純にAnacondaではなくVScode拡張機能で入れたPython本体でプログラムを走らせたから

そこでPythonプログラム実行の指定先を変更してやるのがインタープリターの変更になる。

f:id:Valdish:20210104113412p:plain

VScode左下の歯車マークをクリックして出てくる一覧からコマンドパレットを選択、出てくる入力欄に「Python select Interpreter」と入力すると以下のようなものが出てくる。

f:id:Valdish:20210104113816p:plain

 選択状態になっているのは一番上、私の場合はなぜかバージョンも違うものが選ばれていた。目的は画像の一番下にある「Python 3.8.5 64-bit('base':conda)」だ。

パスを見てもAnacondadeあることがわかるので、こいつを選択してやることでOKだ。

選択後、再度同じプログラムを実行してやると・・・

f:id:Valdish:20210104114353p:plain

Anacondaがアクティベートされてプログラムが実行成功したことが確認できる。

これでPythonの初期環境構築は完了と言えるだろう。

次回は実際にプログラムをそこらへんで転がっているサンプルコードを拾ってきて実行確認、自分なりに改変しての実行確認を行っていきたいと思う。

・・・まだまだ道のりが長い。

とりあえず今回はここまで。

今回こそは週1程度に間を開けずに投稿できたらいいなぁと思ってる・・・いや、月1でも・・・週1で頑張らせていただきます。

マイクラ感覚でマップ作り

ドーモ、ようやく更新しなきゃいけないと思い始めたValdishです。今回もまたゆっくりのんびりやってきますよ~(ダメか

今回は前回の続き。友人からは作る順番を間違えていると言われてしまったが、まあ適当に進めていくので問題はあるまい。というわけでマップ作りだー。

前回は簡単にプロジェクトの立ち上げまでいったのでそこからのお話です。

最初のビューポートに見えるところにはもうすでに簡易的な足場と人型がありますね。これだけでも十分ですが、ゲームを作ると言ったらやはりお城!廃墟!決闘場!など厨二感溢れるマップを作りたい人が多いと思います。しかし、技術もセンスもへったくれもない今回は初心者の自分らしいマイクラ式簡単建築で行こうと思います。
やり方は簡単。まずは作るのに邪魔な初期のマップをどけるために新規のレベルを呼び出します。右上のファイルのタブから新規レベルを選択すると写真のようにデフォルトか空のレベルを選択できるので今回はデフォルトを選択します。

f:id:Valdish:20160815193213j:plain

そうすると今までの人型や簡易マップが消えて、単純に床一枚の画面が出てきます。まあ、この床さえも少し邪魔なのでクリックで選択してデリートボタンで消してしまいましょう。

f:id:Valdish:20160815193400j:plain

何もなくなったところでようやくスタート地点にたてました。今回のマイクラ式の建築方法はただただ単純でものを置いて建物やらマップを作っていきます。右側にあるモードからBSPのタブを選ぶと置いていけるボックスや三角錐の形があります、他にもタブがあるのですが今回は詳しい説明は省いてBSPタブにあるものだけを使っていきます。

f:id:Valdish:20160815193916j:plain

まずは床がなくてはお話しにならないのでとりあえず、一番上にあるボックスをビューポートにドラッグして設置します。デフォルトのボックスは200×200×200の立方体の形をしています。これだけでもマイクラ感覚でくり返し置いていけば床になるよね♪と思った方正解!といいたいのですが自分はもう少し楽をしたいので大きさをすこしばかり変えます。

f:id:Valdish:20160815194438j:plain

写真に赤で囲んだところを注目するとX,Y,Zと記載されていて、更に横には数値がありますね。個々の数値をいじるだけで大きさを変えれます。計算が好きなお方は数値を細かに設定するもよし!勘でやる方は数字の右の記号をクリックしながら左右させるだけでも変化させることができます。今回は床が目的なので高さは薄くして、面積を大きくするので数字を適当に上から2000、2000、20にします。

f:id:Valdish:20160815194950j:plain

はい、色はまだですが広い床ができましたね。これを広げていけば建物でもなんでも作りたい放題です。このまま書いていてもただの初心者丸出しというか・・・説明になりきってない感じがするので誰でも知っているけどねっていう小技も紹介。

この床を複製して置きたいよって思う方はShift+Altを押しながらビューポートにある赤、青、緑と伸びているオブジェクトの矢印をクリックして引っ張ると簡単に同じものを複製できます。そして本来はAltキーだけで複製できるところをShiftまで押しているのは矢印を引っ張ってそのまま複製したものを持って行くとすぐに画面外にいってしまうのでShiftを押しながら引っ張ることで視点も一緒に持っていくことができます。

f:id:Valdish:20160815195626j:plain

あとはこのまま説明すると非常に文章が長くなるので軽く表みたいにまとめておきます。(筆者の文才がないともいう

  • Shift押しながらものを動かすと一緒に視点も動く。
  • Ctrl+Alt押しながらものを動かすと同じものが元のものから幽体離脱(複製)される。(めっちゃ便利
  • Ctrl+Zで動かしたり何かを足したりした動作が一つ戻る。(ミス多用の筆者が常にお世話になっているもの
  • Ctrl+Sでデータを保存できる(これは気付いたらしておくことをオススメ

 また長くなってしまったのでこれを利用したマップはまた次回(*_*;

なんだかんだ他の人達みたいにわかりやすく書こうと思ってもやはりそこは初心者だからこそのこのグダグダ感・・・助っ人でも呼ぼうかな・・・。

っていうかこのままだと何も終わらない気が・・・まあいいか。(よくはない

まあ、このように他と違ってのんびり基礎的なことを書いていきます。見ていて進みの遅さにイラッと来てしまう方、そんなことはもう知ってるぜ!と憤っている方がいたらごめんなさいm(_ _)m

とりあえず今回はここまで。

とりあえず簡単そうなマップ作りの初歩の初歩

はい、非常に更新が遅れましたすいません。ドーモ、未だに方針が決まらないのにゲーム内で出すキャラクター設定をどんどん練ってしまうValdishです。更新が遅れたからといってちゃんとその分進んでいるのかと思われますが、そうでもない。今回は操作もカンペも必要ないマップの土台作りについてやっていきます。

f:id:Valdish:20160811130328j:plain

はい、まずはUE4を新規で起動します。上の画像のような画面が出てくるのでまずはブループリントを選択します。ここで選ぶブループリントはあらかじめこういうゲームが作りたいとおもった種類のゲームシステムがある程度形にされてるサンプルが詰まったものです。「自分は1からシステム組みたいぜー」の玄人の方は空のプロジェクトで開始するのもいいかもしれません。

今回は私の作るものは決まっている上にシステム作りに自信というものが皆無なものですからおとなしくブループリントはThird Personを選択、他は特に弄る必要性がないので一番下にある保存先と名前だけいじって右下の「プロジェクト作成」をクリック。パソコンによりますがだいたい1分位待ってれば起動します。

f:id:Valdish:20160811131439j:plain

最初に出てくるのがこの場面ですね。ブループリントでThird Personを選択していたことによって最初からビューポートに簡易的なマップとちゃんとした人が追加されてますね。初心者にはこれが非常に助かってます。この状態から上のタブにあるプレイを押して人がちゃんと動くか確認しておきましょう。初期状態のプレイではキャラクターを動かす、ジャンプするなどが最初からできます。思う存分動かして遊んでから次の作業に移るとしましょう。(あ、何もマップ作りに触れられてなかった・・・

ちょっと長くなってしまったのでとりあえず今日はここまで。

まだ作らなきゃいけないもの一個も達成してない・・・つ、次はちゃんとやります!

次回は更新も内容もがんばりますよー(目そらし

遅ればせながらも方向決め

ドーモ、更新が遅れましたが何かを作る前にまず何を作りたいかの設定を作りたがるValdishでございます。

今回はタイトル通り、UE4を使って何を作るか決めていこうと思います。いきなり難易度高すぎるものを求めても自分一人でやっているものなので挫折するのが目に見えているのがオチ・・・まあ、ほどほどに高目に設定しますか。

小説や物語を作るのと同じようにまずは小さなものから決めて、プロットを作ることが重要です。私の場合はまず作りたいゲームのジャンルからです。

今回作ってみようと思うのはやはりアクションシューティングゲームに浪漫を感じているのでそれ一択ですね。ゲーム制作に関してはちょっと動画を見ていてこんなの作ってみたい!と思えるのがあってTPSのシューティングゲームを作ってみようと思います。

 

ここまで決めたところで、作らなければならないものがある程度決まりました。

①マップ作り

②銃をうつ、などのシステム

③敵のAI

まだ何ができるかがわからないので素人考えでここまで決めました。

とりあえず今日はここまで。

次回はちゃんと画像付きで更新します・・・m(_ _;m)

自己紹介とUnreal Engine4開始宣言

友人に半ば強引に進められて始めたUnreal Engine4。

基本的に無料ではあるし、他の有名なゲームもこのゲームエンジンを使っているらしい。今も色々いじっていますが挫折と絶望の日々、忘れやすい自分がなるべく忘れないように何番煎じかわからないUE4のブログを作って記録を残していこうと思います。

とりあえずしばらくは入門本とにらみ合いを続けながら出来た成果を書いていこうと思います。

あ、申し遅れましたがValdish(ヴァルディッシュ)というしがない暇人でございます。ゲーム制作もプログラミングも始めたばかりの初心者中の初心者、物語の設定を考えながら黒歴史となりうる駄文を量産しては恥ずかしさに悶える日々を暮らしております。

これからもどうぞよろしくお願いします。