Unity日本語公式サイトのチュートリアルで玉ころがしがありますが、一度玉ころがし(RollABall)を実装すると基本的な仕組みがわかります。改造する方法はいろいろありますが、以下の「【Unity】ユニティちゃんを転がすゲーム、UnityChanBallRollはどのように作られていたのか」は、キャラクターを使ったり背景を強力にパワーアップしているので、応用する際の参考になりそうです。またソースコードを公開しているので、実際にUnityでプロジェクトの中身を見れるのはありがたいです。
プログラミング初心者向けチュートリアルやUnity5やC#の記事を書いています。
Unity日本語公式サイトのチュートリアルで玉ころがしがありますが、一度玉ころがし(RollABall)を実装すると基本的な仕組みがわかります。改造する方法はいろいろありますが、以下の「【Unity】ユニティちゃんを転がすゲーム、UnityChanBallRollはどのように作られていたのか」は、キャラクターを使ったり背景を強力にパワーアップしているので、応用する際の参考になりそうです。またソースコードを公開しているので、実際にUnityでプロジェクトの中身を見れるのはありがたいです。
初心者が何言っているのだ!と思われそうですがとてもストレスがたまるので感じた事を書きます。
Unity公式チュートリアルをやってみて思ったのですが、頻繁に機能が変わるものには動画チュートリアルは全く向いていないようです。みなさんご存知だと思いますが、Unityはマイナーバージョンが変わると結構エラーが発生して動きません。
Unityは公式チュートリアルを動画配信していますが、Unityのバージョン毎に差分をアップロードして管理しているわけではないため、Unity最新版とチュートリアル動画で学ぶ場合は、差分情報をどこからから入手する必要があります。Youtubeのコメントや、公式フォーラムや、時には公式のサポートが差分のPDFを配布していたりします。ですがひどく面倒です。
Unity5.3で、過去のチュートリアルをやると、UIが違ったり動作が違ったりして、それが自分のソースコードの書き方や設定の仕方が正しくないのか、Unityのバージョンの差で発生しているのかなどを調べるのが結構面倒です。またYoutubeコメントは人によって、チュートリアルをやってみた時間も違うし、Unityのバージョンも違うので、スレッド管理されていないコメントはソフトウェア開発と合っていなくストレスになります。
また、テキストファイルのように調べたい文言やソースコードをテキスト検索できないため、Youtubeのスライダーを活用するのですが、1時間ある動画で、どこだったかを特定するのは非常に困難で、しっかり時系列でメモを取らないと、数日前にやったチュートリアルですら調べたいところを特定するのが困難です。
書籍やテキストファイルの場合は、ざっと見て検索、索引、目次からすぐに調べたい対象を特定できるため、当たり前のことができないため余計ストレスになります。
さらに頭にくるのは、チュートリアルで扱っているゲームはとても品質が良く、日本語翻訳もされていたりするところです。品質の悪いチュートリアルならそれで見なければいいだけなのですが、公式の開発者による作業フローが学べるのはとてもおおきいです。ボールころがし、3Dベースのシューティング、ガンアクションなどで、実例で、パーティクルや、Unityの物理や、レイキャストなど様々なことが学べるため、バージョン違いにより動画で学習するのが困難になるのはとても残念です。
Unityではなく、コミュニティーに協力してもらってGithubなどでドキュメントを作ってくれるとすごくうれしいのですがそれはそれで難しいのかもしれません。。。
このチュートリアルでは、以下のようなことを学びました。
応用として弾を打って敵を倒せるようにするとインベーダーゲームのようにできそうす。
Unityの日本語公式にブロック崩しのチュートリアルがありました。ただし古いので、[超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(1)ステージ配置 を参考にするとよさそうです。わざわざ英語でやる必要ありませんね。
一度やったことをもう一度やることは復讐になるので、次はこのチュートリアルをやってみます。
Unityの公式チュートリアルである「玉転がし」を作った方はたくさんいると思います。完成したらUnityの基本操作が分かりちょっとした達成感はありますが、出来たゲームは面白くありません。とりあえず作りたいゲームがあるけれど、勉強も必要なのでこのチュートリアルをやったのだと思います。
でも何が理由で、この球転がしは面白くないのでしょうか?
どうすれば面白くなるのでしょうか?以下は退屈なブロック崩しですが、エフェクトやサウンドなど小さな変化をたくさん組み合わせることで、単調なブロック崩しがジューシーに変わっていく動画です。
ゲーム制作で、自分がどう感じるかも重要ですが、動画を見ると、聴衆の引き込まれていて、楽し気な反応がとても分かりやすいです。
Unityはアセットが豊富ですが、バラバラなアセットを使うとワールドとキャラクターが合ってなくて、いびつなプロトタイプが出来上がったりします。そして複雑なアセットや仕組みを無理に使おうとして、うまく使いこなせず、結局挫折してしまいます。
以前2Dシューティングを作ったのですが、スコアを用意して敵をいくつか用意して完成したのですが、まったく面白くありませんでした。ですがデバッグ中の設定ミスで、敵の弾のスピードを30倍ぐらいにしてしまった事があります。単純なミスなのですが、頑張って数回に1回避けれるぐらいだったので、修正せずに意地になってずっとプレイしたことがありました。デバッグのはずが夢中にプレイしていたので、この経験から面白さは、グラフィックを綺麗にだけでなく、小さな変化をどうつけれるかも考えるようになりました。
Unityを始めた方は「玉転がし」を作り捨てて、すぐ次のゲームを作り始める場合が多いと思いますが、最初に作った単調なゲームを「どうすれば面白くなるか」と磨くことも大切なのかもしれません。玉の速度をすごく速くしてみたりするだけでも、面白さのヒントは見つけられるかもしれません。
Unity公式でも上記動画を参考に、インベーダーゲームを使って説明していました。ただ、こちらのプレゼンは画面の揺れのエフェクトがとても強かったり、調整が必要で評判が良くありません。でも評判の良い例と悪い例をくらべることで何かのヒントになるかもしれません。
UnityでProcessingで作ったのNode Gardenのようなものを作って見ようとしているのですが、いくつか分からないことがあります。
ノードをつなげるエッジは、Spring Jointを使って実現できそうですが、プリミティブオブジェクトをコードで伸縮させるのは面倒そうです。それともパーティクルのようなものでエッジを実現すればよいのかわかりません。
レイキャストができるので、それで照射して一定区間なら、その光線に対してパーティクルを設定するなどができそうな気もします。
上記からできる出来ないは別にして、課題ができました。とりあえずパーティクルが面白そうなのでパーティクルを調べてみます。
ひとまず線を引くということでよければ以下が参考になりそうです。
手っ取り早いのは、CameraのClear Flagsを Solid Color にしてBackgroundで色を指定する方法です。他には[Window]->[Lighting]でLightingタブから環境を変更する方法もあります。
クリアと聞くと、消しゴムで消したり、黒板で消すイメージがありますが、Clear Flagsで指定されている状態にすることをクリアと言っています。初期設定では、Skyboxが指定されているので、何もオブジェクトがないプロジェクトの最初の状態がクリア状態になります。元々OpenGLやDirectXからきている用語なので、クリアなのに、空が表示されるという違和感がある状態になってます。
シューティングゲームの敵の出現や、弾や、迷路の自動生成など、スクリプトからゲームオブジェクトが生成できると幅が広がります。比較的短い説明で分かりやすい解説である実行時のプレハブのインスタンス化がマニュアルに載っていました。
この解説はページ内の文字数が多いように感じますが、実際は、3つのよくありそうなシナリオでのUnityの設定の仕方とソースコードが書かれています。初めての人は、一番初めのレンガを自動生成する方法を見ればよいだけなので、読むドキュメントとソースコードは少ないです。
シナリオ1.ひとつの “レンガ” から壁を作成するために、複数回異なる場所に作成する
シナリオ2.ロケットランチャーが発射時に空飛ぶロケットプレハブをインスタンス化します。プレハブはメッシュ、Rigidbody、Collider、および子ゲームオブジェクトと軌跡に Particle System を含みます。
シナリオ3.ロボットがバラバラにいくつもの部分に爆発します。
Unity公式球転がしチュートリアル をUnity5.3で作成しました。チュートリアルには配布の仕方などがなかったので、勉強もかねて記念にロリポップで配布してみます。この球転がしゲームはzip圧縮したら44MBぐらいでした。最近はSteamなどや基本無料のオンラインゲームもたくさんあるので、ダウンロード時間に関してはこの程度の容量なら問題なく配布できそうです。
https://hajimete-program.com/games/RollABall.zip
exeファイルを作成して配布したり、WindowsStoreやAndroidへの配布は問題なさそうですがWebGLに関しては問題がありそうなので、ちょっと書いてみます。
普段いろんなブログやSNSなどを使うためにブラウザを使っていて、リンクをクリックすると数秒以内にそのサイトが閲覧でき、Youtube動画もすぐ再生できます。そしてこれが当たり前となっているので、WebGLのゲームをクリックして起動するまでに数十秒待たされるとすごくストレスになります。
さらに最悪な場合は、海外のサイトでぐるぐるダウンロードアイコンが回るだけでどの程度でダウンロードが完了するか分からない場合です。これはUnityの問題ではなくWebGLの仕組みの問題で、いろいろ対策はあるのかもしれませんが、分かっていてもものすごいストレスなので、現時点ではSteamやWindows StoreやGoogle Playストアのように、ユーザーにアプリをダウンロードしてもらい、それを実行することでゲームが開始されるという独立した2段階ステップで配布するほうが良いのかもしれません。
海外で有名なフリーソフトサイトitch.ioで、Unityで作った2Dゲームをいくつかブラウザーでやってみました。2Dの場合は比較的容量が少ないためブラウザーでできるものが多かったです。3Dになるとダウンロード形式が多いようです。
メニュー->[Edit]->[Project Settings]->[Player]で、PlayerSettingsインスペクターが表示されます。ここで、User Player Logのチェックを外すとoutput_log.txtログファイルは出力されなくなります。
Unityで配布用のexeファイルを作るときに、Build and Runや自分で試しに動かすとexeファイルと同じ場所に、output_log.txtを出力します。Windows10のデフォルトだと、”C:UsersPublicDocumentsUnity Projectsプロジェクト名ビルド先フォルダー”に出力されますが、出力先を変更した場合は、そのディレクトリー情報が、このファイルに出力される場合があります。開発者の環境のディレクトリー情報などが表示される場合があります。またビデオカード情報やディスプレイ解像度も表示されます。なるべく情報を公開したくない場合はOffにしてしまうのが良いでしょう。
メニューから[Edit]→[Project Settings]→[Player]でインスペクターに、PlayerSettingsが表示されるので、”Default Is Full Screen”のチェックを外すと、デフォルトでWindowモードになります。また解像度指定も可能になります。
ここで、製作者の名称やログ出力の設定なども可能なようです。マニュアルも日本語であるので細かい設定が気になる人は確認してみるとよいでしょう。
http://docs.unity3d.com/jp/current/Manual/class-PlayerSettingsStandalone.html
いくつかすぐ使いそうな項目としては以下などでしょう