明日への断片

ゲーム制作やプログラミング関する記事を中心に更新していこうと思います。

77欠片目:継続失敗

 こんにちは。ブログを毎日更新する挑戦に失敗したvoidです。今までも何度か疑惑の判定がありましたが、今回のは流石に失敗と判定。
止まってしまった理由は、多忙だったり疲弊だったり...言い訳にしかならないのでやめておきます

記録、約70日間...せめて100までは頑張ろうと思っていたのでちょっと悔しいです。

そして、前回の次回予告で言っていたスプライトのクラスも未だ完成していません...

甘さ

 自分でやると言ったことが出来ていなかったり、バイトのシフトが入っていることを忘れていたり、(直前に気付いて無断欠勤は免れまいたが...)最近たるんでいるんじゃないかなーと思っています。疲れているのも事実ですが、体調管理、スケジュール管理もしっかりこなしていかなけばいけないです。

今後のブログ方針

 毎日継続はさすがに厳しいと感じ始めていたので、今回を一つの区切りとして今後はブログの方針を少しだけ変更していきたいと思います。

今までは毎日更新を目標にやっていましたが、「ネタがない」状態に陥ってしまい、
結果として質の低い記事がいくつか量産されてきてしまいました。

よって今後は、

  1. 1週間に2回以上の更新
  2. そのうち少なくとも1回は技術的な内容

っていう感じにしていきたいと思います。
量よりも質にウェイトを置いていく感じで行こうと思います。

目標(目的)としては、

  1. 新しい技術の習得(習得した技術を説明できるレベルまで理解する)
  2. 文章構成力の訓練(より効果的に伝える文章の構成)

といった感じでやっていこうと思います。


それでは、今後ともよろしくお願いいたします。
本日は以上。ではまた!

76欠片目:STL~vector応用編~

 こんにちは。バイト代が入ったので念願だったクトゥルフ神話TRPGのルルブを購入したvoidです。
る↑るぶ(旅行雑誌)ではなくル→ルブ(ルールブック)です。

友人にトゥルフ神話TRPGを教えてもらって興味を持ち、リプレイ動画でハマってしまい、遂に買ってしまいました。
f:id:yasu-game-void:20170425232824j:plain

5800円(税別)...結構なお値段でしたが、パラパラ読んでみてかなりいろいろ書いてあるなぁとワクワクしております。
勉強の合間の息抜きに読んでウハウハしていたいと思います。

あと、約8000円のDirectXの参考書籍の注文もしました。届いたらそちらの方も勉強し始めていきたいと思います。


残りのお金は就活用に貯金です。
お金があるとつい使ってしまうので...使わないようにしなくては...


さて、本題です。昨日に引き続きSTLvectorやっていきます!

目次



反復子(イテレータ)

 イテレータvectorのみならず、コンテナ全般に対して発揮できる機能です。
コンテナは配列と違って動的にメモリの確保を行ってくれるということを機能は勉強しましたね。
そうなると、全要素にアクセスする場合、参照するデータの数が変動します。

そんな時に活躍してくれるのが、イテレータです。
イテレータとはコンテナの要素を指すポインタのようなもので、
そのコンテナの要素全てにアクセスすることが容易になります。

宣言(インクルードやstdは省略)

vector<int>::iterator itr;
// コンテナ名<型名>::iterator 反復子;

実際に使われるときは、for文やwhile文などのループ文でコンテナの中身1つずつにアクセスするときに使われることが多いでしょう。

// 4/26(修正:v.end()がv.begin()になっていたので修正)

for(itr = v.begin(); itr != v.end(); itr++)
{
    // 値を全て0にする
    *itr = 0;
}

vectorメンバ関数が唐突に出てきました。
が、非常に単純な単語ですし、for文の仕組みが分かれば何となく意味は分かりそうですね。

// コンテナの先頭要素を指します
v.begin()

// コンテナの末尾要素『の次』を指します
v.end()

// 次の要素へ移動します
itr++

つまり、
コンテナの先頭からスタート!
今の要素が末尾の次じゃなければ(末尾まで)繰り返す!
次の要素を順番に見ていく!

という感じです。

アルゴリズム関数

 ざっくりいうと、vectorの中身で、特定のデータの数を調べたり、ソートしたり、順番をひっくり返したりできる便利機能がたくさんまとめられたものです。(超ざっくり)

ここでも、データの位置を返す時にイテレータが使われたりしているのでイテレータは大変便利です。

詳細はサンプルコードにて。

サンプルソース

イテレータの便利さがなるべく伝わるよに頑張って作ったサンプルです...まだサンプル感が足りない...


実行結果:
f:id:yasu-game-void:20170426010325j:plain

次回予告

まだ確定ではありませんが、今日の授業で作っていたDirectXTKのスプライト機能をクラス化して使いやすくしたものが完成したら公開&解説的なものをできたらしようと思います。

次回予告を書くと、何書こう...て迷うことがなくなるので結構いいですね。ただし内容が縛らられてしまうので一長一短といったところでしょうか。


本日は以上。ではまた!

(Unityやって、ルルブ読んで、あと... <<現在am1:00>> )



 

75欠片目:STL~vector基礎編~

 こんにちは。もうすぐ健康診断があるvoidです。気になっている症状の欄にいくつか当てはまる項目があるので少し不安です...

f:id:yasu-game-void:20170425015535j:plain
本日はSTL(StandardTemplateLibrary) のうち、vectorの基礎についてです。
※)画像に特に意味はありません。

◆==目次==◆



vectorとは

 C++の標準テンプレートライブラリ(StandardTemplateLibrary)の機能の一つに、vectorというものがあります。

標準テンプレートライブラリとは、頻繁に使われるデータ構造やアルゴリズムなどを使えるようにC++で標準で用意してくれているライブラリの事です。

そのデータ構造の内、一つの型のデータを複数まとめて入れることが出来る
コンテナクラスという、配列のようなものがあります。
 そのコンテナクラスの内、最も基本的な機能がVectorです。

メリット

 Vectorを使うメリットは何か?


先述した通りvectorはほとんど配列と同じような役割を果たします。では何が違うのか?

配列は宣言時に

int array[10];

と宣言するとint型の変数100個分のメモリを確保できますが、プログラム内で10をオーバーしていしまうとエライことになります。(具体的に言うと配列を破壊して、他の変数の値を勝手に変えに行ったりします。良く起こる超常的なバグの原因は大体こいつが原因です...)

なら最初から余裕をもって、

int array[100];

と宣言してしまえばいいではないのか?
そういうわけでもないのです。結果として13個とかしか使わなかった場合、かなりの量のメモリが無駄に確保されてしまいます。


これに対して、メモリを動的に確保してくれるのがvectorです。
vectorは配列と同じように連続したアドレスにデータを持っています。そのため、データへのアクセスも高速に行うことが出来ます。さらに

宣言

 vectorを使うには<vector>をインクルードする必要があります。
また名前空間stdを使用しているのでusing namespace std; を1度記述するか、
使用するたびにstd::を記述する必要があります。

#include<vector> 

...

std::vector<int> v;

要素を追加

 vectorの基本的な操作の一つに要素の追加があります。
vectorに要素を追加する場合は、push_backというメンバ関数を使用します。

std::vector<int> v; // vectorを作成
v.push_back(10);   // vectorに要素10を追加

要素を削除

 vectorの基本的な操作の一つに要素の削除があります。
vectorの要素を削除する場合は、pop_backというメンバ関数を使用します。

std::vector<int> v;

// v.pop_back();  データがない状態で削除を行うとエラー

v.push_back(10); // vectorに要素(10)を追加

v.pop_back();   // vectorから要素を削除

サンプルソース


どうせサンプル張るなら、もっと実用性あるものを書きたいんですけど、パッと思いつくものがなかったです。
次回はもっと実用性のあるものを...

次回予告

 次回、vectorの更なる機能に迫る応用編。乞うご期待を。


本日は以上。ではまた!

74欠片目:Unity Remoteで超簡単に実機テスト

 こんにちは。最近、毎日ブログ更新の限界を感じてきたvoidです。せっかく70回以上も続けてきたのでやめるのは惜しいですが、そろそろきりのいいところで更新ペースを変更しようと思います。


本日はUnityで開発したゲームをスマートフォン(iPhone)上で簡単に実行する方法を紹介したいと思います。

Unity Remote

手順をまとめると、

1.Unity Remote5アプリをインストール

2.Unity上で端末設定

3.実行


以上です!
ね?簡単でしょう?

詳しい設定

まず、こちらのアプリをインストール

Unity Remote 5

Unity Remote 5

  • Unity Technologies ApS
  • ユーティリティ
  • 無料

次に、iPhoneとPCをUSBケーブルで接続。

次に、Unityの設定を行います。

左上メニューバーから、[Edit]->[Project Setting]->[Editor]を選択します。
f:id:yasu-game-void:20170424000248j:plain



すると、Inspectorに以下のように表示されます。
f:id:yasu-game-void:20170424000254j:plain

Deviceの部分から接続したスマートフォンを選びます。


そして実行!
たったこれだけで、スマートフォン上で実行できちゃうんですねぇ...

注意点としては、タップとクリックは別ものなので、PC上でクリック操作出来るようにしていたものは、スマートフォン上のタップでは判定できません。逆もまた然り。





ちなみにこちらの方法は、あくまで実機上でプレイするためだけのものであり、アプリとしてリリース出来る形式にするものではありません。その場合はMacが必要になるようです。

今までMacがなければiPhone上で動かせないと思っていたので、この発見はとても衝撃的でした。
といってもやはり、リリースは出来ないのでiOS開発用にMac買いたいですね。


本日は以上。ではまた!

73欠片目:求められし力

 こんにちは。力を求めしvoidです。
プログラミング力とか。コミュニケーション力とか。

本日は、「求められし力」についてです。

求められし力

 何回同じ言葉使うんだよ。というセルフ突っ込みはさておき、「求められし力」というと何かRPGなどで世界を救うをような壮大な力かと思われるかもしれませんが、そういう意味ではありません。人間として、社会人として求められている力の事です。


というのも、本日2度目のオープンキャンパス出勤がありまして、社会人として必要な力、そして今の自分に足りていない力が一部判明したので、このブログに残しておきたいと思います。


社会人として必要な力 と一言に行ってもいくつかありますので、社会人として必要な力、社会人に求められている力を総称して社会人力とでもしておきます。



自分にまだ足りていないと感じたのは、能動的行動力、提案力です。
 前回の反省から、自分から声を出していくということに意識はしていたのですが、それでもまだ不十分だと痛感しました。講座に来たお客さんの対応を先輩にさせてしまったり、少し余裕のある時間帯に、より良い接客をするためのシミュレーションを怠っていることを先生に指摘されるまで気が付かなかったりしていました。

 能動的行動というのは決められた事を積極的にこなすだけでなく、それ以上のことを自分から見つけて行動に移していくことなんだなと今更ながらに思いました。


またそれに付随して、オープンキャンパス全体をよくしていくための提案をしていくべきだというのも感じました。今回から新体制で迎え、トラブルも多々ありしばらくはごたごたが続くとのことです。そんな中で、「ここはこうした方がいいんじゃないかないか」という提案ができる力はとても大切だと思います。

もし、自分が偉い人だったらそういうことが出来る人と一緒に仕事をしていきたいと思うと思います。
現状のレベルに満足するのではなく、さらにより良いものを目指そうとする精神は大切だと思います。


といった感じで、オープンキャンパスからも大切な事を学び取ることが出来ました。


オープンキャンパススタッフとして働く以上はオープンキャンパス自体もっといいものにしていきたいですし、そのこと自体が自分の力を高める機会にもなるのでとてもやりがいのある仕事だと思います。
これからも頑張ります!

本日は以上。ではまた!

72欠片目:開発が加速する小技

 こんにちは。1年間同じクラスで過ごした仲間に名前を忘れられていたvoidです。普段からあだ名で呼ばれることが多かったので仕方がないとはいえ、ほんのちょっとだけショックでした...

本日は、最近知ったゲーム開発の上で便利な小技(ショートカットキー等)をまとめていこうと思います。
環境はWindows10です。

ウィンドウ管理がサクサク

 まずはウィンドウの切り替えや移動が便利になるショートカットキーです。

Alt + Tab

f:id:yasu-game-void:20170421235918j:plain

Altキーを押した状態でTabキーを押すとこんな画面になります。


この状態でさらにTabキーを押すと、選択ウィンドウが1個ずつ変更され、Altキーを離すことで選択状態のウィンドウをアクティブにすることが出来ます。

メモや、ネットの記事を見ながらプログラムを組むときにウィンドウを何度も切り替えたりすることがあるのですが、いちいちマウスでウィンドウを選んだりする手間が省けるのでとても便利で時短です。

windowsキー + ↑/↓/→/←

アクティブ状態のウィンドウの位置を調整できます。
最大化、縮小、最小化、左寄せ、右寄せ...などなどの位置調整が簡単にできます。
また、ウィンドウが2つ以上ある状態で寄せ状態にすると、空きスペースに画面を分割したように、ウィンドウを開くことが出来ます。境界線をマウスで調整することができ、2つウィンドウでの内容を見比べたりするとき等には重宝します。

コピーカットを未指定で行指定

 コピーのショートカット、およびカットのショートカット

Ctrlキー + C Ctrlキー + X

これらのショートカットは有名で、ご存知の方も多いかもしれません。
マウスやキーで範囲を選択して、これらのショートカットキーで、その範囲のコピーorカットが出来ます。

 しかし、VisualStudioや、一部のテキストエディタソフトでは更なる機能を持っています。
選択範囲を指定しないで、Ctrl+C or Ctrl+Xを実行すると、カーソルが存在する行に対してコピーorカットが出来ます。

プログラムを書いていると行単位での修正がしばしばあるのですが、その度にその一行を選択するのは、非常に時間が勿体ないです。

意味...あるの?

細かい時短ではありますが、プログラム以外にかける時間は極限まで減らしておきたいのです。
あとは単に、ショートカットキーを使いこなせるとかっこいいという自己満足ですかね...
これからも、便利な機能はじゃんじゃん使っていこうと思います。


本日は以上。ではまた!

71欠片目:やるべきこと~優先順位~

 こんにちは。今朝久しぶりの満員電車でもみくちゃになったvoidです。余裕をもって早く家を出たのが裏目に出ました...時間に余裕を持たせて、混みをさけるにはもっと早く行くしかないのですかね...

積み重なるTODO

 さて、昨日から明確な目標も決まり、モチベーションがみなぎってきたのはいいのですが、目標を叶えるためにはやらなければならないことがたくさんあります。技術や知識の習得はもちろんですが、社会に出て働くための経験を磨くためにも外部のイベントにも参加していく予定です。
 
 そんなわけで、今のうちにやっておくべきことを優先順位をつけてまとめてみました。

今すべきこと 優先度
日本ゲーム大賞制作 ★★★★★∞
業界研究 ★★★★★
C++勉強 ★★★★☆
デザインパターン勉強 ★★★★☆
DirectXTK会得 ★★★★☆

ゲーム大賞の制作は言うまでもなく、現在の最優先事項でしょう。

夢は決まりましたが、その夢を叶えるためにどの会社を目指すべきなのか。それをまずは明確に決定させることで、磨いていくべき知識や技術が変わっていくので業界研究の優先度は高いと思いますし、目標は明確であるほど、やる気につながるので業界を知り、目標となる会社を早く決めることが大事だと思います。
 その他、どの会社であろうと、プログラマとして就職する上で最低限必要なものを極限まで絞るとこんな感じだと思います。

他にもやっておくべきことはたくさんあるのですが、一度に何もかもをやろうとしてしまうと破綻してしまうので、まずは優先度の高いものから達成させていこうと思います。


本日は以上。ではまた!