質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

630閲覧

ゲーム開発とオブジェクト指向について

otnkbike

総合スコア3

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/04/02 08:06

初心者質問ですみません。
オブジェクト指向は、モジュール間の結合をなるべく無くして設計することだと理解しているのですが、
なるべく普遍的な機能からモジュール化していくのが設計としては正しいのでしょうか?

ゲームルールに依存するような、変更箇所が多い部分を最初から完璧に設計するのは難しい気がするのですが、
ゲームプログラムをオブジェクト指向で書く上で意識している事、勉強になる文献などを教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/04/02 08:15

> なるべく普遍的な機能からモジュール化していくのが設計としては正しいのでしょうか? 普遍的というのは、多くのオブジェクトから依存されるオブジェクトという意味ではありませんか? 結合をなるべく無くすというのは、その逆に依存度を下げていく作業です。 ゲームにこだわっていてはその辺りのことをきっちり説明する資料は少なくなります。 とりあえずゲームを好きに作った後で、ゲームに関係ない書籍でその辺りを学ぶという順番でいいと思います。 最初から完璧なものは作れません。 最初の作品は試作品と割りきった方がいいでしょう。
otnkbike

2022/04/02 08:42

回答ありがとうございます。 普遍的、というのは例えばタイマーなどゲームルールに依存しないような機能、という意味で書いていました。確かに結合を無くす、というのはモジュール間の依存の話になるのでモジュールの内容が普遍的に使える機能であるか、とはまた別の話かもしれないですね。 例えばUniyの既存機能など色々な場所で参照されることが前提となっているコードもあると思うのですが そのあたりの切り分けはプロジェクトによるのでしょうか。 自分は個人開発のため想像しづらいところもあるのですが…
HiraKazu1124

2022/04/02 08:46

オブジェクト指向の事を語ろうとするとかなり長くなりますからね〜😑 Unityの勉強と言うより、C#の勉強をメインで進めていくべきかもしれませんね😊 (もちろんどのオブジェクト指向言語から入っても良いですが、UnityならどちらにしろC#を使うでしょうし👀) UnityとC#の両方を同時に勉強していくと結構間違った知識を覚えかねませんし🥺 すごい感覚的な回答ですいませんが(人それぞれかも👀)、 (1) 作りたい目標物を想像 (2) (1)に必要になりそうな物を想像 (3) (2)に必要になりそうな物を想像 ...繰り返し (4) 継承関係や機能でまとめれる物は無いか想像 (5) 一番小さいクラスから作っていく みたいに、設計は上から(目標から)、開発はその逆みたいに出来ると理想ではありますね😊 (まぁ...完璧にこの理想通りに開発できたら苦労はしないんですが...😑) ただ、ここら辺は訓練次第ですし、間違ってこそ学んでいくようなところがあります👀 「同じような処理よく書いてるな〜」を関数化する訓練は初歩。 「同じような構造よく書いてるな〜」を構造化する訓練も初歩。 「同じような構造+それに対する処理をよく書いてるな〜」をクラス化していく訓練でオブジェクト指向に少しずつ近づくかもしれません。 初心者の時に作ったソフトやコードを1年後(早ければ数ヶ月後)に見返すと全て書き直したくなりますよ😊私は今でもあるぐらいです...😅 どんな事でもいいので、クラスの設計をいろいろ試して見ることが近道な気がします👀 だんだんなれてきたらデザインパターンの勉強とか、MVCなどのモデルの勉強とかですかね😊 私の場合、座標とか線分とか折れ線とか長方形とか多角形とか円とかのクラスは既にライブラリにあるでしょうけど、そこから手作りしたこともありますね😅(Unityでは無くC++言語での開発の話ですが) 「線分と折れ線ってなんか構造似てないか?」とか「長方形って多角形に置き換えれるな🤔...あ〜でもメモリ的にはクラスを分けたいし継承も出来ない〜😭」とか悩み考えながら修行していった感じです😊 勉強法の後悔としては、「コードを減らす努力」をかなりしてしまっていたこと👀それよりも、「分かりやすい構造」「使う側が使いやすいクラス」にする方が圧倒的に大事だった🥺...というのは注意点ですかね👀
otnkbike

2022/04/02 09:04

回答ありがとうございます。 コードを減らすよりも、分かりやすい構造、使いやすいクラスを意識する、というお話大変参考になります! 設計のお話なのですが、ミニゲームをいくつか作っていく中で ルール変更が頻繁に起こるため、 ルールの中からなるべく普遍的に使えるもの(色んなルールでも使い方が変わらないもの)を抜き出してモジュール化した方がよいのかなぁ…?という疑問が起こったため質問致しました。 確かにまず基本のC#に立ち返って勉強すべきかもしれないですね。 設計手順も参考にさせて頂きます。
HiraKazu1124

2022/04/02 09:11

ミニゲーム1つにそれぞれルールを管理しているクラスがあり、共通点がたくさんあるなら親クラス(多分抽象クラス)などで定義するのはありかもしれませんね👀 モックなんかも注入出来るようにしておけばテストもしやすいです👀 ルールというからには処理だけではないでしょうからインターフェイスではなさそうですね🤔 あとルールならゲーム全体で使う可能性が高いでしょうからシングルトンクラスで実装もありかもしれませんね👀 全て推測ですがすいません😅
otnkbike

2022/04/02 09:20

ありがとうございます!こちらこそ抽象的な話になってしまいすみません… たしかに、ルール自体をインターフェイスにしておけば変更が容易になりそうですね。 一度試してみようと思います。
guest

回答1

0

個人的な経験を共有します。

自分も最初なんとなくオブジェクト指向を学んでいたんですが、「コレって何のためにこうするの?」とか「コレを自分のプログラムにどうやって応用するの?」みたいな、何か点と点が繋がらない感覚になってました。

今思えば、正しいプログラム設計をするための道具箱の中からオブジェクト指向という1つの道具を取り出して「コレって何に使うんだろう?」ってなってました。

なので一度、プログラム設計の中におけるオブジェクト指向の位置づけを把握してみるのもおすすめです。
↓の文献を見ると、オブジェクト指向だけでは正しい設計ができないことが分かると思います。

C#を勉強する順番!オブジェクト指向からドメイン駆動開発まで#1-1

投稿2022/04/02 10:21

KomoriGameDev

総合スコア433

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otnkbike

2022/04/02 11:00

ありがとうございます! テスト駆動開発はあまり調べる機会がなかったので改めて勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問