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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

3回答

1127閲覧

Unityの開発力を効率的に上げる学習方法について

syouga0826

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

6クリップ

投稿2019/06/17 12:29

編集2019/06/18 11:51

目標

一昨年末から、ハースストーンやシャドウバースのような、大規模なカードゲームを個人で開発したいと考え、Unityを勉強し始めました。
AssetStoreでカードゲーム開発に関する既存のフレームワークを探したところ、CCGKit※という製品がヒットしたため、こちらをベースに開発を進めています。
しかし、当初想定していた開発期間を大幅にオーバーしても完成の目処すら付かず、どうすればいいのか途方に暮れているところです。
現状、何から手を付ければいいのか分からない状態であるため、まずは開発が進んでいる実感を得るために他人の書いたコードを読む力や、それを拡張するスキル、あるいは使えないものは使えないと見切りを付けて自作に切り替えるスキルを鍛えるにはどういう学習を進めればよいのかご教示頂けると幸いです。

※ 約400クラス(規模は大小様々。30step程度のものもあれば、1500step程度のクラスもある)程度のUnityプロジェクトで構成されるAssetです。プレイヤーや対戦相手の初期ライフ設定やカードの攻撃アクション、毎ターンのカードのドローなど、基本的なカードゲームの処理の完動品が提供されています。質問者はこれを拡張して、自分好みのカード能力を付け足したいと考えています。

補足(質問者のスキル)

簡単なファイル操作程度ですが、最大3000step程度のJavaでの開発経験はあったため、C#もwebサイトで調べながら自学すればなんとかなるだろうと考えていましたが、自学の限界を感じています。
最初期は先述したCCGKitのコードを読みながらC#を学習しようと思いましたが、過去に学習したJavaの知識と現状の調査スキルでは限界を感じ、いわゆるひよこ本ゲームの作り方 Unityで覚える遊びのアルゴリズムに目を通しました。
また、ひよこ本が終わった段階でUnityチュートリアルのブロック崩し、玉転がしゲーム、2D Game Kitを実際に手を動かして作成しました。
ブロック崩しはオリジナル要素として、クリア後にボタンを押下することで別シーンを呼び出したり、プレイ中Spaceを押下することで特殊効果を発動し、起爆地点から100*100pixel範囲のブロックPrefabを破壊する機能なども拡張しました。
それでもCCGKitを読み解こうとすると、プログラム内に書いてあることが分からない、動くはずなのに動かないといった現象が多発してしまいます。
例えば、継承関係が5階層程度のものでもどうやって値を追っていけばいいのか整理出来なくなり、見落としが発生しがちです。

具体的な質問点

①今後、一人で学習を続けて完成させることが出来るのか?
② ①がもし可能であるなら、どういったstepを踏んで学習を続けていけばよいのか?
③一人が難しいのであれば、例えばTech Academyのようなプログラミングスクールでの学習(質問)で、完成まで持っていくことが出来るのか?
→プログラミングスクールについて調べたところ、学習経験0の方が既存のカリキュラムの学習に沿って学習するには効果的だが、既存製品などに関して質問をしてもわからない者同士で調べ合うだけで、一人でやるのと大して効率アップに繋がらないという認識です。(それでもモチベーションの維持に繋がるならアリかもしれませんが、期間内に完成する見通しも薄く迷っているところです)
④その他、現在Unity開発で活躍されている方が初期にどうやって学習してきたのかご教示願います。また、モチベーションの維持に役立った勉強方法などがあれば、そちらもお願いします。
⑤学習方法とは外れますが、コードを読む上で有用な静的解析ツールなどがあればそちらも教えて頂けると幸いです。
現状はVisual Studioのクラス図生成機能で頑張っています。

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

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

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

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

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

nskydiving

2019/06/18 02:43

質問文の末尾が途中で切れてしまっているようです。
guest

回答3

0

ベストアンサー

①人によります。

②詳細後述。

③人と学校によりますが、期待薄な気がします。まず「カードゲームを完成させる」という目標は達成出来ないと思った方がいいのではないかと。
teratailで質問する(為に色々調べたりミニマムコード作ったり)の方がまだ力になりそう。

④大学等で簡単なプログラムの授業は受けましたが独学メインです。ひたすら何かしら作ってました(それが仕事だったからというのもありますが)。
今思うと非効率的な書き方してたり車輪の再発明したりしましたが、それもそれで理解に繋がったかなぁと思います。フレームワーク的なAssetも幾つか購入しましたが使いこなせたのは「宴」ぐらいでしょうか(日本語っていいですよね)。

⑤「そもそもコードを読む必要があるのか?」を検討すべきかと思います。詳細後述。


②について、まずは「何が問題なのか」を明確にすべきかと思います。
以下、お好きな順番でどうぞ。

■CCGKitの使い方が分からん
CCGKitのページをざっくりとしか見ていませんが、そもそもソースコードを見る必要があるのでしょうか?
こういうツールは拡張を簡単に出来るような仕組みがあるような気がします。
すっごい極端なことを言うと、一番手っ取り早いのは「開発者に質問する」ことです。
Unity Forumsにもスレッドがあるようですし、過去ログ漁れば同じような質問してる人も居る気がします。

■コードを見ても分からん
それはそれとしてソースコードを見るのも勉強にはなるので、オススメではあります。
例えば私がコードを読む時はVisual Studioだと「定義に飛ぶ」「参照に移動」あたりを駆使して適宜遡ったり戻ったりしつつ、クラス名やメソッド名で全ファイル検索を掛けて用途を確認しつつ、みたいな感じでやります。

コードの書き方そのものが意味不明な時はそっちを勉強しに掛かります。
基本的なことが理解出来ているレベルなら、「オブジェクト指向」か「デザインパターン」とかでググればどれかヒットするでしょうし、最悪「(どうやっているのかは不明だが)これは〇〇するメソッドなんだな」ぐらいまで把握出来れば良しとします。

あとは「コードは思った通りには動かない、書いた通りに動く」という格言に加えて、
「出来合いの物は作者の思想が反映されている」ということも踏まえるとちょっとは理解しやすくなるかもしれません。

■開発速度を上げたい
単に開発速度を上げたかったら「時間を決めて、それだけ調べても分からなかったら無いものとみなして自作する」という方法もあります。
後から「こっちだったかー!」ってなったら修正するなり、とりあえずそのまま使うなりすればいいです。(本当は理解しきるのがベストですがね)

■完成するのか分からん
個人開発なら、ハードルを下げましょう。
「自分で決めたイラスト! 自分で決めたスタッツ! 機能はCCGKitデフォルト! でも通信対戦出来る! スゴイヤッター!」を一旦の完成とし、オリジナル要素は最低限でいいと考えます。(割とここまででも大変なのではと思います)
後はここにオリジナル要素を足していくなり、「一から自作した方が早くね?」と修羅の道を選ぶなり、「TCG飽きたから次RPG作るわ」となってもいいと思います。

開発期間は、恐らくよくわからん状態で定めていたと思うので、アテになる筈が無いと割り切った方がいいです。今の状況を鑑みて予定を再編するか、いつか完成すれば御の字という気持ちで進めるのがいいかと思います。


色々書きましたが、どのような方法・局面を経たとて、
「へー、これってこういう意味だったのかー!」「こう使えば良かったのかー!」「次はこうしよ!」
と思ったら、それは「学習した」と言っていいと思います。

私は「ググる→自分で使う」の繰り返しでしたが、これが最高効率かというとそうでもないと思います。
(ググり力とか、サンプルコードを見て察する力とか、開発に使える時間だとかで差が出ると思います)
なのでたとえ1機能も追加出来ていなくても、「今日はこういうことが分かった!」と理解が進んだり、「こういう方法があるのか、覚えとこ」と脳内インデックスを1つ更新だけでも進歩なのだ、と思うといいのではないでしょうか。

投稿2019/06/17 13:37

sakura_hana

総合スコア11427

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

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

syouga0826

2019/06/17 14:47

ご丁寧に回答頂き誠にありがとうございます。 ものすごく勉強になります。 >Unity Forumsにもスレッドがあるようですし、 特にこちらは、開発初期に確認した時点では大した情報が無く、英語に苦手意識があることも重なってチェックを怠っていました。 今なお更新され続けており、継続的にユーザと開発者間でやりとりをされていることを認識出来ていなかったため、こちらを確認することで進展が期待できそうです。 >teratailで質問する(為に色々調べたりミニマムコード作ったり)の方がまだ力になりそう。 こちらは『カードを召喚する』という機能を考えた時にどうしても大規模なものになってしまうと思い込んでいたため、この発想がありませんでした。 一つ一つの値をsetして表示するメソッドをコツコツ自作すれば少なくとも停滞状態は解けそうです。非常に勉強になります。 まずはテスト用の小規模なコードから組んでいこうと思います。 >■コードを見ても分からん 例えばアノテーション(当初は『アノテーション』という単語の意味するところすら分かっていませんでした)の使い方など、最初期は調べ方すらわからずに随分無駄な時間を費やした時期があったため、今後もそういう場面が出てくるのではないかと少し不安もあります。 そういうことがあれば、また都度質問させてください。 >「オブジェクト指向」か「デザインパターン」とかでググれば 実はJava時代からGoF本(緑の表紙)を積読してしまっています…。 こちらは簡単に目を通したものの、Singletonくらいしか実用されている箇所を特定出来ておらず、パターンと実際のコードが対応付け出来ていない状態です。 本を読む以外で(あるいは本を読みながら)、デザインパターンについて何か効率的な勉強の方法があれば参考ページ等ご教示頂けると幸いです。 オブジェクト指向については随分前ではありますが、『なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング』を読んだことがあり、ある程度理解は進んでいるのではないかと思っています。 >一旦の完成とし、オリジナル要素は最低限でいいと考えます。 実はここまではある程度完成済みだったりします。 というのも、CCGKitにはUnityEditorでカードのデータが入ったJSONをいじるツールが付属しておりまして、ある程度の既存能力をいじるのはコツさえ掴めばなんとかなったためです。 ネットワーク対戦も初期から実装済みな上、イラストや音楽も差し替えて動作することを確認出来ました。 しかし、さぁ次だ、という段階で手が詰まった状態です。 付属ツールに頼りっぱなしでイマイチ自作した感が薄いため、なんとか拡張してやりきった感を感じてみたいところです。 長文になってしまいましたが、頂いたコメントを一言一句噛み締めて再度チャレンジしてみます。 本当にありがとうございました。 このページをご覧になった方、もし「私はこうやって勉強したよ」というご意見があれば引き続きコメント頂けるとありがたく思います。
sakura_hana

2019/06/18 01:03

>「オブジェクト指向」か「デザインパターン」とかでググれば 私もこう書きはしましたが「そう言っても何てググっていいか分からない場合あるよね」とちょっと感じていたので…… そういう時のteratailということで、「ググる為のキーワードだけでも教えてほしい」的な質問をするのはアリかなと思います。 >実はここまではある程度完成済みだったりします。 薄らそんな気もしていましたが、第一次完成おめでとうございます! 「こいつぁ難しいぜ」と思ったらハードルを下げられるのが個人制作の良い所なので、どーーーしても難しければいっそオミットしてしまうというのも手かなぁと思います。 なお「拡張してやりきった感を感じてみたい」ということですが、手段と目的が逆転しないようにだけ気を付けるべきかなーと思います。付属ツールに頼りっぱなしで完成するならそれは御の字な気がします。 (とは言え私もUnityのエディタ拡張とか大好きなんで「こんなの出来たヤッター!」となった後、「……別に使わなくてもいいな(エディタ拡張メンテの方が面倒だな)」となったりもするので気持ちは分かります) 長々書きましたが参考になったなら嬉しいです!
guest

0

Unity自体は経験がないので一般論ですが、どういう学習曲線を描くかは本当に人によって様々なので、なかなか一般化することは難しいと思います。

ただ、どこかの記事で目にして「なるほど」と思ったのは、プログラミング言語は元々英語を基本としており、特に英語圏を中心に開発されている都合上、英語が得意な人はリファレンスを読むのを苦とせず、単語のニュアンスがすんなり頭に入ってくるので、半年や1年ぐらい経験を積んだ段階で日本語オンリーの人とはかなりの差が出る、という話がありました。

これは自戒も含めてですが、なるべく英語を避けずにちゃんと原典となるマニュアルや資料にしっかり目を通すのが、結局は一番の近道なんじゃないかと思ってます。(ググった時もヒットする情報量が違うし)

投稿2019/06/17 15:14

gentaro

総合スコア8949

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

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

syouga0826

2019/06/18 11:54

アドバイスありがとうございます。 英語について…ずっと避け続けてきた問題なだけに耳が痛いですね…w 最近はブラウザの翻訳機能も充実していますし、まずは自動翻訳されたものを嫌がらずに読むところから始めようかと思います。 その後徐々に英語で検索など、幅を広げたいです。
guest

0

①今後、一人で学習を続けて完成させることが出来るのか?

「CCG Kit」の使い方で困っているということなので、それが解消できる方法がみつかれば、進捗は上がるのではないでしょうか。
もし今後も「CCG Kit」が使いこなせなさそうなのであれば、ある程度のところでキリをつけた方が良いと思います。

② ①がもし可能であるなら、どういったstepを踏んで学習を続けていけばよいのか?

どの程度開発が進んでいるのか分からないので、何とも言えないところはありますが、**「CCG Kit を使わない」**という選択肢も考えた方が良いかもしれません。
結果的にそちらの方が早いという可能性もありますので。

③一人が難しいのであれば、例えばTech Academyのようなプログラミングスクールでの学習(質問)で、完成まで持っていくことが出来るのか?

一般的なプログラミングスクールでは、全くとは言いませんが、講師にカリキュラム外であるゲーム開発のことを教えてもらうのは難しいと思います。
かと言って、他の生徒に教えてもらうというのも期待は薄いと思います。

④その他、現在Unity開発で活躍されている方が初期にどうやって学習してきたのかご教示願います。また、モチベーションの維持に役立った勉強方法などがあれば、そちらもお願いします。

書籍と公式マニュアルを見ながら勉強しました。

[追記]
===============================
「ひよこ本」はあくまで入門書なので、あまり突っ込んだ内容が書かれていないというはしょうがないと思います。

オライリーの中級者向けの書籍を読んでみることをおすすめします。

Unityによるモバイルゲーム開発――作りながら学ぶ2D/3Dゲームプログラミング入門
https://www.oreilly.co.jp/books/9784873118505/

また、Unity の入門書では C# の内容はメインではないので、内容が薄くなってしまいます。
C# は別途学習した方がスキルアップにつながると思います。

[完全版]究極のC#プログラミング――新スタイルによる実践的コーディング
http://gihyo.jp/book/2009/978-4-7741-3862-6
===============================

モチベーション維持については難しいところですが、個人開発でやる場合は、とにかく期限を決めてやることをおすすめします。
期限がないとダラダラやってしまい、終わりが見えなくなってしまうことが多いので。
あとは何かしらコミュニティに入るとかですかね。

⑤学習方法とは外れますが、コードを読む上で有用な静的解析ツールなどがあればそちらも教えて頂けると幸いです。

Visual Studio で十分かと思います。

[追記]
===============================
クラスの継承関係については、Visual Studio の「クラスビュー」「クラス ダイアグラム」で分かりやすく表示させることができます。
また、継承元クラスのコードを追いかける場合、「定義へ移動(F12)」を使うと便利です。

変数の値を見たい場合は、「ブレークポイント」を設定して、「ウォッチ・ウィンドウ」で確認するが簡単だと思います。

ディープだが覚えておきたいUnityゲーム開発の小テク16選まとめ
https://www.atmarkit.co.jp/ait/articles/1503/13/news046.html

unity デバッグ」で Google 検索すると、それなりに情報が出てくるようですので参考にしてみてください。
===============================

投稿2019/06/18 05:48

編集2019/06/19 01:14
nskydiving

総合スコア6500

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

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

syouga0826

2019/06/18 12:10

>ある程度のところでキリをつけた方が良いと思います。 『カードが場に出た時ことをトリガーにする処理』ただ一点、どこでやっているのかさえ特定出来れば、今詰まっている大半のことが解決しそうなので中々踏ん切りが付かないところです。 ですがおっしゃることごもっともです、もう少し悪あがきしてみてダメそうであれば切り替えます。 >「CCG Kit を使わない」という選択肢も考えた方が良いかもしれません。 そうですね、まずテストコードを書く段階で自分なりの書き方を一度考えてみます。 その上でCCGKitに使えそうな箇所を見つけられれば、その箇所を読みつつ勉強するなど、遠回りになりそうですがやってみます。 >プログラミングスクール 迷っていたところなのでありがたいです。 今回スクールは辞めておいて別途勉強会など、同士を探してみるなどの方法も検討してみます。 >書籍と公式マニュアルを見ながら勉強しました。 具体的な書名があればご教示お願いします。 質問文で挙げた「ひよこ本」はC#に関する記述が薄く、「ゲームの作り方 Unityで覚える遊びのアルゴリズム」に関してはコードは多いものの解説は少なめでイマイチ理解度が伸びた実感がありませんでした。 例えばawakeとstart、フィールド宣言、コンストラクタそれぞれで呼ばれるクラスがあった場合、どういった順番で初期化されるのかなど、解説を探すのに苦労した点です(今は解決しましたが、最初は挙動に気づかず調査が難航しました。先述した二冊には載っていなかったと記憶しています)。 >Visual Studio で十分かと思います。 Visual Studioのクラス図では大量に出力されるクラス間の継承関係が把握出来ず、半ば挫折した末、秀丸のgrepでコツコツと呼び出し元にコメントを書くことでゴリ押ししようとしているところです…。 理想は実行中に呼び出されたクラス、変更が加わった値がポップアップででも出力される(あるいはゲーム画面に表示されている値がどのクラスから呼び出されているものか視覚的に分かる)ような状態を作れるソフトがあると便利だと思いますが、そういったツールを探すにどんなワードで検索を掛ければいいのかわからない状態です。 もしご存知であればお知恵を拝借できればと思います。
nskydiving

2019/06/19 01:25

追加情報を回答欄へ追記しましたので、ご確認ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問