[相談] Unity・C#・オブジェクト指向が全く理解できません

に投稿

現在、ゲーム開発に挑戦しています。

今までPCの修理エンジニアとして働いてきましたが、不景気の波にのまれリストラにあい、新品の製品が安く手に入る現在では、修理エンジニアとしての将来性に失望を感じ、開発の道を志すようになりました。

私も数学は苦手です。プログラミングも子供のころにMSX-BASICやN88BASICを経験し、C言語を少しかじった程度で、未だにポインタを理解できていません。JAVAやC#などのオブジェクト指向にも挑戦しましたが、インスタンス・クラスやメソッドの呼び出し・アクセス修飾子など自由に使いこなすこともできず、せいぜい簡単なコンソールアプリくらいしか作れない状況です。

UnityのC#なんか膨大なクラスとメソッドで「は?」って感じです。

例えば、画面のスプライトを途中で変更したり、フェードアウトやフェードインをするのだって、ゴチャゴチャといろんな手続きをしないとできないみたいで、他人のコードを読んでも理解できず、途方に暮れています。オブジェクトのプロパティの設定を変更するのだって、SpriteRender.color = (R,G,B)と一行書くだけならBASIC並みに楽で私でもわかるのですが、事前処理というのですか…インスタンスだのハンドラだのpublic宣言だの、これまた「は?」って感じになってしまいます。
ハンドラって偉そうに書いてますが、理解できていません(笑)。状況をコンピューターに教えてやるのかぁ~…くらいの理解です(笑)

Unity C#のリファレンス見ても関数、変数、public関数、インターフェースとかどうやって使うんだよって感じで、クラス.メソッドで構成されているとか
ここは何がくるかわかりませんが.プロパティ = 値 で値の変更ができるのかなぁ~って感じで、かなり曖昧な理解しかできていない状況です。

昔のBASICのようなリファレンスのように、LINE(始点X,始点Y)-(終点X,終点Y)と書くだけで線が引けた単純な仕様でなくなってしまったため理解に苦しんでいます。

因みにインターフェースもわかりません。メソッド(機能)のないクラス?・・・「は?、そんなのどうすんだよ。メソッド(機能)のないものに意味あるのか?」って感じです。違っていたらすみません。

何度挑戦しても挫折の連続で、学習方法が悪いのか中々習得できません。独学でやるにも限界を感じて何度も諦めていますが、将来性のない修理エンジニアには戻りたくないし、開発系の仕事をしたいという思いから挑戦を試みてはいるのですがうまくいきません。ネットで他人のコードを見ても理解できず「やっぱ自分にはできないのか」と絶望すら感じます。

フェードイン・フェードアウトとかも何となくイメージはわかるんです。「PlayerやBackground,Enemyなどのオブジェクトの上に画面一杯の黒紙オブジェクトを用意して透明度や輝度の制御をすればフェードイン・フェードアウトさせればいいんじゃないの?」とイメージは沸くのですが、じゃあコード書いてオブジェクトに実装してみろ・・・となるとできません。

黒紙オブジェクトだって2D SpriteでやるのかGUIのImageでやるのか・・違いが理解できていないので「どっちも画像を表示できるみたいだけど、どうすればいいんだ?」って状況です。

コードわからない、どのオブジェクトにドラッグ&ドロップでスクリプトを実装させればいいのかがわかりません。そうなんです、私は頭が固いんですよね。もっと柔軟に考えられればいいんでしょうが、親に似て頭が固く機能を実現させるための想像はできても、ツールにて機能を実装することができず本当に困っています。何でこんなことが理解できないのか、自分にはできないのか・・と。

HSP(HGIMG3)というフリー言語でソースを分けて「なんちゃってオブジェクト指向」的な感じで2Dゲームを作ったのですが、評価は酷かったです。数学が苦手で衝突判定も曖昧な判定しかできない、キャラや背景の動きがぎこちない、ソースがグチャグチャになり自分でもわからなくなることから、ちゃんとしたオブジェクト指向言語でやろうと思ったのですが、上記のとおりです。

今からまた、あの分厚いオブジェクト指向やC#の本で基本を勉強するのも鬱ですし、何というかプログラマ向けの脳ミソでなく、バカでも理解できるような学習方法はないですかね。何らかのアドバイスを頂けたら幸いです。

本当に困っています(T_T)

読者の方から相談メールをいただきました。

同じような悩みを持っている方向けに回答内容を一部紹介します。

ポインタは移動可能な参照

C言語を少しかじった程度で、未だにポインタを理解できていません

ポインタはアドレスが入っていると考えればOKです。ポインタはJavaやC#で言う所の参照です。
ポインタと参照の違いはポインタはアドレスに足し算などをして移動できる点です。

オブジェクト指向のポイント

JAVAやC#などのオブジェクト指向にも挑戦しましたが、インスタンス・クラスやメソッドの呼び出し・アクセス修飾子など自由に使いこなすこともできず、せいぜい簡単なコンソールアプリくらいしか作れない状況です。

デザインパターンを学ぶとオブジェクト指向がよく分かります。
結城浩さんのJava言語で学ぶデザインパターン入門がおすすめです。100%理解できなくても、最後まで読み通すとポリモーフィズムがどういうものかの感覚が出来上がります。

UnityのC#なんか膨大なクラスとメソッドで「は?」って感じです。

全部のクラスやメソッドを覚える必要はありません。使うものを使う時だけ検索して理解すればいいんです。

因みにインターフェースもわかりません。メソッド(機能)のないクラス?・・・「は?、そんなのどうすんだよ。メソッド(機能)のないものに意味あるのか?」って感じです。違っていたらすみません。

これはまさにデザインパターンを学べば分かります。インターフェースはポリモーフィズムをするためのものです。

オブジェクト指向の三大要素は
1. カプセル化
2. 継承
3. ポリモーフィズム
です。

何度挑戦しても挫折の連続で、学習方法が悪いのか中々習得できません。独学でやるにも限界を感じて何度も諦めていますが、将来性のない修理エンジニアには戻りたくないし、開発系の仕事をしたいという思いから挑戦を試みてはいるのですがうまくいきません。ネットで他人のコードを見ても理解できず「やっぱ自分にはできないのか」と絶望すら感じます。

「すべてを完璧に理解しようとし過ぎ」なように見えます。ベテランのエンジニアでも自分が使っている技術のすべてを完璧に理解している人はいません。必要な時に必要なだけ調べて使っているだけです。しっくりこないけど、動いたからいいかぁって場合だってあります。それを積み重ねていくと、「わかってきた!」って気づいたらなってる、そんな感じです。

フェードイン・フェードアウトとかも何となくイメージはわかるんです。「PlayerやBackground,Enemyなどのオブジェクトの上に画面一杯の黒紙オブジェクトを用意して透明度や輝度の制御をすればフェードイン・フェードアウトさせればいいんじゃないの?」とイメージは沸くのですが、じゃあコード書いてオブジェクトに実装してみろ・・・となるとできません。

どうコードを書くかを自分で一から考えるのはもう少し後でいいと思います。まずは、本やWebサイトでサンプルコードをたくさん読み、打ち込んで動かしてみる、そうしてたくさんのサンプルのパターンを覚えていきます。すると、「これとこれ組み合わせたら、あれが出来るんじゃないか?」という発想が生まれるようになります。

今からまた、あの分厚いオブジェクト指向やC#の本で基本を勉強するのも鬱ですし、何というかプログラマ向けの脳ミソでなく、バカでも理解できるような学習方法はないですかね。

「勉強のための勉強」をするのではなく、「作りたいものを作る中で、分からない部分を調べながら覚えていく」のがいいと思います。

とにかく、まずは完ぺきを求めず、数をこなすことだと思います。「なんとなくしかわからないけど、こういうことなのかなぁ」って理解でも良いのでたくさんのコードを見て、まねして書いていくと、ある時しっくりくる瞬間がきたり、実装方法の発想が浮かぶようになると思います!

プログラミング初心者におすすめのサービス
1. 講師から対面で学びたい派なら

プログラマカレッジをおすすめします。ProEngineerという転職エージェントが運営しているプログラミングスクールです。20代限定なんですが、無料で受講できて、修了後、就職支援もしてくれるんです。最高過ぎですよ、これ!!企業からの協賛金で運営しているのでスクールを無料にできるんだそうです。すばらしいシステムだと思います!

30代以上の方には

プログラマカレッジは20代限定なので30代以上の方にはWebCamp Proをおすすめします。受講料の返金保証がついているし、毎日11時〜23時まで通い放題なのでとてもいいと思います!

2. 自宅で学びたい派なら

「就職保証付き」オンライン就職予備校をおすすめします。Javaエンジニアコースでは就職保証がついているのでプログラマーとして就職したい方にはぴったりです。Javaエンジニアの求人ってめっちゃ多いし、求められる技術レベルもそこまで高くないのでちゃんとした教育プログラムなら就職保証できるだろうなとJavaエンジニア経験者の私も思います。

3. つまづいた時に質問したくなったら

プログラマー専用の質問サイトteratailをおすすめします。 つまづいた時にteratrailで質問すれば教えてもらえます。

これらのサービスを活用すれば、全くの初心者からでもプログラミングをばっちり出来るようになると思います!レッツトライです!

 - 勉強法