■佐藤カフジの「PCゲーミング道場」■
ゲーマーの手でゲームを作ろう!
「Unity」で始める、趣味のゲーム制作 【特別付録:佐藤カフジ作「Angry Cube」】
色々な意味で業界の「最先端」を走る、PCゲーミングの世界。当連載では、「PCゲームをもっと楽しく!」をコンセプ トに、古今東西のPCゲームシーンを盛り上げてくれるデバイスや各種ソフトウェアに注目。単なる製品の紹介にとどまらず、競合製品との比較や、新たな活用法、果ては改造まで、 様々なアプローチでゲーマーの皆さんに有益な情報をご提供していきたい。 |
■ 驚くほどに手軽なゲームづくりを可能にした「Unity」
UnityのWEBサイト |
先進の統合環境でゲーム制作を楽しめる! |
ゲーム制作の敷居が急降下している。昔はプロしか作れなかった3Dゲームも、いまでは日曜大工レベルの気安さで作り始められる。決して大げさではなく、自分のやりたいゲームは自分で作ればいいという話がジョークに聞こえない段階に来ているのだ。
それを可能とするのが、ここ数年で飛躍的に進歩した新しいゲームエンジンと開発環境だ。トッププロ向けのゲームエンジンとしては「Unreal Engine」、「CryEngine」などが有名だが、今回の主役となるのは、独立系ゲーム開発者から絶大な支持を集める「Unity」である。
Unityは米Unity Technologiesが開発・販売しているゲームエンジン兼ゲーム開発環境だ。そのウリは、現代的なゲームを簡単に効率良く開発できて、多種多様なプラットフォーム向けにビルドできて、ライセンス費用が激安であること。無料版もあって、PC/Mac向けのゲームをつくるだけならタダだ。
ライセンス費用体系は「Unity」の公式サイトに正式なものがある。ワンユーザーで有料版の基本費用が1,500ドル、それに加えて各プラットフォーム向けライセンスがひとつ400ドル~1,500ドルと、個人レベルで購入可能な価格であることがおわかりいただけると思う。そして重ねて言うが、無料版でもWindows PC/Mac向けのゲームは作れる。もちろん作ったゲームを値段を付けて売ってもいい。
こうした激安料金体系のおかげで、iPhoneゲーム開発者を中心に少なくとも世界で50万人以上の人々が使用しているほど普及が進んでいるUnityだが、機能面でも最先端を突っ走っている。Unityが提供する統合開発環境は、レベルエディットからプログラミングまで、ゲーム本体をつくるためのすべてが1アプリケーションで提供されている、非常に現代的なものだ。
平たくいうと、3D空間にオブジェクトをポチポチ置いていき、それらに対して絵や動き、音声、AIなどのふるまいをくっつけていくイメージだ。まず形から入って、完成形を見ながら磨き上げていく。ゲームのマップをつくったり、MOD制作をしたことがある人なら、それに近いものだと考えてもらってかまわない。ビックリするほど簡単で、しかも楽しい。
「でも、やっぱりゲーム開発者向けのものなんでしょう?」とお思いの皆さん。Unityは「ゲーム開発の民主化」を標榜して、限りなく、ふつうの人たちがゲームを作れるように工夫されている。昨今のカジュアルゲームの興隆やMOD文化を例に挙げるまでもなく、PCゲームの楽しみのひとつが作る楽しみだとすれば、日曜大工レベルまで降りてきたこのツールを使って、あなたがゲーム開発者になってみるのも面白いのではないだろうか?
日常の用に足りる椅子やテーブルなら、大工道具を使って趣味の範囲でつくることができる。ゲームがそうであっても、何もおかしくはない。そうであれば、ゲーム作りをプロだけに任せていないで、ゲーマーが自ら、自分たちのためのゲームを趣味でつくる時代がきてもおかしくないのではないだろうか? 論より証拠で身を持ってやってみたので、その例をご紹介したい。
【Unityで作られたゲームの例】 | |
---|---|
Angry Bots(Unity Technologies)。iPhone/iPad/Android向けに最近リリースされた無料のアクションシューティングゲーム。実はUnityのサンプルゲームも兼ねていて、UnityのAsset Storeからプロジェクトファイルがダウンロードできる |
Cordy(SilverTree Media)。Android向けとしては最も早いタイミングでリリースされた3Dアクション。いくつかのゲームメディアからAndroid用のベストゲームのひとつに選ばれている |
PGA TOUR GOLF CHALLENGE(Electronic Arts)。EAがFacebook上で展開しているソーシャルゴルフゲーム。大手デベロッパーもUnityを活用し始めているという好例だ |
2日でゲームをつくるイベント「Global Game Jam」の日本会場にて、Unity日本リージョナルディレクターの大前氏率いるチームが制作したLife in Shadows。Unityの生産性の高さを示す良いサンプルだ |
■ Unityでの制作作業(の入り口)はこんな感じ
Unityを使い始めるために必要なものは、1台のWindows PCかMac、あとは少々のやる気だけだ。ひとまず、最初は無料版でチャレンジしてみよう。最新版のバージョン3.4はUnityの日本公式サイト、もしくは本家サイトからダウンロードすることができる。
無料版のUnityでは、有料のPro版にあるリアルタイムシャドウ機能や、各種の追加ミドルウェアによって実現されている高度な機能が省かれているものの、ひと通りゲームをつくるために必要なものはすべて備わっている。当たり判定やオブジェクトの動きを作り込むのに便利なPhysX物理エンジンも、はじめからビルトインされているのだ。
ダウンロードしてインストールしたUnityを起動すると次のような画面の統合環境が出てくる。
Unityのメイン画面 |
立方体を配置して…… |
水平方向にビヨーンと引き伸ばして地面ができた |
統合環境はいくつかの画面で構成されている。左上にあるのがプレビュー画面で、ここにゲームオブジェクトをドラッグして配置していくことでシーンを作っていく。その下にあるのはゲーム実行時のイメージが表示されるゲーム画面。再生ボタンを押すと、ここで即座にゲームが実行されるのだ。
画面左側にはゲーム要素の詳細を管理するパネルが並んでいる。「Hierarchy」パネルには、シーン内に存在するオブジェクトの一覧が表示される。配置したオブジェクトの詳細を確認・編集したり、ゲームを一時停止して、任意のオブジェクトがきちんと狙った状態にあるかどうかをチェックするのに便利だ。
その右の「Project」パネルは、シーンに配置するための様々なオブジェクトのパーツ(3Dモデルや、テクスチャー、スクリプトなど)を管理するところ。ユーザーは主にここにアセットを追加して、編集を加えていくという形になる。1番右側の「Inspector」パネルは、選択中のオブジェクトの詳細を表示したり、編集するためのものだ。
ゲームスタジオのプロ開発者が使う有料版のUnityでは、いくつか込み入った機能が追加されているものの、基本的な構成は無料版と同じだ。
ひとまずゲームっぽいものを構成するために必要なオブジェクトは大別すると3つになる。操作可能なキャラクターと、世界を映し出すメインカメラ、そして世界の構造そのものだ。
まずは、自分でそれらのものを配置して動かしてみると、Unityの最初の勘所がわかるかもしれない。はじめに、地面や地形となる立方体を置く(GameObject->Create Other->Cube)。次に、それがよく見えるよう、空中に点光源(Point Light)を置く(GameObject->Create Other->Point Light) 。次に、操作可能なキャラクターを追加する(Projectパネルで右クリック→Import Package→Character Controller)。
そして実行ボタンを押すと、いま作ったばかりの地形の中を、3Dのキャラクターが動き回るのだ。先ほどの手順で追加したプレーヤーキャラクターは、統合環境に初めから入っている出来合いのアセットで、プレーヤー操作とカメラ制御に関するスクリプトがあらかじめ関連付けられているので、1行もプログラムすることなく、このようにインタラクティブなものが作れるのだ。
そしてこれをひな形にして、自分が「こう動いてほしい」と思うように各オブジェクトの詳細を作り込んでいくのが、Unityでのゲーム制作の基本スタイルだ。
ただテクスチャーや3Dモデル、サウンドデータなどのアートアセットはUnityの中でつくることができないので、そこは他のツールを使うことになる。とはいえ他のツールでつくったアセットをプロジェクトパネルにドロップすれば、即座にUnity内で使えるようになるので、簡単なものをつくるのであればとても手軽だ。
点光源を追加して、地面がよく見えるようにする。これだけでちょっと雰囲気が出てくるから面白い。光の強さは右のInspectorパネルで操作できる |
いくつか立方体を配置して地形っぽいものを作ってから、Projectパネルを右クリックして標準アセットのCharacter Controllerをインポート |
インポートしたChracter Controllerの中にある「3rd Person Controller」の“プレハブ(Prefab)”をシーン内にドラッグ&ドロップして配置。そして実行ボタンを押すと、動いた! |
■ そして筆者もゲームをつくった
つくった! |
Unityでのゲーム制作作業の入り口は本当に上で紹介したような感じで、まずはシーンに出来合いのオブジェクトを配置して、なんとなく作りたいもののイメージに近づけていくところからはじまる。
そして筆者は、以前より「DOOM」っぽい平面上で展開する3Dアクションシューティングを作ってみたいと思っていたので、YouTubeなどに多数転がっているUnityのチュートリアルビデオを見ては寝るという日々をしばらく送ったあと、実際に作ってみることにした。
3Dモデリングはできないので、登場するキャラクターは立方体である。立方体を操作して、敵の攻撃を避けながら弾を撃つ!敵を倒す!という頭の中のイメージをUnityの中で再現するべく、製作開始したのが、この「Angry Cube」だ。iPhone界隈で人気の有名なゲームにタイトルが似ている気がするが、そこはご愛敬と言うことで。
操作方法は、“EDSF”で移動(突っ込まれる前に突っ込んでおくと佐藤カフジワールドに“WSAD”操作は存在しない)。マウスで旋回、クリックで射撃。赤い敵を数匹撃破するとデカイ敵が出て、それを倒すと体力回復アイテムが出現する。スコアが伸びるほどにどんどんキツくなる。1万点超えたらゲーマー認定。右クリックで Go Fullscreenを選ぶとフルスクリーンでもプレイできる。
Unity内からアクセスできるAsset Store。他の開発者がつくった様々なコンポーネントが無料・有料で配布されている |
制作期間は正味3日ほど。1日目でプレーヤーの動きと弾を発射する部分を作り、2日目に敵の動きを作り、3日目にプレーヤーや敵が撃破されたら再出現するなどゲーム進行に関わる部分を作り、ついでにタイトル画面を作って完成。
いちおうVer 1.0が完成したあと、友人にプレイしてもらうなどしてフィードバックをもらい、ゲーム内容の調整にプラス1日くらいを要しているが、それを入れても4日である。こんなに簡単にゲームが作れるとは本人がビックリである。
以下にプロジェクトファイルのダウンロードリンクを示す。Assets/ScenesにあるシーンファイルをUnityで読み込んで、自由に触ってみてほしい。
Angry Cube プロジェクトファイル一式(ZIP形式、2.7MB)
ちなみに、立方体のシェーディングにはUnity内のWindows->Asset Storeからアクセスできる「Unity Asset Store」の無料コンポーネント「Gem Shader」を使っている。そのせいで自前のテクスチャーが用なしになってしまった。
いちおう、自前テクスチャーによる「ダメージ程度に応じてボロボロのテクスチャーに切り替え」という制御がまだ入っているので、Inspector内でプレーヤーや敵のマテリアル“mat_player”のシェーディングを“Diffuse”にして、アセットに含まれるテクスチャー“Textures/player”を適用すれば、また違った表現が味わえるようになっている。
ちょっと前のバージョンのスクリーンショット。ダメージ程度に応じてテクスチャーを切り替えるようにしていたが、Asset Storeで見かけたGem Shaderがキレイだったので、掲載版では違う表現になっている |
■ 今回作ったゲームのポイント
このゲームを「具体的にどう作ったか?」、という部分の細かい話は、今回はあまり深入りしない。丁寧に説明するとおそらく連載5回分くらいの質量になってしまうからだ。ありていに言うと、わからない部分はググりまくって(Google検索を使って)解決した、というのが実態だ。Unityはユーザー数が非常に多いので、わからないことが出てきてもたいていのことは、ネット上に合致する情報が転がっている。
特徴について述べるなら、今回はプレーヤーや敵の動きそのものに非常にこだわったので、移動関係のルーチンはスクリプトでほぼ自作してある。Unityに含まれる出来合いのスクリプトアセットは全然使用していない。そのためコード量が結構増えて、全部で500行ほどのC#コードを書くことになった。もしかしたらもっと楽ができたかもしれない。
UnityではC#よりも簡単なJava Scriptでもスクリプトを書くことができるし、Java Scriptで書けばコード量は2/3くらいになる。なのに筆者が今回ほとんどC#を使ったのは、好みの問題だと思っていただいて構わない。昔、ゲーム開発者だったころにC++を嫌になるほど経験していたので、それに近いC#が個人的に扱いやすかったのだ……。
それにしても、Unityを使えば「絵を出す」とか、「オブジェクトを動かす」とか、「当たり判定をする」といった込み入った部分を全部エンジンまかせにできるので、本当に楽だ。絵については基本、カメラの動きさえうまく制御すればいいし、動きや当たり判定は、Unityエンジンに備え付けられたPhysX物理エンジンの剛体(Rigidbody)処理に頼れば、ほぼ自動だ。
そのおかげで自分がこだわる部分に集中して作ることができるし、どうしてもできないことに直面して、「もう無理だ」と気持ちが折れてしまうようなことも今回の範囲ではなかった。あまりメンタルの強くない筆者でも一応ゲームを完成できたのは、ひとえに、このラクチンさのおかげだ。
そんなラクチンさの中で、最も大事なのは、自分がどんなゲームを作りたいかというイメージを、明確に持っておくことだろう。今回はそれができたので、最初から最後まで一貫したコンセプトで制作をすすめることができた。ザクザクとイメージ通りのゲームができていくのは、とても楽しい。
【コード例1:カメラワーク】 |
---|
メインカメラオブジェクトに割り当てたコード。プレーヤーの後方上部に位置して、プレーヤーの少し前方を見るようにしている。動きに若干のディレイを入れるために計算がややこしくなっているが、それでも10行そこそこ。 |
【コード例2:プレーヤーのうごき】 |
---|
意図通りの動きにこだわったせいで全部コードを書くことになったが、基本の動きは物理エンジンに任せてある。上から、空中にあったら重力加速度を余分に追加(ジャンプの動きをクイックに)、マウス操作に応じて回転、軸の入力に応じて移動、ボタン押したらジャンプ、射撃という流れになっている |
【コード例3:敵のAI】 |
---|
敵のAIは「考えるパート」、「動くパート」にわかれていて、考えるパートは1秒に数回だけ処理するようにした。これで人間っぽい「にぶさ」が簡単に実現できた。プレーヤーの未来位置を狙って撃つ、という処理も、最後に「認識した」位置・速度に基づくようにしているので、細かく動くと狙いが大雑把になる |
■ 「Angry Cube」を作って感じたこと
今回つくったゲームは、ほとんど当初のイメージ通りに仕上がって個人的には大満足だ。しかし、制作をすすめる中で、ゲーム開発にまつわるアレコレを感じることもあった。
例えば、今回つくったゲームのマウス感度は制作に使った環境に合わせてあるので、プレーヤーの環境によって旋回速度が早すぎたり遅すぎたり、マチマチになる。なかには、そのせいでこのゲームをうまくプレイできない人もいるだろう。それは十分想像できるので、きちんとマウス感度調整画面でもつけておくべきところだが、ゲーム作りそのものからは外れた作業になるので今回は見送った。
みなさんがお感じの通り、マウス感度設定に限らず、ゲームがユーザーごとの違いを吸収できるようにつくるのが「プロの仕事」というものだ。しかしそれが、ゲームそのものをつくることと同じくらい大変な作業になることもある。実際にゲームを作ってみて改めて痛感したが、プロの開発者はそういう面倒くさい作業も丁寧に仕上げるからこそプロなのだ。プロのゲーム開発者を今更ながらにリスペクトすることしきりである。
そんな思いも抱きつつ、思い描いたゲームがおよそ3日で形になったのは、自分でも驚くような経験だった。今回掲載したバージョンは、そこに+1日くらいのチマチマした調整を加えたバージョンだが、それなりに遊べるものになっているのではないだろうか?
Unityは本当に生産性が高い。特にタイトル画面は、実作業1時間ほどで完成してしまったほど。このゲームを作っている間、常に、自分が思い描いたものをほとんど直接、ザクザクと作り込める感触があった。今回の作業でUnityを使った開発作業はだいぶ慣れてきて次は3倍早くできそうなので、FPS練習ソフトでもつくろうかなと思ったりしている。
もちろん、個々の部分でどういう実現の手段をとるかという部分で時間がかかることもあった。例えば、描画オブジェクトを半透明にするには? おおむね、アルファ値をいじればいいいんだろうと予想はつくのだが、どのプロパティがそれなのかわからない。ネットで検索して、オブジェクトのrenderer.material.color というプロパティを弄ればいいという情報にたどり着く。
そんな塩梅で、Unityを使用しているユーザーが大変多いおかげで、たいていのことはネット上でハウツー情報を見つけることができる。これが、Unityの真に強力な部分だと思う。数十万人が使うゲーム開発環境なんて、他にないのだから。わからないことがあったら、まずググれ!
■これならゲーマーでもゲームが作れるのでは?
筆者はゲーム開発の経験がある程度あったおかげで、勉強期間を入れても10日ほどで1本のゲームをつくることができた。ゲーム開発の経験のない人がUnityでのゲーム開発をひととおり学ぶには、おそらく1カ月か、2カ月はかかるかもしれない。
だいたい、MMORPGを1本、中堅キャラになるまでやる感じの労力だろうか。労力としてはそれなりだが、いちど覚えれば次はもっと簡単に、もっと良いものが作れるようになる。従来、1本ゲームを作れるようになるまで何年かかかるかわからない時代だったことを考えると、恐ろしいほどゲーム制作が簡単になったと感じる。
特にゲーマーであれば、ゲームとは何ぞや?ということ、ゲームの面白い部分、力を入れるべき部分とは? といった部分は、すでに多くの人が本能として持っていることだろう。やりたいゲームのイメージも、フワフワッと湧いてくるに違いない。
そういった精神的な準備があれば、Unityを使ったゲームの制作を簡単に趣味のレベルに持ち込むことができるはず。ゲームをよく知るゲーマーが、思い描いたゲームを作る。それが当たり前になれば、世に出るゲーム製品の質も、これまで以上に良いものになっていきそうだ。
ぜひみなさんも、挑戦してみてはいかが?
(2011年 8月 12日)