Unity公式チュートリアルの問題点

Unity公式チュートリアルの問題点

初心者が何言っているのだ!と思われそうですがとてもストレスがたまるので感じた事を書きます。

Unity公式チュートリアルをやってみて思ったのですが、頻繁に機能が変わるものには動画チュートリアルは全く向いていないようです。みなさんご存知だと思いますが、Unityはマイナーバージョンが変わると結構エラーが発生して動きません。

Unityは公式チュートリアルを動画配信していますが、Unityのバージョン毎に差分をアップロードして管理しているわけではないため、Unity最新版とチュートリアル動画で学ぶ場合は、差分情報をどこからから入手する必要があります。Youtubeのコメントや、公式フォーラムや、時には公式のサポートが差分のPDFを配布していたりします。ですがひどく面倒です。

Unity5.3で、過去のチュートリアルをやると、UIが違ったり動作が違ったりして、それが自分のソースコードの書き方や設定の仕方が正しくないのか、Unityのバージョンの差で発生しているのかなどを調べるのが結構面倒です。またYoutubeコメントは人によって、チュートリアルをやってみた時間も違うし、Unityのバージョンも違うので、スレッド管理されていないコメントはソフトウェア開発と合っていなくストレスになります。

また、テキストファイルのように調べたい文言やソースコードをテキスト検索できないため、Youtubeのスライダーを活用するのですが、1時間ある動画で、どこだったかを特定するのは非常に困難で、しっかり時系列でメモを取らないと、数日前にやったチュートリアルですら調べたいところを特定するのが困難です。

書籍やテキストファイルの場合は、ざっと見て検索、索引、目次からすぐに調べたい対象を特定できるため、当たり前のことができないため余計ストレスになります。

さらに頭にくるのは、チュートリアルで扱っているゲームはとても品質が良く、日本語翻訳もされていたりするところです。品質の悪いチュートリアルならそれで見なければいいだけなのですが、公式の開発者による作業フローが学べるのはとてもおおきいです。ボールころがし、3Dベースのシューティング、ガンアクションなどで、実例で、パーティクルや、Unityの物理や、レイキャストなど様々なことが学べるため、バージョン違いにより動画で学習するのが困難になるのはとても残念です。

Unityではなく、コミュニティーに協力してもらってGithubなどでドキュメントを作ってくれるとすごくうれしいのですがそれはそれで難しいのかもしれません。。。

Unity公式サイトのチュートリアルブロック崩しをやってみました。

001

チュートリアルで学んだこと

このチュートリアルでは、以下のようなことを学びました。

  • 当たり判定や剛体は使うけれど、重力を無視する方法
  • ブロックを壊した時の簡単なパーティクル
  • スコアやゲームオーバーのUI作成

応用として弾を打って敵を倒せるようにするとインベーダーゲームのようにできそうす。

チュートリアルのリンク

http://unity3d.com/jp/learn/tutorials/modules/beginner/live-training-archive/creating-a-breakout-game?playlist=17219

日本語でもブロック崩しのチュートリアルがある!

Unityの日本語公式にブロック崩しのチュートリアルがありました。ただし古いので、[超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で::(1)ステージ配置 を参考にするとよさそうです。わざわざ英語でやる必要ありませんね。

一度やったことをもう一度やることは復讐になるので、次はこのチュートリアルをやってみます。

Unityで玉転がしを作ったけど面白くないと感じるなら以下を参考にするとよいです。

Unityの公式チュートリアルである「玉転がし」を作った方はたくさんいると思います。完成したらUnityの基本操作が分かりちょっとした達成感はありますが、出来たゲームは面白くありません。とりあえず作りたいゲームがあるけれど、勉強も必要なのでこのチュートリアルをやったのだと思います。

でも何が理由で、この球転がしは面白くないのでしょうか?

どうすれば面白くなるのでしょうか?以下は退屈なブロック崩しですが、エフェクトやサウンドなど小さな変化をたくさん組み合わせることで、単調なブロック崩しがジューシーに変わっていく動画です。

ゲーム制作で、自分がどう感じるかも重要ですが、動画を見ると、聴衆の引き込まれていて、楽し気な反応がとても分かりやすいです。

面白さは意外なところにあるかもしれない

Unityはアセットが豊富ですが、バラバラなアセットを使うとワールドとキャラクターが合ってなくて、いびつなプロトタイプが出来上がったりします。そして複雑なアセットや仕組みを無理に使おうとして、うまく使いこなせず、結局挫折してしまいます。

以前2Dシューティングを作ったのですが、スコアを用意して敵をいくつか用意して完成したのですが、まったく面白くありませんでした。ですがデバッグ中の設定ミスで、敵の弾のスピードを30倍ぐらいにしてしまった事があります。単純なミスなのですが、頑張って数回に1回避けれるぐらいだったので、修正せずに意地になってずっとプレイしたことがありました。デバッグのはずが夢中にプレイしていたので、この経験から面白さは、グラフィックを綺麗にだけでなく、小さな変化をどうつけれるかも考えるようになりました。

Unityを始めた方は「玉転がし」を作り捨てて、すぐ次のゲームを作り始める場合が多いと思いますが、最初に作った単調なゲームを「どうすれば面白くなるか」と磨くことも大切なのかもしれません。玉の速度をすごく速くしてみたりするだけでも、面白さのヒントは見つけられるかもしれません。

評判の悪い例も見てみる

Unity公式でも上記動画を参考に、インベーダーゲームを使って説明していました。ただ、こちらのプレゼンは画面の揺れのエフェクトがとても強かったり、調整が必要で評判が良くありません。でも評判の良い例と悪い例をくらべることで何かのヒントになるかもしれません。

Unityで背景を単色に変更する方法

solidcolor

手っ取り早いのは、CameraのClear Flagsを Solid Color にしてBackgroundで色を指定する方法です。他には[Window]->[Lighting]でLightingタブから環境を変更する方法もあります。

クリアと聞くと、消しゴムで消したり、黒板で消すイメージがありますが、Clear Flagsで指定されている状態にすることをクリアと言っています。初期設定では、Skyboxが指定されているので、何もオブジェクトがないプロジェクトの最初の状態がクリア状態になります。元々OpenGLやDirectXからきている用語なので、クリアなのに、空が表示されるという違和感がある状態になってます。

 

Unityで何もないところから、スクリプトでオブジェクトを生成する方法

unity01

敵や弾を好きな時に生成したい

シューティングゲームの敵の出現や、弾や、迷路の自動生成など、スクリプトからゲームオブジェクトが生成できると幅が広がります。比較的短い説明で分かりやすい解説である実行時のプレハブのインスタンス化がマニュアルに載っていました。

この解説はページ内の文字数が多いように感じますが、実際は、3つのよくありそうなシナリオでのUnityの設定の仕方とソースコードが書かれています。初めての人は、一番初めのレンガを自動生成する方法を見ればよいだけなので、読むドキュメントとソースコードは少ないです。

シナリオ1.ひとつの “レンガ” から壁を作成するために、複数回異なる場所に作成する
シナリオ2.ロケットランチャーが発射時に空飛ぶロケットプレハブをインスタンス化します。プレハブはメッシュ、Rigidbody、Collider、および子ゲームオブジェクトと軌跡に Particle System を含みます。
シナリオ3.ロボットがバラバラにいくつもの部分に爆発します。

 

 

 

ゲーミフィケーションについて少しづつ調べてみる

ゲームを作る前にこういう記事を読み過ぎると良くないですが、クラッシーロードをどう考えて制作したかが書かれていました。

http://www.inside-games.jp/article/2015/03/04/85579.html

その中でリテンション、バイラル性、エンゲージメントループという聞きなれない言葉が出てきました。

リテンションはretentionで、保持、維持するの意味なので、いかにつなぎとめるかというやつですね。また、バイラル性は、Viralでウィルスのように、いわゆる「口コミ」で広がることなので、YoutubeやTwitterで拡散されていくように作り上げるのは素晴らしいことです。これら2つの用語は何となくわかりますがエンゲージメントループはいまいちわかりませんでした。

エンゲージメントループとは何か調べる

wikipediaで載るほどの用語定義はされていないようですが、ゲームというよりマーケティング分野で使われてきた言葉なのかもしれません。

 エンゲージメントを得る事の必要性

今回のSMWSFの様々なセミナーを通して最も良く耳にしたフレーズ、それは「Engagement(エンゲージメント)」である。直訳すると少しニュアンスが違ってしまうので,ここでは、提供したコンテンツに対してファンが自らの時間をコミットして何かしらの行動(シェアやコメントなど)を起こしてくれる、というような意味合いで理解していただきたい。実際,コンテンツを投稿してクリック数を得る事は比較的容易であり、そこから頭を一捻りさせればいけないのは、聴衆から何らかの反応を得る事であるということがプレゼンターの皆が口を揃えて言っていた事であった。

http://blog.btrax.com/jp/2012/02/19/social_media_week_san_francisco/

なぜ「Turntable.fm」はユーザーを夢中にさせるのか

上記で、「エンゲージメントループ」について書かれています。ゲーム分野で数々の著書を持つAmy Jo Kim氏が提唱した言葉

気になるマーケ用語 【エンゲージメント】【エッジランク】

エンゲージメントを”約束”、”契約”のように訳してしまうと理解が難しくなるようで、絆や繋ぎとめるなどの訳し方のほうがよさそうです。以下はTwitterについてですが、こちらも参考になります。

『Twitterのエンゲージメント率』とは?Facebookのエンゲージメント率との違いを徹底解説。

かなり用語に揺れがありそうなので、なぜ「Turntable.fm」はユーザーを夢中にさせるのか を読んでみます。

ゲーミフィケーションの基礎を理解したほうが良い

エンゲージだけで、Google検索で調べるのではなく、なぜ「Turntable.fm」はユーザーを夢中にさせるのか を読んで全体を把握したほうが理解が深まりました。Amy Jo Kim氏は、「エンゲージメントループ」を、いろいろな仕組みや用語定義をしたうえで、それを繰り返しすることで、ユーザーをつなぎとめる方法として「エンゲージメントループ」を提唱していました。

ゲームを作る際、例えば少し前の2Dプラットフォーマーだと、作成してそれがファミ通などの情報誌で知れ渡って、友達通しで面白いねで終わりました。しかし現在は、ユーザーがSNSやYoutubeでコミュニケーションできる時代なので、ゲーミフィケーションで概念や用語、問題の整理を行い、それをゲームに組み込むことで人気のあるゲームに仕上げられる可能性があるので「ゲーミフィケーション」を取り込んでいきましょうという感じなのかもしれません。

確かに「ユーザーのフィードバックを受けてより面白くする」と言葉を書くことができますが、「それじゃ、フィードバックを受けるとはどういう行為があって、またそれを繰り返してもらうにはどうすればよいか。」などはゲームプログラミングやゲームアルゴリズムとは全然別で、自分でやみくもに考えるよりも、一度「ゲーミフィケーション」を土台として取り組むことで効率よくマーケティングのとっかかりになりそうです。

 

 

インディーゲーム「イニシエダンジョン」

inishie01

インディーゲームが分からないのでいろいろ調べていたら「あなたが選ぶ今年のベストフリーゲーム」で、イニシエダンジョンを見つけました。Flashベースなのですぐにプレイ出来て、ローグライク系のハック&スラッシュでかなりはまります。

仲間を30人引き連れて、相手をボコボコにする爽快感があります。また死んだ場合に他のプレイヤーが、ゾンビ状態を撃破することで救済する仕組みがありゲームの魅力の一つとなっています。操作性もストレスがなく、無料で遊べるのはおどろくばかりです。

 

「Dungeon Souls」が面白そう

 

派手なアビリティと高難度のアクション、ローグライク要素ありのフリーゲーム『Dungeon Souls』

ゲームを作っていきたいですが、いろいろインディーゲームの情報源も調べていきたいです。automaton.amで少し前の記事ですが、「Dungeon Souls」が面白そうなので調べてみたら、いくつか賞をとっている有名なゲームのようです。

現在は、デモをindiedb.comで配布して、Steamなどで販売しているようです。 Nuclear Throne, Risk of Rain, Overtureに影響を受けているようです。確かにアイテムの表示がRisk of Rainのようです。

 

Unity5.3で始めて作ったRoll-a-Ballを配布してみます。

Unity5.3ではじめて作った記念に配布

Unity公式球転がしチュートリアル をUnity5.3で作成しました。チュートリアルには配布の仕方などがなかったので、勉強もかねて記念にロリポップで配布してみます。この球転がしゲームはzip圧縮したら44MBぐらいでした。最近はSteamなどや基本無料のオンラインゲームもたくさんあるので、ダウンロード時間に関してはこの程度の容量なら問題なく配布できそうです。

https://hajimete-program.com/games/RollABall.zip

exeファイルを作成して配布したり、WindowsStoreやAndroidへの配布は問題なさそうですがWebGLに関しては問題がありそうなので、ちょっと書いてみます。

WebGL版で3Dゲーム配布する際の問題点

普段いろんなブログやSNSなどを使うためにブラウザを使っていて、リンクをクリックすると数秒以内にそのサイトが閲覧でき、Youtube動画もすぐ再生できます。そしてこれが当たり前となっているので、WebGLのゲームをクリックして起動するまでに数十秒待たされるとすごくストレスになります。

さらに最悪な場合は、海外のサイトでぐるぐるダウンロードアイコンが回るだけでどの程度でダウンロードが完了するか分からない場合です。これはUnityの問題ではなくWebGLの仕組みの問題で、いろいろ対策はあるのかもしれませんが、分かっていてもものすごいストレスなので、現時点ではSteamやWindows StoreやGoogle Playストアのように、ユーザーにアプリをダウンロードしてもらい、それを実行することでゲームが開始されるという独立した2段階ステップで配布するほうが良いのかもしれません。

itch.ioではUnityで作った2Dゲームがブラウザーベースで配布されている

  • https://kevin-pauly.itch.io/space-eater
  • https://itch.io/games/tag-3d

海外で有名なフリーソフトサイトitch.ioで、Unityで作った2Dゲームをいくつかブラウザーでやってみました。2Dの場合は比較的容量が少ないためブラウザーでできるものが多かったです。3Dになるとダウンロード形式が多いようです。

 

Unityでoutput_log.txtを出力しない方法

unity21

メニュー->[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にしてしまうのが良いでしょう。