毎日ゲーム生活

プログラミング・ゲーム他気になったことを書いていくブログ

少し病んでいた話

 最近、少しだけ病んでいたので今回はどういう風に病みを克服したのかを書いていこうと思います。

 ちょっと日記っぽい感じ。

 

目次

病んでいたときの状態

・全く活力が湧かない。

・寝れない。

・集中が続かない。

・食事を楽しめない。

・常に憂鬱。

と大体こんな感じの状態でした。特に自宅にいる間は情緒が不安定だったことを覚えています。

なぜ病んでしまったのか

新型コロナウイルス感染症の影響で自宅にいる時間が多かった

私の中で人と話すことや外出をすることが気分転換になっていたみたいで、それが無くなったことでストレスが溜まっていた。

・真面目な性格だった

私は真面目な性格なので(自分で言うな)あれをやらないといけない、これをやらないといけない等のタスクを考えて生活をしていました。情緒不安定だった私がタスクをこなせる訳もなく思うように出来ない自身を責めていた。

私がやった改善

SNSを出来るだけ見ないようにする

情報量の多いSNSは疲れた心身で見ると頭がパンクしてしまうので見ないようにしていました。見なくなったことで余計な情報が減って頭を整理することが出来た。

・朝散歩をする

これが一番気分転換になると思った。

単純に歩くのが気分転換になるのと太陽を浴びるのが気持ち良い。

・オンラインで友達と会話をする

友達と会話をして笑ったりすることで気分転換になる。

最後に

心身が疲れている時に自身を追い込んでしまうとよろしくないので、適度に休んで行きましょう。

次のブログは技術的なことを書こうと思います!

専門学生がゲーム会社に内定をもらうまでにしたことを振り返ってみる

お久しぶりです。Ya-konです。

ブログめちゃめちゃサボってました。。。

 

無事、今年の3月中旬にプログラマとしてゲーム会社に内定を頂き、

内定承諾まで終わったので、就活が終わりました。

予想より早く就活が終わったので、自分でもびっくりしています。

 

 今回はゲーム業界を目指している人に少しでも力になりたいと思ったので、

自分がこれまでやってきたことを振り返っていきたいと思います。

 

目次

対象読者

ゲーム業界を目指している人(特にプログラマ向け)

自己紹介

 現在21歳。

高校を卒業し、ガソリンスタンドで1年間働いてから

ゲームプログラマを目指して専門学校(3年制)に入学。

専門学校入学時、プログラム学習経験なし。

専門学校入学~現在までにしてきたこと(ざっくり)

専門学生1年 前期

 ・C言語の学習を初める。

 入門者を見てコードを書いてみたり、

 ネットで調べたC言語の問題を解いたりなど、とにかく手を動かした。

 学校の授業では提供して頂いたライブラリを使用して必死にゲームを作っていた。

Unityを使用して簡単なゲームを作り初める。

 入門書を買ってみたが、なぜかやる気が起こらず全て読まずに終わった

Unreal Engine4を使用して簡単なゲームを作り初める。

 入門書では学習が続かないと思ったのでUdemyで動画を見て学習。

 結果、自分には合っていたらしく最後まで動画を見ていた。

 最後まで見終わる頃にはある程度Unreal Engine4を使うことが

 できるようになっていたので個人的に良かった。

 初学者にはオススメです。

 実際に見ていた学習動画↓

https://www.udemy.com/share/10200SBEAddF5VTX4=/

https://www.udemy.com/share/101WeKBEAddF5VTX4=/

BitSummit2018(インディーゲームの祭典)に参加。

 たくさんのゲームを見たり遊んでめちゃめちゃテンションが上がったのを

 今でも覚えている。開発モチベーションが上がった。

 「天穂のサクナヒメ」というゲームが印象に残ってる。

 気になる人は調べてみてください。

 専門学生1年 後期

C++の学習を初める。

 学習方法はC言語と大体同じ。

 ロベールのC++をずっと読んでいた。

ロベールのC++入門講座

ロベールのC++入門講座

  • 作者:ロベール
  • 発売日: 2007/11/15
  • メディア: 単行本(ソフトカバー)
 

GGJ2019(Global Game Jam)に初参加。

 初めて学生以外の人とチームを組んでゲーム開発をした。

 全然何も出来なかったので、チームの人にすごく迷惑をかけてしまいました。

 実際にゲーム業界で働いてる人と話したり、ゲーム開発に関心のある人と話したり

 することが出来たのですごく楽しかった。開発中はほぼ寝てなくてきつかったけど。

 交流関係を広げたい人、チーム開発を体験したい人には特におすすめです!

専門学生2年 前期

東京ゲームショウ出展に向けたチーム開発を開始。

 専門学生の中から7人のメンバーを集めて開発をはじめました。

 プログラマ3人、プランナー2人、デザイナー2人。

 初めての長期的な開発ですごく気合が入っていました。

 開発はUnreal Engine4を使用しています。

BitSummit2019参加。

 BitSummit2018に続き、2回目の参加です。

 前回と同様にたくさんのゲームを見てめちゃめちゃテンションが上がりました。

第12回UE4ぷちコンにゲーム作品提出

 株式会社ヒストリアさんが主催するゲームコンテストUE4ぷちコンに参加(作品提出)

 をしました。残念ながら入賞は出来ませんでした。

 ですが、参加賞があるので入賞できなくても嬉しかったです。

historia.co.jp

専門学生2年 後期

東京ゲームショウにゲームを出展

 完成した作品を東京ゲームショウに出展。

 「SkySeeker」というアクションゲームを作りました。

 もうすぐSteamで遊べるようになるらしい。みんな遊んでね。。。

 →Steamで遊べるようになりました!!

store.steampowered.com

ゲーム会社のインターシップに参加。(全3社)

 僕はコンシューマー系のゲーム会社全3社(C社、P社、A社)

 のインターンシップに行きました。

 会社の話や実際に働いている人の話を聞ける良い機会でした。

 気になる会社のことを知ることのできる良い機会ですので、是非チャンスが

 あるなら行ってみて下さい。

 インターンシップから早期選考の案内が来ることもあります。

新大阪UE4勉強会に登壇。

 株式会社Inde-us Gamesさんが主催している新大阪UE4勉強会で登壇をしました。

 初めて外部の人に技術的なことを話す機会だったので、すごく緊張していました。

 こういった勉強会で登壇出来たことはプレゼンテーションの発表のやり方など

 勉強になることがたくさんありました。全然上手く出来ませんでしたが。。。

 発表した資料をこちらで見ることが出来るので気になる人はどうぞ。

osaka-ue4study.connpass.com

現在

質問を募集しています。

 1人でも多くの就活生の力になりたいので、何か質問があればTwitterのDMでも

 何でも大丈夫なので質問をしてきてください。

 こちらなら匿名で僕に質問が出来ます。是非どうぞ。

peing.net

ゲーム会社の就活のお話

 大前提

コミュニケーション能力は必須。

 ゲーム開発はチームでするものです。1人でするものではありません。

 プログラマでもゲームデザイナーでもどの職種でもコミュニケーションはします。

就職は手段。

 目的を達成するための手段として就職というものがあります。

 決して就職が目的ではありませんので。

 自分が決めた目的に対しての手段として最適な会社に行くという考え方で僕は

 就活をしていました。てきとうにゲーム会社の選考は受けていません。

 (実際に選考をしたのは2社)

面接対策

質問に対する回答を考えていく。

「新卒面接質問内容」などのキーワードで検索してみると結構たくさん出てくる

 ので、片っ端から質問に対しての回答を考えていく。

大きい鏡の前で自分の目を見ながら話してみる。

 本番に近い感じで練習をすると良いと思います。

自己分析をする

  自分の目標ややりたいことが分からない場合は自分の目標をしっかり定めましょう。

YouTubeで就活関係の動画を見る。

 これはモチベーションの向上や就活に対する考え方を改められるのでおすすめです。

 面接で嘘をつくのは絶対ダメですよ。

 

面接は慣れるまで緊張すると思います。本番までには友達に模擬面接等をしてもらって

慣れておくのが良いかもしれません。

これから面接をする人は頑張ってください!!

面接で質問されたこと(一部)

・志望動機は何ですか?

・ゲームを面白くするにはどうしたらいいと思う?

・なぜゲームを作ろうと考えたんですか?

・なんでプログラマになろうと思ったの?

・プログラムでつまづいた時はどうやって対処している?

・なんで専門学校に入ろうと考えたんですか?

ゲーム専門学校に行くメリット

開発機器が学校にある。

 僕の学校では、PCやVR機材、コントローラーなどゲーム開発する時に必要な物は

 大体ありました。こういった開発機器は学校にあったので買わなくて大丈夫でした。

ゲーム開発に関心のある学生がいる。

 ゲーム開発に関心のある学生がいる専門学校では、チームメンバーを

 集めやすいです。

 あと、実際に学生たちと切磋琢磨出来るのでモチベーションの維持もしやすいと

 思います。

講師の人に分からないことを質問出来る。

 僕はプログラムのことで10分~30分悩んでも分からないことがあった時は、

 講師に人に教えてもらっていました。そうすることで、

 僕の間違った理解を正すことが出来たり、学習のモチベーションの維持を

 することが出来ました。

まとめ

・とにかくゲームを作ろう&遊ぼう。

・ゲーム関係のイベントに参加しておくと良いことがきっとある。

・できれば個人開発、できれば、チーム開発、できれば、長期の開発をすると良い。

UE4 ローカルマルチプレイヤーゲーム プレイヤー生成

第12回ぷちコンに参加し、ローカルマルチプレイヤーゲームを制作しました。

 今回はその制作したゲームでどういう風にプレイヤーを生成していたのかを初心者の人で見てもわかるように(できるだけ)説明します。そのために少しプログラムを変えています。

先にどういうゲームを制作したのかを見たい人は下に動画を貼ってあるので見てください。

※良いプログラムではありません。こうしたらもっと簡単にできるよ!!

 という部分があればTwitterでおしえてもらえるとありがたいです。

 このゲームの流れ

タイトル→使いたいキャラクターを選ぶ→バトルという流れをやろうとしてました。

なのでキャラクターを作るときに注意したのは、

1.動的にプレイヤーが選んだキャラクターを操作出来るようにする。

2.キャラクターごとに違った挙動をしたかったので別々のBPで管理する。

というようなことに注意してました。では、どう実装したのかを書いていきます。

1.プレイヤーの生成位置

今回のゲームは事前に使われるキャラクターが不明でバトルマップ(level)上に特定のキャラクターを配置することはできないと考えていました。

なので、キャラクター生成位置を検索する→生成位置に(特定の)キャラクターを生成する。というプログラムで作っています。

今回実装した方法

Actor型のBP(BP_Player_Start_Position)を作成。BPをマップ上に配置。その位置を検索して生成します。

f:id:Ya-kon:20191115144054p:plain

 マップ上に配置したときに分かりやすくなるように作成したBPにコンポーネント追加の項目からCapsue Collisionを追加しています。

コンポーネントウインドウのCapsuleを左クリック。右の詳細ウインドウのShape項目にあるCapsule HalfHeight・Capsule Radiusがあります。ここの値を変更するとCapsule Collisionの形状が変わります。ここでCapsule Collisionの形状を変更してもいいですが、今回はマップに配置されている状態で形状を変更できるようにしたいと思います。

f:id:Ya-kon:20191115152742p:plain

マップ(level)上でCapsule Collisionの形状を変更する

 float型の変数を2つ新規で追加する。

追加:[変数] Capsule Height→Capsule CollisionのHalfHeightの値を変更するために追加。

追加:[変数] Capsule RadiusCapsule CollisionのRadiusの値を変更するために追加。

Construction Script内でCapsule CollisionのHalf Heightの値を作成した変数Capsule Heightの値で代入。同様に、Capsule CollisionのRadiusの値を作成した変数CapsuleRadiusの値で代入しています。

Construction Scriptとは

簡単にいえばマップ上に配置したときに実行されるものです。便利!!

イベントグラフのBeginPlayはゲームが再生されてオブジェクトが生成されたときに一度実行されるものです。ごちゃごちゃにならないようにしよう!!

f:id:Ya-kon:20191115155258p:plain
これで新規で作成した変数が変更されるとその値がCapsule CollisionのHalfHeight・Radiusの値になり形状が変更されます。

後は、作成したBPをマップ上に配置された状態で簡単に変数を変更できるようにします。

変数のCapsule_Heightを左クリック。右の詳細ウインドウの変数項目のインスタンス編集可能のチェックボックスをチェックします。

もしくはマイブループリントウインドウの変数項目にある変数の横に四角形の目を閉じたようなマークがあります。これを左クリックすると上の手順の結果と同じになります。

もう1つの変数Capsule_Radiusも同様の手順を行います。

f:id:Ya-kon:20191115160255p:plain

マップ上で変数を変更できるようになりました。

作成したBPをマップ上に配置する→BPを左クリックで選択。詳細ウインドウのデフォルト(カテゴリ)欄にある変数の値を変更するとマップに配置されている状態でCapsule Collisionの形状を変更できます。

f:id:Ya-kon:20191115162548p:plain

2.スポーン位置を検索・生成

これから説明する処理はGameModeというBPに書いています。

詳しくはドキュメントを御覧ください。

docs.unrealengine.com

スポーン位置検索

f:id:Ya-kon:20191115163806p:plain

スポーン位置を検索するためにBP_Player_Start_Positionの情報を取得します。

ここではGet All Actors Of Classというのを使って情報を取得しています。

取得した情報を配列でデータを格納しておきます。

詳細はUE4のドキュメントに書いているので見てください。

docs.unrealengine.com

これを使う時には注意してください。特定のクラスのレベル内のアクターを全て取得できて便利ですがTickなどで実行すると毎フレーム特定のクラスのレベル内アクターを取得されるので大変重くなります。Tickなど毎フレーム実行させるものには本当に毎フレーム実行させる必要があるのか検討してください。

プレイヤーを生成する

3キャラクターを操作したいのでcreate player 関数を2回実行する

create playerはGameModeに設定されているDefault Pawnを生成します。

事前に操作したいキャラクターがわからないのでDefault Pawn ClassはDefaultPawnにしています。

これでデフォルトポーンが2つとPlayer Controller1, PlyaerController2が生成されました。Player Controller0はゲームを再生したときに生成されています。

f:id:Ya-kon:20191115171244p:plain

SpawnActorでプレイヤーを生成する処理です。

class→生成するアクター

Spawn Transform→生成する位置・回転・拡大縮小

紫色のPlayerBaseRef配列の中には生成したいキャラクターのクラス参照情報が格納されています。Get関数で配列の中の要素番号を指定しその中の情報を取得しています。

ですから要素番号が変われば生成されるキャラクターが変わります。

BP_Player_Start_Positionの情報を取得した配列から要素番号を指定してそのTransform情報を取得しています。

最後にPlayer Controllerを生成したアクターに所持させます。

※動的に要素番号を変更する処理は書いていません。f:id:Ya-kon:20191115173329p:plain

あとはこれと同じ形で要素番号を変えたプログラムを2回書きます。

f:id:Ya-kon:20191115174748p:plain

まとめ

ざっくりとキャラクター生成まで説明していきました。キャラクターの管理などの処理は書いていないので機会があれば書きます。もしわからないことがあればTwitterで言っていただければ返信が出来ますのでよろしくおねがいします。

UE4でゲームを作ろう!!

 

今回の制作したゲームです。制作期間は約3週間です。


[第12回UE4ぷちコン応募作品】GrayMan Slayer

他にも学校の課題でこういうゲームも作りました。制作期間は8時間です。


BattleBall!!

 

学内ゲームジャムの振り返りメモの振り返り

もうすぐ年末ということで(気が早い)約1年前の私を振り返ってみようと思います。

初心を忘れないように。

約1年前に書いた学内ゲームジャム終了後のメモ

ここからメモ↓

どんなゲームジャムだったか(ざっくり)

期間は2日間。
チームの人数は7人。
プログラマーは私を入れて2人。
UE4を使ってゲーム制作。
ホラーゲームを制作(お化け屋敷風)

1.出来なかったこと・改善点

・期間までにゲームを完全に完成させることが出来なかった。

→タスク管理をする(やることのリストを書いてそれに順序をつける)

・ゲームの構想がチーム全体で把握出来ていなかった。

→役割を分担する(書記、意見を言う、まとめる、話をすすめる)。

UE4での作業の分担がうまく出来ていなかった。(UE4のバージョンも違った。痛恨。)

→コンテンツフォルダ直下で新しくフォルダを作り、

プロジェクトを共有してメインとサブに分ける。

サブの方で出来たBPを送るときはメインの方にエクスプローラー間でコピーする。

・レベルのデザインの構成をどうするかをすばやく決めることが出来なかった。

→プレイヤーにどういう風に楽しんでもらいたいかを明確に決める。
  怪談話をして怖い状況を想像する。(ホラーゲームの場合)

 2.困ったこと

・音声のファイル名が全角文字(伝え忘れ)

→Unityならエラーが出る。全角文字はメモリが大きい。

 音声ファイルを探すときに全角文字入力にして探すのがめんどくさかった。

3チャレンジしたこと

・レベルに置くだけでギミックが発動するBPを作った。(BP単一で動くもの)

→メリットが多い。(プロジェクトが違っても動く。変更に対応しやすい)

4まとめ

はじめてのゲームジャムで戸惑うところが多々ありました。

なんとかゲームとしては完成させることが出来て達成感と喜びでいっぱいです。
知識、考え方、ゲームに関することを学べたゲームジャムでした。
これからはイベントがあれば参加し自分の技術力をアップさせて。

C++プログラミングの勉強、ゲーム制作に励んで行こう!!!
自分にもっと国語力がほしい・・・

メモ終わり

約1年前のメモを今振り返る

 今回は約1年前の自分を振り返ってみました。

・やったこと→出来なかったこと→改善点を出す。というやり方で

振り返っていました。今見ると何を考えてどういう間違いをしたのかがわかるので

初心を思いだせて良いですね。

・約1年前よりも技術力は確実に上がっているし、参加できそうな

イベントには必ず行っている。(GGJ, UE4勉強会inOsaka, BitSummit, )

パッと思いついたのでこれくらい。

ある程度1年前より成長出来ていてやりたいことも達成出来ているので

今後もブレずに頑張っていこうと思えました。

・振り返りをしてみてどこが成長したかまた、どこを改善するかを

見つめ直すのもいいかもしれません。

是非やってみてください。

数学 n進法を理解する 基数変換

目的:基数変換をできるようになる。

n進法とは?

世の中にはn進法という言葉があります。

このnには数字が入り、この数字になったら桁があがるよってことを示している数字です。

例えば私達が普段から使い慣れているのは10進法です。0~9という10個の数字を使って表しています。

1円玉が10枚になると10円、10円玉が10枚になると100円、、、

とこのように1の位、10の位のように10倍ごとに桁を増やしていく数を表します。

 

実は10進法以外にも日常で使っているものがあります。

例えば時間には60進法が使われています。1時間は60分ですよね。

その他にも日数の7進法などたくさんあります。気になったら調べてみてください。

 

情報処理でよく使われるのは2・8・16進法です。

今回は、2進法・16進法の2つについて説明します。

基数変換を説明する前に

2進法・16進法って?

2進法は0,1の2つの数字を使って数を表現します。

16進法は0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fの16つの数字を使って数を表現します。

 

基数と桁の重み

n進法には基数という概念があります。基数とはn進法のnのことです。

つまり、2進法なら「2」、16進法なら「16」が基数となります。

例として10進法の数値から4321を見ていきます。

1桁目:10^0×1 = 1

2桁目:10^1×2 = 20

3桁目:10^2×3 = 300

4桁目:10^4×4 = 400

このように10^◯のことをn進法が持つ各桁の桁の重みといいます。

各桁ごとに(10の(桁数-1)乗)を計算した数値のことです。

10進法で小数を表すときには「10^-1」「10^-2」という重みを使います。

 基数変換

基数変換とはある基数で示された数値を別の基数における数値に変換することを基数変換といいます。

今回は「各基数の桁の重み」を使って基数変換していきます。

n進法を10進法に変換

 n進法を10進法に変換するには各桁の重みをかけることで10進法での数値が求められる。 

2進法:1011.011 → 10進法に変換

f:id:Ya-kon:20191108161735p:plain

 1×2^3 + 0×2^2 + 1×2^1 + 1×2^0 + 0×2^-1 + 1×2^-2 + 1×2^-3

=11.375となります。

10進法をn進法に変換

10進法をn進法に変換するには桁の重みを使って変換する方法と

基数を利用して整数部分割り算小数部分はかけ算をして変換する方法があります。

今回は後者のかけ算わり算の変換の方法で行います。

整数部分:10進法を基数で割ってその商をさらに基数で割るを繰り返して求める。

小数部分:小数部分が0になるまで掛け算を繰り返して求める。

10進法:11.375 → 2進法に変換

11÷2 = 5・・・1,  5÷2 = 2・・・1, 2÷2 = 1・・・0, 1÷2 = 0・・・1  商が0になったのでストップ

整数部分は割った余りを下から並べ直せば基数変換後の値を求めることができます。

なので整数部分の変換後の値は1011となります。

2×0.375 = 0.75, 2×0.75 = 1.5, 2×0.5 = 1.0  小数部分が0になったのでストップ

小数部分は掛け算した結果の整数部分をかけた順位並べると基数変換後の値を求めることができます。なので小数部分の変換後の値は011となります。

結果.1011.011となります。

2進法を16進法に変換

 2進法を16進法にするには2進法を4桁に分けます。(書かれてない桁は0を補う)

そうすれば分けた1桁が16進法の1桁あたります。

2進法:1001.10 → 16進法に変換

4桁に分ける→ 1001.1000となります。この4桁の区切りで10進法に変換します。

1001 = 1×2^3 + 0×2^2 + 0×2^1 + 1×2^0 = 9

1000 = 1×2^3 + 0×2^0 + 0×2^0 + 0×2^0 = 8

上記の数値を16進数に直すと9.8になります。

※16進法は9の次にA~Fと続くので16進法に直すときは中止しよう。

16進法を2進法に変換

16進法を2進法にするには16進法の1桁を2進法の4桁に分解すれば求めれます。

16進法:C.7 → 2進法に変換

2進法の4桁に分解→ 1100.1110となります。この数値の余分な0を取り除いて

答えは1100.111です。

まとめ

基数変換についてざっと説明しました。何か間違いがあればおしえてください。

 

C言語 三項演算子が気になったので調べてみた


三項演算子とは?

 与える条件によって返却値を変えることができる演算のことです。

【サンプル】

 f:id:Ya-kon:20191028104547p:plain【条件】 ? 【条件がTRUEの場合の返却値】 : 【条件がFALSEの場合の返却値】

というような書式で書くことで1行でif~elseのような振る舞いをするコードができる。

 

if文との違いは?

三項演算子の方が短く書けること。

三項演算子は値を返す。

という違いがあります。

if文と三項演算子を使い分けるなら

if文は条件分岐させるときに使う。

三項演算子は値を返却するのが決まっていてその中から1つを選びたいときに

使うのが良さそう。

まとめ

 三項演算子は複雑な処理だと使いにくそう。

if文と使い分けができるとコードの可読性が上がると思った。