エンジニアが書いてるようなブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら

ゲームを1つリリースしました。

ゲームを1つリリースしました。

play.google.com

このゲームは世界の虚しさと優しさを伝えてくれます。



そんな事は全然考えていないのですが、今回ゲーム制作でシリーズ物の第一弾を作らせていただきました。

人類が残した自動資源、それらに頼っている謎の生命体。その世界観を感じてもらえてら嬉しいです。このゲームで伝えたいことは特にありません、ですがそんなゲームだからこそ夢中になれる楽しさを秘めています。

現在のゲームは報酬に特化しているものが多いと存じます。例えば、クエストをクリアすることでガチャのためのコインが手に入るだとか、同名に仲間を引き入れることで沢山の報酬がもらえるだとか。単純なゲームという世界だからこそできる。快楽にもにた報酬体験はこのゲームにはありません。

このゲームにあるのは単純な作業をクリアすることによる愉悦感のみです。

すべてのミッションをただ実直にこなしてスターと呼ばれるトロフィーのようなものを貪るゲームです。そんなゲームに輝かしい称号などはありません。ステージ構成にはなっていますが、ステージごとに難しくなっていくわけではありません。そこにあるのは少しばかりのバラエティです。

今の時代げーむや作品に対して、傲慢になっているユーザーにとっては物足りなさを通り越して、切なさすら与えてくれる。しかし、実直に全てをこなすことで、やり遂げたという愉悦感を手に入れる事ができる。そんなゲームです。





まあ、詰まりはクソゲーですね。

短時間でも楽しんでいただけるとありがたいです。

知らない年代の人生を読む

こんにちは、今日は書店でみつけてなんとなく気になった本について、思ったことを書きたいと思います。

この本では出版関連の編集者や執筆者として生きた筆者の人生が書かれていました。

人にはそれぞれの人生があり、人が選択した決断によって、出会う人や物事に対する態度が大きく変わってきます。この本では、そんな人間模様が人生というスパンで書かれていました。回顧録なのでメッセージ性などはあるのかどうかはわかりませんが、自分の人生と比較して感じることはたくさんあります。

著者は新入社員時代に小さな出版社に勤めていたそうです。そこの社長と先輩は最終的には大きな成功を収め、そして倒産や前科を持つ存在となっていきました。いろいろな人の人生がある中で、そのさなか筆者が体験した様々なことは作者の中での青春であり、一度しか存在しないものだったそうです。

はじめから人生の対処法を知っていても楽しめない。そのときに感じる物があるのだと思います。自分はこの本の70ページほどしか人生が進んでいませんが、人生の青春は今だと思っています。その時期に何を感じて、どのように時代とともに行きていくか、そして、楽しさを感じていくかはこれからの行動にかかっていると思います。

「変化することが正解」なのかもしれません。

PS : 文章がうまくなりたいなと思うこの頃でした。

UIの上に3Dオブジェクトを設置する方法

こんにちは、Unity の話題は久しぶりですね。

今日やりたかったこと

uGUI で作成された UI の上に 3D オブジェクトを表示する。

方針

Canvas の Render Mode を Screen Space - Camera にする
 これによって、カメラに対して深度値によってオブジェクトが見えるようになります。

 f:id:tkymx83:20180721171444p:plain

・UI用のカメラと オブジェクト用のカメラを作成する
 カメラを2つ用意することでどちらの要素も表示されます。
 Camera コンポーネントの Depth をカメラでそれぞれ違う値とすることで表示の優先順位を決めることもできます。
 Camera コンポーネントの Culling Mask でそのCameraが反映するLayerを決定することができます。

 f:id:tkymx83:20180721171552p:plain:w200
 ・ChacterCamera
 f:id:tkymx83:20180721171652p:plain:w300
 ・UICamera
 f:id:tkymx83:20180721171725p:plain:w300

・オブジェクト用のカメラの Clear Flags を Depth Only にする
 こうすることで表示されていない部分は透過となります。

結論

それぞれのカメラを用意して、重ねがけで描画する。片方を背景透過とすることで、お互い重なっているように見えるというわけでした。

プロジェクト見積もり初心者がはじめに心がける3つ

こんにちは、最近プロジェクトの見積もりをやり始めた筆者です。

分かるとは、物事を分解して理解した状態を指す

プロジェクトを遂行する上で見積もりを取るのはすごく重要なことですよね。僕が今所属しているチームは見積もりが甘くて開発遅延が多発しています。見積もりのとり方がわかっていなかったり、振り返りをしていなかったり原因はいっぱいありますが、いちばんの原因は見積もりを取る理由がわかっていないことだと思います。

今日は最近見積もりを取り始めたことで心がけていることを話したいと思います。

1. トップダウンで分割

トップダウンというのは大きな要素が何でできているのかを階層ごとに分解して考えるということです。例えば「掃除」というタスクを分解すると、「掃除機をかける」「拭き掃除をする」「物を片付ける」などとなります。

いきなり、掃除にどれくらいかかると言われても経験からしか見積もりを行うことができません。しかし、トップダウンに物事を考えてそれぞれかかる時間を算出すると、それを足し合わせるだけで見積もりができます。

つまりは、見積もりとは、物事の最小単位の集まりということになります。はじめから大きな目線で考えることは誰にもできないので小さな目線の積み重ねで見積もるようにしています。

2. やりたいことから考える。コストから考えない。

見積もるときにはいろいろな側面で考えてしまうものです。あたらえられたコストや人員からできることを考えるのもその一つでしょう。しかし、その目線で考えてしまうと、コストを十分に使った施策を考えることになります。バッファーを取って考える人もいるかも知れませんが、バッファーの時間を見積もることは経験に左右されるものとなります。

ですが、やるたいことが制限されているため、実際に作業を開始すると作業漏れなどが多発しコストを使い果たす形で進んでいきます。それによって見積もりをオーバーした工数が発生してしまいます。そのため、まずは、やりたいことを精査して、それを満たすように人員やコストを決めていくことがベストです。

まずは、抜けがない見積もりを心がけるようにしています。

3. ベースラインの共有は必ず行う

ベースラインとは、取り組むスコープと前提条件のことです。スコープとは作業範囲のことを指しています。主に曖昧な仕様書のまま進んでしまうプロジェクトなどは、スコープを開発側で考えてしまい、実際作業に入ると、作業のスコープの漏れがどんどんと発覚し、工数を圧迫します。

前提条件とは、プロジェクトを行う際に前提となっている条件です。(例:開発環境、業界の常識)これらが抜けていると実際にプロジェクトが始まる際に、制作物に対して差し戻しなどが発生し、ものによってははじめからやり直しといった自体になる可能性があります。

はじめにすべてを共有することは難しいですが、疑問に思った点や詳細な状況を共有することで齟齬をなくすことを心がけています。

最後に

はじめにも話しましたが、見積もりとは詳細な分割だと考えています。そのため、物事をいかに分割して、いかに網羅的に知ることができるかに気をつけることで漏れのない見積もりができると僕は考えています。

Model View Presenter をゲームで使う3つの方針

おひさしぶりです。最近ゲームづくりを再開いたしました。

> 自由と言われても、何もやる気が起きない。制限された自由の中にほんとうの自由はある

ということで、いきなりゲームを作っても何も方針がなければ挫折することは目に見えています。

そこで、今回はWEBアプリ作成時によく用いられるMVP(Model View Presenter )のパターンをゲームに適応したいと思います。

MVP とは?

MVPとはSIerやWEBアプリ界隈でもちいられていたオブジェクト指向プログラムの設計手法です。それぞれ以下のような意味合いを持っています。

Model

ユーザーや商品などの振る舞いや定義などを持っているものです。これだけでは振る舞いを定義しているだけなので使用することができません

View

ボタンの大きさやテキストの内容などの見栄えに関わる部分を担当する

Presenter

入力に対してなにか動作を行うもの、基本的には入力があった際にModelにアクセスして所定の処理を行い、View に対して見栄えの情報(ユーザー名など)を送ります。

実装方法としてはそれぞれがクラスとして定義されている場合、PresenterがViewをもっており、Presenter内で入力を受け取るイベントを定義しておき、入力に対して適宜Modelとやり取りをおこなって、最終的にViewのパラメータを変更します。

ゲームで表す MVP

ゲームでよくあるキャラクター選択画面をイメージしてください。キャラクタをタップすると、選択状態の枠が付与される形です。今回は画面をMVPで定義したいと思います。

f:id:tkymx83:20180603181842p:plain

Model
  • キャラクター情報:名前や画像、場合によってはモーションなどが紐付いている可能性があります。
  • デッキ情報:複数体のキャラクターをまとめたデッキです。選択状態のキャラクターがデッキに格納されます。
View
  • キャラクターアイコン:キャラクタの画像があればアイコンを出すことができます。
  • 選択の枠:選択されている位置に対して枠の画像を設定します。
Presenter

全体の処理となります。キャラクタがタップされた際に以下の順で各要素にアクセスします。

  • キャラクターをタップ:タップされたキャラクタがわかります。
  • デッキに対してキャラクタをセットする:Modelへアクセスして情報の格納をします。
  • 選択の枠の位置を変更する:Viewに対して情報を格納します。

おわりに

いろいろはなしましたが、結局は規律を自分で決めて実装することで以下のようなメリットがあります。

・共通部分をくくりだすことで作業効率化を図れる
・スタートダッシュが早くきれる
・一定の知見が溜まっているので問題が起きにくい(起きても検索できる)

設計はプログラム界の知見なので、使わない手はないと思います。

UI設計ツール Sketch を初めて使って思ったメリット

こんにちは、最近ゲームづくりをすると宣言中です。

ゲームプログラーマたるもの、ゲームの品質をどこで担保するのだろうか?実装?デザイン?僕が思うのはいかに手戻りなく最適な実装をするかだと思っています。

ゲームづくりの鬼門はUI 設計不足による手戻り

ゲームのUI を作る際にUnity を直接いじることがあると思います。はじめは良いのですが、そのうち、もっと良いレイアウトにしたいとかんじます。しかし、その段階ではUIはがちがちにかたまっているので、もう変更されません。

そこで、重要になってくるのが、いかに最善のUIを実装前に考えることができるのかとなります。その問題の解決策が UI 設計を先に行うことです。

UI 設計のツール Sketch とは?


そこで必要になるのはUI設計のためのツールです。ツールとしては手書き、ソフトウェア、色々あると思います。僕が最近使っているのは Sketch です。

www.sketchapp.com

ショートカットが充実している Sketch

まだ少ししか使っていませんが、Sketch の良いところはショートカットが充実していて開発速が速いことです。

例えば、 U を押して、ドラックすれば丸四角ができます。V をおすとベクター画像を書くことができます。T を押すと文字を書くことができます。

このように、各機能にアクセスする窓口がかなりいっぱいあります。以下記事参考です。

creive.me

qiita.com

これから、Sketch 使っていてよかって点や気になった点を投稿していこうと思います。

Unrecognized assets cannot be included in AssetBundles を乗り越えた

こんにちは、久々の投稿になります。

いつの時代もエンジニアは思いもしないバグに悩まされるものです。今日紹介するエラーも「まさか」という結果となっています。なぜそんなことになったのか。それを追求するのは難しいが、それもエンジニアの性なのかもしれません。

何が起きたのか。

Unity でアセットバンドルビルドを行っていたら、以下のエラーが起きました。このエラーが起きると、アセットバンドルに指定のファイルが圧縮されないことになり、実際にゲーム上で読み込んだ時に「無い」といわれます。

Unrecognized assets cannot be included in AssetBundles ....prefab

原因候補1 アセットのファイル名が間違っている。

www.scriptlife.jp


上のサイトにでは、アセットのファイル名が間違っていたようです。(byte -> bytes だったよう)

エラー文は「アセットが認識されない」なので、そもそもファイル名が間違うとエラが起きるようです。

しかし、今回は prefab であり、間違っているとも思えません。

原因候補2 アセットの形式が対応していない。

mochimoffu.hateblo.jp

こちらの記事では、.lua が使えずエラーとなっていたと書かれています。

また、ファイルの位置によってもエラーが出ることもあるそうです。

ですが、今回は prefab ファイルこれが使えないわけがないと思います。

原因候補3 アセットが壊れている?

結局調べてもよくわかりませんでした。エンジニアになってわけもわからないエラーに遭遇することはよくあります。こんな時は、実際のファイルをじっくり見るに限ります。そこで、Unity でファイルをじっくり見てみました。

f:id:tkymx83:20180507231531p:plain

画像を見てわかると思いますが、どう考えてもファイルのアイコンが違います。しかも、ファイルのInspectorが編集できない形となっており、open をしようとすると以下のエラーが発生していました。

Unable to open Assets/Resources/....prefab: Check external application preferences.

ファイルをReImport することで、正常な状態に戻すことができました。

結論

結論として、prefab が壊れていました。以下なんで壊れたのかを想像してみました。

壊れた原因としてインポートに失敗した可能性が考えられます。理由は2つあります。一つ目はインポート中にUnity の強制終了をよく行っていたからです。強制終了によって、インポートされた情報がUnity 側で壊れてしまっていたのかもしれません。二つ目は、別にインストールしたUnity では正常に表示されていたからです。そのため、該当の Unity のインポート時に失敗した可能性があります。

以上、同じエラーに苦しんでいる人がいたら参考にしてください。