【再】『Unityの寺子屋 定番スマホゲーム開発入門』「Chapter05 サイドビューアクションをつくろう」8

Unityの寺子屋 定番スマホゲーム開発入門

Unityの寺子屋 定番スマホゲーム開発入門

序文

サイドビューアクション8日目。

こんなもん作ってます。
どういう場面で使うのかは僕に聞かないでください。
Unity WebGL Player | 181005UkiyoePalette

進捗

  • Chapter05 サイドビューアクションをつくろう
    • 5-4 ワナ・敵キャラ・オーブを作成しよう

クラス図

https://raw.githubusercontent.com/gladiolusbamboo/180921UnityTerakoyaAgain/master/TheRun/out/UML/class/TheRun181018.png ケイオス。

GitHub

github.com

実行結果

昨日と一緒なので割愛。

感想

www.slideshare.net やはり設計を見直しつつ、スライド62ページ以降の依存性逆転の原則の内容を確認していく。
自分の理解が正しければ、オープンクローズド原則を適用していれば、自然と依存性逆転の原則に沿った設計になっていくような気がした。
逆に言えば、オープンクローズド原則と依存性逆転の原則の違いが理解できていないということかもしれない。

インターフェースが属する名前空間は、インターフェースを実装する側ではなく、インターフェースを実装したオブジェクトを操作する側の名前空間にしたほうが良いようだったので、適宜設計を見直した。
結果、クラス図がさらにカオティックになった。

あとスライドにはリスコフの置換原則(スライド52ページ~)なるものもあったが、そもそもダメな例としてあげられている「規定型で決めたルールを派生型で変更する」というシチュエーションがよくわからなかった。
まぁ少なくとも違反はしていないと思う…。

意外と時間が余ったので、デザインパターンとしてよく聞くSingletonパターンというのにも挑戦してみた。
naichilab.blogspot.com

~Managerに適用することが多いパターンのようだったので、スコアを管理しているScoreManagerに使ってみた。

特に問題なく動いたが、どこで使えば嬉しいのかはよくわからなかった。
あとこのスクリプトはてきとーなGameObjectにアタッチして使うという認識でいいのだろうか。
理解のレベルが低すぎてそこまで解説してくれている記事がない。つらい。

カロリーメイトください。

BGM

CANDY CANDY / きゃりーぱみゅぱみゅ www.youtube.com

【再】『Unityの寺子屋 定番スマホゲーム開発入門』「Chapter05 サイドビューアクションをつくろう」7

Unityの寺子屋 定番スマホゲーム開発入門

Unityの寺子屋 定番スマホゲーム開発入門

序文

サイドビューアクション7日目。

少しずつ自分なりのUnityの設計パターンができてきた。
ただそれが正しいのか担保できる情報がない。

進捗

  • Chapter05 サイドビューアクションをつくろう
    • 5-4 ワナ・敵キャラ・オーブを作成しよう

クラス図

https://raw.githubusercontent.com/gladiolusbamboo/180921UnityTerakoyaAgain/master/TheRun/out/UML/class/TheRun181017.png

GitHub

github.com

実行結果

www.youtube.com

感想

多少設計を見直しつつ、オーブとスコアを実装。

設計を意識していくと、Update()の使い所がよくわからなくなる。
ガンガン使って実装していくことも、ほとんど使わずに実装することもできそうだが、イメージとしてはアニメーション処理をスクリプトで行うときのような、頻繁に処理を呼び出す必要があるときに限って使っていくのがよいのだろうか。
今日作業したところでいうと、スコアをアニメーションで更新させていく部分はUpdate()メソッドを使って、ScoreDisplayerからScoreManagerを監視させている。

www.slideshare.net

とりあえずキャラクターアニメーションやSEなどの演出以外の基本的な機能は実装できたので、明日はスライドを見直してオープンクローズド原則以外の設計原則も適用できるか検討してみよう。

カロリーメイトください。

BGM

Beach Sun Girl feat.UNA / LITTLE www.youtube.com

【再】『Unityの寺子屋 定番スマホゲーム開発入門』「Chapter05 サイドビューアクションをつくろう」6

Unityの寺子屋 定番スマホゲーム開発入門

Unityの寺子屋 定番スマホゲーム開発入門

序文

サイドビューアクション6日目。

意識的にゆっくりやっているとはいえ、時間がかかっている。
なんとか今月中には終わらせたいところ。

進捗

  • Chapter05 サイドビューアクションをつくろう
    • 5-4 ワナ・敵キャラ・オーブを作成しよう

クラス図

https://raw.githubusercontent.com/gladiolusbamboo/180921UnityTerakoyaAgain/master/TheRun/out/UML/class/TheRun181016.png

GitHub

github.com

実行結果

www.youtube.com

感想

敵キャラを実装。

プレイヤーがなんらかのトリガーに触れた時の処理を、トリガーを設定したオブジェクトの方で行うようになったので、結局敵キャラからプレイヤーを操作するような設計になっていて多少気持ち悪い。

しかしこれが依存性逆転の原則だったりするんだろうか。

www.slideshare.net

クラスがごちゃごちゃになってきているので再び設計を見直してみよう。

特定のオブジェクトに依存しない機能(オブジェクトをアクティブにする、オブジェクトを破棄するなど)はすべてインターフェース化してしまうというのはさすがにやりすぎなのだろうか。
学習のために、ちょっとオーバーなぐらいやってみるのもいいかもしれない。

カロリーメイトください。

BGM

タンデム / HALCALI www.youtube.com

【再】『Unityの寺子屋 定番スマホゲーム開発入門』「Chapter05 サイドビューアクションをつくろう」5

Unityの寺子屋 定番スマホゲーム開発入門

Unityの寺子屋 定番スマホゲーム開発入門

序文

サイドビューアクション5日目。

ひきもりぎみ。

進捗

  • Chapter05 サイドビューアクションをつくろう
    • 5-3 画面の境界とゴールを作成しよう

クラス図

https://raw.githubusercontent.com/gladiolusbamboo/180921UnityTerakoyaAgain/master/TheRun/out/UML/class/TheRun181012.png

GitHub

github.com

実行結果

www.youtube.com

感想

www.slideshare.net

ゲーム内容的には進んでいない。

スライド48ページ前後の内容を参考に、プレイヤーが触れたときにイベントを引き起こすクラスに適用するIHitEventHandlerというインターフェースを作成。

(以下、自分の思考の整理のためにつらつら書いてますが、第三者的にはひどくわかりにくい文章だと思います…ごめんなさい。)

(クラス図はごちゃごちゃしすぎて読み取れないが)これによってPlayerHitSensorクラスからはIHitEventHandlerインターフェースにだけアクセスすればよくなり、直接GameOverHandlerクラスやGameClearHandlerクラスにアクセスしなくてよいようになった。

この改善によって、プレイヤーが触れたオブジェクトと実際の処理(GameOverを表示する、GameClearを表示するなど。)の結合が弱くなったので、たとえば動画のように穴に落ちたときにGameClearの処理をするといった実装が簡単にできるようになった。

そしてさらに重要なことはPlayerHitSensorクラスがIHitEventHandlerインターフェースにだけアクセスすればよくなったことで、PlayerHitSensorクラス自体を書き換える必要がなくなり、実際の処理はIHitEventHandlerインターフェースを実装しているクラスに丸投げできるようになったことだろう。
今後、ぶつかってはいけない敵キャラクターを実装するときにもPlayerHitSensorクラスを書き換えることなくゲームオーバーの実装ができそうだ。(実際はGameOverHandlerクラスをアタッチするだけですむかもしれないが)

なるほど、これが拡張に対して開いている。修正に対して閉じているということか。
完全に理解した。

カロリーメイトください。

BGM

シーサイド・ばいばい / 木更津キャッツアイ feat.MCU www.youtube.com

【再】『Unityの寺子屋 定番スマホゲーム開発入門』「Chapter05 サイドビューアクションをつくろう」4

Unityの寺子屋 定番スマホゲーム開発入門

Unityの寺子屋 定番スマホゲーム開発入門

序文

サイドビューアクション4日目。

秋眠暁を覚えず。昼寝がはかどります。
創作記録用にNote始めようかなーと思ったり思わなかったり。

進捗

  • Chapter05 サイドビューアクションをつくろう
    • 5-3 画面の境界とゴールを作成しよう

クラス図

https://raw.githubusercontent.com/gladiolusbamboo/180921UnityTerakoyaAgain/master/TheRun/out/UML/class/TheRun181011.png

GitHub

github.com

実行結果

www.youtube.com

感想

ゲームクリアとゲームオーバーのテキスト表示機能を実装。

www.slideshare.net

プレイヤーが穴に落ちるところと、ゴールのオブジェクトにタッチした時の処理でスライド48ページ目と類似の処理をしているコードが出てきた。

明日はここらへんの処理をじっくり抽象化してみたいと思います。

カロリーメイトください。

BGM

dinosaur / せりかな www.youtube.com

はじめてタイムチケット使ったらすっぽかされた話

f:id:yjkym:20181010205624j:plain https://www.timeticket.jp/items

何これ

愚痴。

さっさと結論書けよ

初対面の相手にメッセージで「!」使ってくるやつは信用するな

時系列

  • 10/1
    Unityの設計に自信がなかったため、実践的なアドバイスをくれそうな人をタイムチケットで探す。
    自称Unityエンジニアという人物と連絡をとる。
    評価も良く、Unityの講師をしていたらしき実績も確認できたのである程度信頼していた。

  • 10/6
    いくどかのメッセージのやりとりを経て10/9に渋谷のスターバックスで会うことで合意する。
    タイムチケットで支払いを行う。(JCBのクレジットカードが使えないことに驚いた)
    多少返事がルーズなこと、販売中のチケットの時間帯がすべて予定が入っていると言われて、それ以外の時間に会うことになったことなど多少不安な点はあった。
    どういうことが聞きたいのかと質問されたので設計周りについての知見を得たいと回答する。
    それに対する返答がなく、もう一段階不安になる。

  • 10/7~10/8
    一応、ある程度完成したものを持っていかねばと思い徹夜に近い感じでアプリを実装する。
    https://kankeli.net/UkiyoePalette/
    1時間という限られた時間を有効活用せねばと思い、質問事項をまとめたり、UMLの図を一生懸命書いたり、一応名刺を新調したり準備を進める。

  • 10/9
    自分約束の20分前にスタバに到着。満員の席に不安になりながらもコーヒーを注文して待機。
    タイムチケットを通じて先方に到着の連絡する。
    約束の時間。来ない。
    10分経過。来ない。
    20分経過。来ない。ふたたびメッセージで連絡。
    30分経過。来ない。
    40分経過。来ない。
    50分経過。来ない。帰宅する旨をメッセージで連絡。
    この間先方から一切の連絡なし。
    帰宅中のメトロ内で先方からの連絡を確認。
    意訳。「会社で倒れてました、また機会があればよろしく」

・・・お前はイベントを大人の事情でドタキャンする時のアイドルかっ!!!

いや、わかんないっすよ、本当に倒れてたのかもしれないし。

でもね、そっちの都合でこっちの1日の予定が潰されて、少なくとも渋谷までの交通費とコーヒー代が費やされたことぐらいは想像できるじゃない。
それが想像できていれば、あの謝罪と思しき文面は送れないと思うんですよ。(さすがに載せないけど)
強制するわけじゃないけど、もし俺が逆の立場だったら、間違いなく謝罪した上で代替の日程を提案して、その上で無料で指導しますよ。
ドタキャンどころか客相手にすっぽかしやらかして文面一枚で終わりにできるっていうその神経が理解できなかったって話です、はい。

当たり前ですけどタイムチケット運営に連絡して返金してもらいました。
まあ事件に巻き込まれたわけじゃないのでよかったとすべきなんですかねぇ。
いろんな人がいるなぁと勉強になった話でした。

(こっからは邪推なんですけど、もっと入門者レベルの人の指導を想定していたのかなという気もしています。
だったらえらそーに「コードレビューします」とか書くなって話なんですけど。
あるいは宮崎あおいって名前で登録してれば出てきたかもしれない(何の話だ))

教訓

みんな宮崎あおいに生まれるべき。

違う。タイムチケットを使うときのやりとりはタイムチケット内のメッセージでやりましょう。
メッセージのやり取りの履歴が残っていたのでスムーズに返金してもらえたと思います。
タイムチケットの対応はまあまあでした。まータイムチケットも被害者でしょうしねー。
タイムチケット自体は悪いサービスではないと思います。

BGM

ファックフォーエバー / 日本マドンナ
www.youtube.com

【再】『Unityの寺子屋 定番スマホゲーム開発入門』「Chapter05 サイドビューアクションをつくろう」3

Unityの寺子屋 定番スマホゲーム開発入門

Unityの寺子屋 定番スマホゲーム開発入門

序文

サイドビューアクション3日目。

TimeTicketでUnity教えます!ってチケット販売してる人に会いに行ったのにすっぽかされました。
ど畜生。 独学か!やはり独学でやるしかないのか!
あとで記事書くかも。

進捗

  • Chapter05 サイドビューアクションをつくろう
    • 5-2 プレイヤーキャラを動かそう

クラス図

https://raw.githubusercontent.com/gladiolusbamboo/180921UnityTerakoyaAgain/master/TheRun/out/UML/class/TheRun181010.png

GitHub

github.com

実行結果

www.youtube.com

感想

ボタンとプレイヤーの動きを仲介するIPlayerButtonActionインターフェースを無理やり実装させてみました。

インターフェースから実装する関数は引数を同じにしてやる必要があるので、PlayerMover()クラスをさらにPlayerRightMover()とPlayerLeftMover()に分解することになりました。
完全に手段と目的が入れ替わってますね、ハイ。

これで各ボタンとプレイヤーのアクションに直接の結びつきがなくなったので、動画のように右ボタンを押すとジャンプ、ジャンプボタンを押すと右移動にするみたいなことが簡単に実現できるようになりました。やったね!

使う機会なさそう…。

カロリーメイトください。
責任を持ってください。

BGM

エロス / テツコ
www.youtube.com