ミニマムブロック

頭の中でつながるまで

憂鬱なプログラマのための、オブジェクト指向開発講座 #4

クラスの作り方

①仕様を決める

②名詞を抜き出す

③クラスにする

仕様は明確に文章化しよう。あいまいな箇所がでれば、その都度具体化するのが結局は一番いいらしい。

 

クラス図の作り方

①クラス名を決める

②操作を決める

③属性を決める

クラス図は、書いてみて、足りないものに気づいて、書き足して、の繰り返し

 

 

憂鬱なプログラマのための、オブジェクト指向開発講座

要点のメモ

・この本は、「単に動くだけのプログラムをでっちあげるのではなく、きちんとしたソフトウェア設計ができるようになりたい」という人のためのもの

・クラスは「型」のこと

オブジェクト指向プログラミングとは、クラスを作ること

オブジェクト指向ソフトウェア開発の定義は、

オブジェクト指向ソフトウェア開発方法論にのっとって

システムを分析/設計し、

その結果を

オブジェクト指向プログラム言語によって実現する

」こと

 

クラスにメソッドを持つわけ

クラスは型である。

クラスは構造体に似ているが、メソッドを持つ点が異なる。

疑問点は、なぜそんなことをするんだ?メリットは何だ?

クラスにおけるメソッドは、クラスのデータメンバ専用の処理なのだ!

C言語の関数がすべてグローバルにフワフワと浮いているよりも、管理がしやすい。

従来は、データと処理がバラバラだったわけでしょ。

整理の仕方を、データと処理で1セットとしたわけよ。

その方が管理しやすいんだって。

 

クラスの切り分け方

C言語においては、動詞的な切り分け方をしていた。

例:社員データを使い、「部署データを表示する」

オブジェクト指向では、名詞的な切り分け方をする。

例:部署クラスを作り、部署データを表示する。あくまで作るのは「部署」クラス

 

クラスの持つnewなpoint、公開と隠蔽

publicとprivateのことね。で、クラスのフィールドは基本privateで扱うでしょ。

そんで、privateは外部からアクセスできないから、そこで使うのがメソッドね。

これが、メソッドの持つ大きな役割の1つ。

 

なぜわざわざ隠蔽するの?メソッドを使うの?どうせ関数からアクセスできるなら、privateにしていても同じでしょ?

文字列を扱うクラスを作ったとして、文字列の長さを取得したいとする。

実装方法として最初に思いつくのは単純に文字列の長さを取得する関数を使うことだが、文字列を取得する関数はパフォーマンスが悪いので、あまり多用はしたくない。

次に思いつくのが、setStrするときに、文字列の長さも取得して、メンバ変数に保存すること。そしてgetLenではメンバ変数を返すだけにすれば、楽でしょ。

この場合、strもlenもよそから触られるとデータに矛盾が発生する。

オブジェクト指向で、データのアクセスをメソッドからと制限しておけば、

メソッドが呼び出されるたびに文字列と長さを再設定することを保証できるから、安全というわけ。

ざっくり言って、C言語はデータ保護という概念が弱すぎて、再利用というニーズには合致してない。そういう弱点を補強するために、クラスという概念(フィールドはprivate, メソッドはpublicという仕組み)ができたのだよ。

 

2d rogue like #3

プレイヤーアニメーションコントローラを作る

 

Transitionを使うことでアニメーションの遷移が可能

Parameterタブの+ボタンで、playerChopとplayerHitを追加する。

playerIdleが終わるのを待つ必要がないため

durationは3Dでのみ使うので、0を設定する

conditionで、追加したタグplayerChop, playerHitを設定し、動作確認

ゲームを起動、animatorビューを下にして、Parameterで追加したplayerChopとplaeyrHitを選択することで動作確認が可能

2d rogue like #2

タイルプレハブを作る

emptyObjectを作って、SpriteRenderコンポーネントを追加

SpriteRenderにfloor画像を貼り付け。

タグとレイヤー、IsTrigerを設定して、

プレハブにする。それを繰り返す。

2d rogue like #1

スプライトのローグライクゲームを作るぞ

 

【補足知識】

リアライゼーションとは

セーブとかロードのときに、データ状態を保存しておいて再現できるよ?

リアライゼーションは、データ構造やオブジェクトの状態を Unity が保存して後で再構成できる形式に変換する自動プロセスです。

 

BoardManager

ステージを作るスクリプト

boardManagerとgameManagerスクリプトを作る。

 

〇アニメーションを作る

スプライトをインポートする

スプライトをmultipleに設定、サイズでスライスする

アニメーションにしたいスプライトをかたまりでシーンに投下

アニメーションが自動で生成される。

ヒエラルキーにアタックモーションを追加すると、それもアニメーションに追加される。

レイヤーやタグの設定をして、プレハブにする。

 

 

2Dシューティング #6

プレイヤーの移動制限をつける

 移動の制限にカメラのビューポートとMathf.Clampを使用します

 ビューポート

カメラの描画位置は、(0,0)から(1,1)まで。width, heightは1,1。