3日か4日目、早くも挫折しそうです
当初、ゲーム会社に行きたいと思い立ち。Unityを頑張り始めました。
さわりを軽く頭に入れて、わからないけれどもとりあえずやってみるの精神で簡単なゲームを作ろうとUnityを起動して、C#scriptをコピペして、ググって。
でも全く完成できず。
というか、ググってもググっても僕が欲しているような内容は見当たらず、諦めてまた違う入門者向けのミニゲームを作ってみるけど、丁度中間あたりでscriptをどう変更していいのかもわからなくなって、インスペクタやらオブジェクトやらわけわかんないことばかりで、
それでもなんとか自分なりに調べて組み合わせて起動したら、まったく画面が言う事を聞いてくれないし
諦めてChatGPTにscriptを出力してもらいながら作ろうとしても全然上手くいかない。
とてつもなく悔しくてたまらないです。
しかし、どうやっても中々うまくいかない事ばかりで、ここ連日落ち込んでばかりです。
どうやって皆さんは上達していくんですか?
ちなみに僕はシューティングゲームもテトリスも作れませんでした。主にゲームのシステムとして玉を思い通りに動かすのが理解できないし、つくれません。
そもそもシューティングゲームやテトリスを軽く作れるというイメージを捨ててください.
おとなしくコンソールアプリから勉強してください.
コーディングは設計ができないとどこの分野行っても詰むので,概念を理解しないままコピペで継ぎ接ぎしないように.
ひたすらに頑張れ
何事も習得には時間がかかる。
3-4日ではうまくいくはずがない。
まったく画面が言う事を聞いてくれないし
コンピュータは "指示した通りにしか" 動けない。
言うことを聞いてくれないんじゃなくて、言ってることが間違ってる。
そこだけはしっかりと意識を変えたほうがいい。
はい……
こういうのって具体的にどういう勉強するんですかね
前に書籍の購入を勧められたので、熱が冷めないうちに買って書かれてあるSampleをとにかく手で覚えるためにコンソールに打ち込んでますけど……
ちゃんと身についてるかもわからないですし(というかUnityの時点でこれなので、疑心暗鬼です)
こういうので調べてみると、実践というかコピペで良いから作ってみるとか言うの聞くので……。やってはいるんですけど、覚えゲーじゃないというのも時折見かけて、なんというか、意見が分散していて。何が効果的なのかもわからない状態で……
そもそもUnityでゲームを作るのが目的でもコンソールアプリを勉強することが一番堅実なのでしょうか
そもそもUnityでゲームを作るのが目的でもコンソールアプリを勉強することが一番堅実なのでしょうか
企業採用が目的というならある程度知識的なバックグラウンドは必要になるでしょう.
永続的にUnityで開発していくという保証はありませんので,コンピュータを操作するという意味での基礎知識や,応用が効く感覚を身に着けているかどうかは立ち回りに大きくかかわってきます.
厳しい話ではあるのですが,特に大学実習としてのプログラミングにおいてコンピュータの仕組みとコーディングをまとめて学べるというアドバンテージがかなりあって,それを独学書籍だけで追いつくのはまあまあな苦労になります.ある程度腰は据えて取り組んでください.
こういうのって具体的にどういう勉強するんですかね
ゲーム開発のことはわかりませんが、私は書籍を買って、読んで、実際に利用してみるというyuta_san0629さんと同じような方法ですね。
書籍の代わりにUdemy等の動画コンテンツから知識を得る人も多くいるようですが、私にはどうにも合わず。
こういうので調べてみると、実践というかコピペで良いから作ってみるとか言うの聞くので……。やってはいるんですけど、覚えゲーじゃないというのも時折見かけて、なんというか、意見が分散していて。
「コピペで作ってみる」、「覚えげーではない」という2つの意見は特に齟齬はないと思います。
基本的なアプリ、ありがちなアプリは市中にサンプルコードがあふれているので、大部分をコピペで作れます。なのでまずはそういった方法でプログラミングに慣れて基礎を身に着けて、その後に応用的な内容(覚えげーではない内容)に入るという話かと思います。
何事もそうですが、暗記も必要だし考えることも必要という極々普通のものです。
ゲームプログラマが一切に思考することなく暗記した内容のみを使う、逆に一切に暗記せずに常に思考のみをしている、なんていうことはないです。
何が効果的なのかもわからない状態で……
正直なところ、個人ごとに最適な方法が異なるのでなんともいえないですね。
ありきたりで申し訳ないですが、いろいろ試してみて自分にとって最適な方法を見つけるしかないと思います。
そもそもUnityでゲームを作るのが目的でもコンソールアプリを勉強することが一番堅実なのでしょうか
個人的にはゲーム開発の難易度は高い考えているので、基礎を固めるという意味で、コンソールアプリから始めるというのは間違いではないと思います。
ただコンソールアプリの開発が誰にでもできるほど簡単かと問われたらそんなことはないので、しっかりと身構えて勉強するべきかと思います。
少なくとも3-4日で学習できるようなものではないです。
@midoribi なるほど……参考にします!
@jinbei230525 申し訳ないです
ご回答ありがとうございました。
そろそろちゃんと勉強に戻ります。
凄い勉強になりました!
頑張ってテトリス作れるようになります!
最終的にゲームを作りたいという目的があるなら、基礎ばかりやっていてもゴールが遠すぎて気持ちが萎えてしまうと思います。
本でも動画でも、小さめのゲームの完成まで丁寧に教えてくれる教材を探して、一度丸写しで作ってみるのもお勧めします。分からないことだらけだとは思いますが、説明されたものを全部理解したり、自分なりの工夫を加えたりしようとせずに、とりあえず動く状態まで完成させます。それから、自機の色を変えたりスピードを変えたりといった簡単な工夫を加えてみるといいでしょう。解決すべき課題を小さく設定し、そこで生じた疑問だけに絞って、質問したり基礎教材を調べたりすれば、少しずつゲーム作りの知識がついていきます。
@uasi
はい!ただ……ネット内で初心者向けというのを条件に探してるんですが、そもそも質問できるほど疑問が小さくまとまらないのです
それも含めて、どうやってそれらを乗り越えたのだろうと思い……
ちょっとずつちょっとずつ、例えばCubeを動かす、枠に判定を付ける。
そこまでならできるんですけど、そこから本格的なゲームとしての機能をC#で実装すると、リジットボディとかコライダーとか物理演算とか……
とにかくどれに要点を絞って調べたらいいのかもわからない状態なのです。
僕も当初はネットで公開してあるゲームの作り方などを調べて頑張ればできるだろうと思っていたのですが、現実そう上手くはいかず今に至るような感じです。
Unityというのを触れたこともない人の勝手な妄想ですが……
「Unityを使えばプログラミングを一切しなくても(知らなくても)ゲームが作れるよ!」という話ではないのであろうと思うので,
「プログラミング初見です という状態でいきなりUnityを使って何か作る」ということをしようとしているのだとすれば,
{Unity,使う言語(C#かな),プログラミングの諸々…}という複数の未知の事柄をいきなり同時並行的に学習せねばならないという話になりそうで,とても大変そうですね.
想像しただけで「まぁ俺だったら無理そうだな」とか思えます.
むしろ「3~4日も頑張り続けたとかすげぇ!!」って感じ.
「まずコンソールからやる」みたいな話は,まずは同時に相手にする事柄を極力減らして各個撃破していきましょう的な話であろう,と.
同時が無理そうならそういう道をたどるのが現実的であろうと私も思います.
こんにちは、Unity を学びながらゲーム作りをしたことがある者です。
まず、 @yuta_san0629 さんはとても大きな挑戦をしていると思います。
@NyancoRitter さんの言うように、プログラミング初見の人が Unity でゲーム作りをする場合、同時並行で学ぶことが (@yuta_san0629 さんの想像の数倍くらいは) 大量にでてきます。
私が思いつく物をあげてみると、
- プログラミングそのものの考え方
- C# の文法 (C#を使っている場合)
- ゲーム作りそのものの考え方
- Unity で提供される各種機能の使い方
- collision 等の Unity の UI から使う機能の使い方
- Update 等のスクリプトを書く際に使う機能の使い方
何もわからない初心者のうちは、「考え方」と「お約束(文法や UI の使い方等)」の両方を学習しながらゲーム作りをすることになると思います。
しかも、ゲーム作り、プログラミング、アルゴリズム等様々なレイヤーで毎回「考え方」と「お約束」の両方が顔を出してくることになることでしょう。
どうやって皆さんは上達していくんですか?
勉強しながらゲーム作りをするというのは、大量の、しかも特徴の異なる敵を同時に相手にするという自覚を持って取り組むことが肝要になると思います。
そして、こういう時には敵を同時に相手にせず、以下のように問題を分けて丁寧に取り組んでいくことが大切になります。
- 「今、自分がやりたいことは何なのか」をできるだけ細かい単位にわける
- 「今、自分がやりたいことの一単位分」を丁寧に言語化する
- 「やりたいこと一単位分をするために必要だけど自分が知らないことは何か」を誰か (ChatGPTとか、Googleとか)に聞く
- ここでトンチンカンな解答が来たら、2の言語化が丁寧でなかったのか、1の問題の分割が甘く、まだ大きな問題に取り組もうとしているのか、どちらかだと思うので、前のステップに立ち戻って考えてみましょう。
- 提案された解決策が合ってるかどうか考えてみたり、実行して確かめてみたりする
例えばこんな感じで考えていきます
- シューティングゲームを作りたい(大きな目標)
- そのためには、自機を上下左右に動かしたい (詳細化を試みたが、まだ漠然としている)
- 自機を動かすのは PC のキーボードの WASD キーにしよう (詳細になった)
- キーボードの WASD が押されたかどうかをプログラムから知る方法を私は知らない(知らないことが明確になった)
- ↑このぐらい詳細ならググれば答えが出る
- キーボードの WASD が押されたかどうかをプログラムから知る方法を私は知らない(知らないことが明確になった)
- あと、自機をプログラムから動かすにはどうすればよいだろう(まだ漠然としている)
- 自機の座標をプログラムから変更したい(明確になった)
- 自機を動かすのは PC のキーボードの WASD キーにしよう (詳細になった)
- それから、シューティングだから弾を撃ちたいな (漠然としている)
- スペースキーで発射するのがいいかな
- 撃った弾は上方向に毎時間座標が変わっていくよな
- ↑これらは自機を動かす時に学んだこと(キーボードの入力取得、ゲームオブジェクトの座標の操作)を応用すればできるな
- 敵も追加したいな
- 敵の移動はどうやって作ればよいだろう?
- NPC の動かし方の考え方を知りたい(でもいいし)
- とりあえずランダムに動かそう!
- どうやってランダムに動かせば良いのだろう(でもいい)
- 敵も弾を撃つよな
- 自機の弾に当たったら敵が死ぬようにしたいな
- 敵の弾に当たったら自機が死ぬようにしたいな
- どうやってランダムに動かせば良いのだろう(でもいい)
- 敵の移動はどうやって作ればよいだろう?
- そのためには、自機を上下左右に動かしたい (詳細化を試みたが、まだ漠然としている)
もちろん、実際は上のように上手くいくわけではなく、様々なタイミングで予期せぬ問題が発生します。
- 考えを言語化するための単語がわからない
- 近いところから調べていこう。
- 何が自分の考えに近いのだろうか?
- 近いところから調べていこう。
- コンパイラが意味のわからないエラーを吐いた
- 英語の意味がわからないのか?
- 意味はわかるが解決策がわからないのか?
- コンパイラはエラーを吐かないけど実行結果が思ったとおりにならない
- バグの見つけ方がわからないのか?
- バグは見つかったが直し方がわからないのか?
- 直すために、理想的な状態を自分で言語化できているか?
- 言語化できているのにバグってるとしたらなぜか?
- 例えば、自分が言語使用を誤って覚えているのか?
そういう時にも、「今自分が何に詰まっているのか」を分析して、1. 細かい単位に分けて、 2.明確になるように言語化して、 3.誰かに聞いて、4. 試してみるという風に先程の考え方を使います。
「困難は分割して部分部分の問題に対処する」 というわけで、分割統治法のお話でした。
この話があなたのためになることを願っています。
そこまでならできるんですけど、そこから本格的なゲームとしての機能をC#で実装すると、リジットボディとかコライダーとか物理演算とか……
とにかくどれに要点を絞って調べたらいいのかもわからない状態なのです。
ググると細部の技術的な話がよく出てくるので、初心者にとっては何が大事なのか分からなくなることでしょう。
そういうときは手を付けられるものから手を付けて一歩ずつ歩んでいくことが大切です。
今日はリジッドボディの記事を読みながらリジッドボディを自分で動かしてリジッドボディについて大分理解したからリジッドボディ記念日!
今日はコライダーについて調べながら色々動かしてコライダーについて理解したからコライダー記念日!
今日は(中略)物理演算記念日!
このくらいの歩みでもよいでしょう。
- 逆に言えばこのくらいの歩みを許容できないようなタイムリミット付きの目標を立てているなら、その目標は変えた方が良いと思います。
ただ、勉強勉強の毎日よりも、作っているものが動いてくれたほうがモチベーションが上がると思うので、ゲームを作る計画を立てる際には動く部分を優先して作るとよいかと思います。例えば、こんな感じで優先順位をつけてみたり。
- プレイヤーが操作できるキャラ
- プレイヤーが操作できる UI
- 勝手に動くキャラ (敵など)
- キャラ同士の相互作用 (弾に当たったら死ぬなど)
@Summer498
めちゃくちゃありがとうございます!
親身な回答、凄い励みになりました。なんというか、モチベーションと言うか学習の糸口と言うか
なんか色々と湧き出てくる感じがします。
形のつかめないことがなんというか曇り模様だったのが、晴れた日の雲レベルにまで可視化されたような気がします。
滅茶苦茶遠いのかもしれませんが、Console.Writeやifなどの基本的な文法が、参考書を見なくとも書けたり、Sampleをちょっといじって理解を深めたり、ちょっとずつ進歩していってる感覚も今日じんわりと感じております。
頑張ります!
凄い励みになりました!!
@NyancoRitter
はい……少し焦り過ぎたのかもしれません。
一年後に目標を変更して気長に一つ一つ升目を塗りつぶしていこうと思います。
ただやっぱり、今日もなんですがコンソールいじるだけであれだけあった時間があっという間で……。死ぬ気でやろうと思います。
ただやっぱり、今日もなんですがコンソールいじるだけであれだけあった時間があっという間で……。死ぬ気でやろうと思います。
他の人の返信へのリプ付け失礼するけど、
今日はコンソールのことを丁寧にやってコンソール記念日にすればええやないの
プログラミングに限らず勉強は長期戦になるので、気の持ちようは大事
- 「死ぬ気でやればできるタイプ」なら死ぬ気でやってもいいと思うけど、そうじゃない人は小さな一歩に喜んでポジティブに考えるほうが良きです。
- 追い込むと体の前に心が死にます
- なんならできる人(死ぬ気でやって成功を勝ち取った人)でも死ぬ気でやったら死にます
あと、他人に聞くより ChatGPT に訪ねたほうが良いこともあります。
- GPT はポジティブに向かう方向にアドバイスする傾向があると思うので、今回のような「勉強しんどい」系のことは GPT の方が得意かも
- プロンプトに「励まして」って入れておくと多分より強く励ましてくれる
- 人に聞くとアドバイスが結構厳しく(叱責されているように)聞こえることがあるので心が死にます
- (実際に他の人へのあなたの返信を見ていると、実際よりも厳しく捉えているように見えます)
誰だって最初はコンソールの世界で ↓みたいな出力を達成するにはどうすればいいのか? みたいなコードを書くくらいのところから始めるんじゃないかと思う.
#
###
#####
「やったー! ピラミッドできたよー!」みたいな.整数を1個入力してその段数のピラミッドを出力するとかそういう.
たったこれだけのこと(大抵は宿題)ができずに掲示板みたいな場所で質問しちゃったりする人も割と良くいるわけで,こういうのを自力で数日で突破できるようならばむしろ自信を持って良いんじゃないかと思う.
こんなのはやっててもつまらないかもしれないけども,これを「なんか文字が出たけど? で???」とか捉えるのではなくて「(とりあえず文字で構成するとか諸々の縛りはあるけども)何か【2次元のグラフィックを表示できるようになった】ぞ!」とかなんとか ゲームっぽい言葉(?) を用いてポジティブに捉えてみると少しはモチベーション維持的な面で良いのかもしれない.
あと, 練習/勉強 のための課題というかお題についても,そこらの学校の宿題みたいないかにもつまらん物ではなくて,
「俺はもう2次元はできたから,次は 3次元 をやるぜ!」とか,何か少しでもゲーム的なジャンルに近いお題を選んでみると良いのかもしれない.
@Summer498
なるほどChatGPTにそんな使い方が……!
確かに、ちょっと文字だけだと無表情な感じがあって、ちょっと落ち込んでしまいますね。
色々と考えなおして、挑もうと思います
ありがとうございます!
@NyancoRitter
なるほど……丁度昨日ちょっとだけですが似たようなことをしてました。
ケーキは好きですか?という質問に対し、YesかNoでそれぞれ違う内容が返ってくるというものです。
なんだか、それだけでもできてる感があって、凄く楽しく感じれた気がします。
3Dも一つ一つちゃんと段階を踏んで学んでいこうと実感しました
参考にできる部分が存在するかどうかわからないけども,C#のコンソールで何か作ることに関して ちょっとやってみただけの日記 を書いてみた.
とりあえずループの中でキー入力に対して何か動くようなのは思ったよりも簡単に作れそうな雰囲気かも.
@NyancoRitter さんのアイデアとても好きです
もっと発展させると、コンソール画面でも本気で頑張ったらインベーダーゲームやテトリスくらいは作れるので、コンソール画面で格闘してゲーム作りするのもありな気がします
Unity と違ってコンソールゲームの場合は、ゲームエンジンそのものに振り回されずに済みます。
- プログラミング・ゲームエンジン・ゲーム作りの 3 敵のうち、1 つの敵とそもそも戦わない道です。
- ゲームエンジンを使わない=文字だけと戦うので質問がしやすい (自分のソースのコピペでいい) というメリットもあります。