ゲームを作りたいけれどプログラミング、3DCG作成等何もやったことがないし、
ゲームを作りたいけれど何をどうすれば作れるようになるのかわからないという方の為に、ゲームを作る時に何が必要なのかを書いていきたいと思います。
基本的にはUnity(ゲームを作るツール)で3Dゲームを作成するという事で話が進みますが、他のツールや2Dゲームを作る時でも参考になると思います。
なぜこのような記事を書こうと思ったかと言いますと、自分自身が3Dゲームを作ろう、Unityを使おう、と思った時に何が必要なのか?Unityでは何が出来るのか?がわからなかったからです。
あらかじめ言っておきますが、わたくし個人の見解であり、専門家が見るとそれ違うじゃん!という事もあると思います。
ゲーム作りに必要な物
ゲームを開発する上で必要になるものを挙げていきましょう。
ゲーム開発ツール
ゲームを作る時に必要なものは、まずゲーム開発を効率良くする為のツールです。
システム開発等で使用する言語、例えばJavaを使用してゲームを作成する事ももちろん出来ますが、1からゲームを開発しようと思うとゲーム開発以外の要素の勉強も多く必要になり、挫折する可能性が大です。
ゲーム作りが目的ではなく、プログラミングの勉強が目的ならばそちらの方がいいかもしれませんが、ゲーム開発が目的ならばかなりの遠回りです。
ゲーム開発が目的ならば開発ツールを使用しましょう。
ここで2つ有名な無料で使用出来る2D・3D開発ツールを紹介しましょう!
と言ってもわたくしこの2つしか知りませんが・・・・(^_^;)
Unity
まずはわたくしが使っているUnityです。
Unityの公式サイトでUnityの使い方(初心者から上級者用まで)が文章や動画で紹介されていたり、書籍も多く販売されている為、初心者が始めるには非常に便利なツールです。
2D・3Dゲームが開発出来ます。
Unreal Engine
次はUnreal Engineです。
Unreal Engineも有名なツールですね。
公式サイトで使い方が文章や動画で紹介されていたり、書籍も発売されています。
2D・3Dゲームが開発出来ます。
UnityとUnreal Engineどちらがいいの?
わたくし自身は最初にUnityと出会ってしまった為、Unreal Engineは触った事がありません。
日本語の書籍の多さや、当ブログをご覧頂く方はUnityがいいかもしれません(完全な自己中おすすめですな・・・)。
Unityの場合は年収入が10万$(アメリカドル)以内の場合は無料で使用出来ます。
Unreal Engineの場合は、販売する時に限って5%のロイヤリティを払う必要がありますが、使用は無料みたいですね。
どちらも2017年01月06日の情報なので、現時点での情報は公式サイトを見てください。
開発ツールでは何が出来るの?
Unreal Engineは使った事がないのでわかりませんが・・・、Unityではゲームで使う材料(グラフィック、プログラム、音声等)を組み合わせてゲームの舞台を作ります。
それぞれの材料は、Unity以外のソフトで作成した物を使い、それをUnityに取り込んで使うという事ですね。
Unity自身でも基本のオブジェクト図形(四角柱や球など)を組み合わせて、テクスチャ(模様)を貼り、建物を作成する事は出来ますが、複雑な3Dグラフィック等は専用の3DCG作成ソフトで作成し、Unityに取り込んで使用します。
Unity2018から標準搭載されるProBuilderを使うとUnity内で3DCGの作成もすることが出来ます(Unity5.6バージョン以降で使用は可能)
キャラクターを動かす為のプログラム等は、Unityに搭載されているMonoDevelopというスクリプトエディター(外部のエディターに切り替える事も可能)を使い作成していきます。
Unity2018から?は標準のスクリプトエディターがVisual Studioになっております。
Unity等のゲーム開発ツールを使うと便利なのが、キャラクターが床の上を移動する時にキャラクターが床の上と接触している、等の当たり判定をしないといけませんが、
この当たり判定をプログラミングしようと思ったら、複雑な物理計算が必要になります。
これを考えると挫折しますよね?
わたくしは挫折します・・・・(+_+)
そういった当たり判定やキャラクターの移動等の機能は、標準でUnityに搭載されているので、ゲーム開発で一番ネックになるであろう部分は作る必要がありません。
また、キャラクターを歩きから走りのアニメーションに変える場合は、Unityのアニメーターの機能を使い、
歩きから走りのアニメーションへの切り替わりを滑らかにすることも出来ます。
通常であれば、歩いている状態から走る状態のアニメーションにパッと切り替えると、一気にアニメーションが変わってしまいますが、滑らかに遷移するように調整する事が出来ます。
あるタイミングでアニメーションを別のものに遷移させようと思った時も、スクリプトから簡単に制御出来たりとUnity側で連携させる事が出来ます。
この後、紹介するグラフィック、アニメーション、音声、スクリプトを作成するにはそれなりに勉強しないと作成する事は難しいですが、
そんなの無理だわぁ!という方の為にUnityではアセットストアという仕組みがあり、
アセットストアで無料、有料でグラフィック、アニメーション、音声、スクリプト等をダウンロードする事が出来ます。
自分にはこの分野は無理だ!と思ったらアセットストアで素材をダウンロードしゲーム開発をする事も出来ます。
このアセットストアは非常に便利ですね!
わたくし自身はスクリプトしか出来ない(アニメーションはほんのちょびっと独学しました)のでこういったサービスがあるのは非常に助かります。
またUnityではスタンドアロン(パソコンにダウンロードして単体で動作するアプリケーション)だったりブラウザゲーム、スマートフォン向けゲーム等、様々なプラットフォームにファイルを出力出来ます。
プラットフォームに合わせたプログラミングをほとんどする必要がなく、ファイル出力で出力形式を選択出来ちゃいます。
これってかなりすごいですね!
最後完全にUnityの話になったな・・・・(ーー;)
グラフィック、アニメーション
ゲームを開発する上で重要になるのがグラフィックですね。
2Dグラフィック・アニメーション
2Dの場合は平面な絵を使います。
Windowsパソコンならペイントのソフトで描けるあれですね。
2Dのアニメーションを作成する場合は、パラパラ漫画やアニメのように一枚一枚の絵を描き、それを一コマ一コマ表示して動いているように見せて実現します。
その為、簡易キャラクターならばいいですが、リアルで複雑なキャラクターを描いた時にアニメーションをさせようと思ったら、膨大な数の静止画を描く必要があります。
Unityでは2Dゲームも作成する事が出来ますが、アニメーションの一コマ一コマをUnityに取り込み、それを順番に再生させアニメーションを作ることが出来ます。
(コマを一つの画像に集めて取り込み、Unity側で分割して使用する事も出来るみたいです)。
つまり、元の静止画は別のお絵かきソフト等で作成しておき、それをUnityに取り込んでアニメーションを作成するという事になります。
3Dグラフィック・アニメーション
3Dグラフィックは専用のソフトを使用して作成します。
Unity2018からはProBuilderを使うとUnity内で3DCGの作成が可能です。
3Dグラフィックを作成するには、かなり勉強する必要がありますね・・・・。
無料で使える3DCG作成ソフトを紹介しましょう。
blender
わたくしも使っているblenderです。
3Dモデルの作成やアニメーションの作成をする事が出来ます。
この後に紹介するMakeHumanで作成した3Dモデルをblenderに取り込み、blenderでアニメーションを作成する事も出来ます。
わたくしのおすすめのBlenderの本は
を参照してください。
MakeHuman
次は、簡単な設定だけで3D人間キャラクターモデルを作成する事が出来るMakeHumanです。
1から3Dの人間キャラクターを作成するのはかなり大変です。
ですが、このMakeHumanを使用すると体型等の設定をするだけで、3Dの人間キャラクターモデルを作成出来てしまいます!
自分では3Dキャラクターを作れない人が、キャラクターを作成するのに非常に便利ですね。
紹介したのはblenderとMakeHumanだけですが、他の3DCG作成ソフトもあるので使いやすいものを探すといいと思います。
ですが無料となると結構制限はされてしまうかも?
アニメーションはどうやって作るの?
3Dキャラクターモデルを作成したら、そのキャラクターにアニメーションを付けたい事があります。
3Dモデルはキャラクターのモデルの見た目を作っていますが、それだけではアニメーションを作成出来ません。
アニメーションをさせるには、キャラクターにボーン(骨)を取り付けます。
↑がモデルにボーンを取り付けた画像です。
リアルな世界の人間と同じですね、3Dモデルにも骨を付けてあげてその骨を動かしてアニメーションを作成します。
ボーンをキャラクターに取り付けただけでは、キャラクターとの関連付けがされていないので、どこのボーンを動かしたらどこのメッシュ(頂点、線、面で構成される部分、人間の場合は皮膚や服の部分)部分が動くのかがわかりません。
その為、ボーンにはどこのメッシュ部分が一緒に動くのか?というウエイトを設定していく必要があります。
↑のように選択したボーンを動かした時にどのメッシュがどの程度動くかの色分けされています。
自動でウエイトを設定する他に自分でウエイトを調整していく事も出来ます。
この設定が終わったら、タイムライン(時間経過)でボーンを動かしアニメーションを作成していきます。
2Dのアニメーションはコマを作成していき、その違いでアニメーションになりますが、
3Dの場合、コマ間のアニメーションを自動補間して作成してくれるので非常に便利です。
例えば、人が直立状態から目の前に右手を出すアニメーションを作成する場合、右手を下に下げた状態と右手を前に出した状態の2コマを作成します。
2Dの場合は、この2コマの間は右手が下から目の前へと段々と上がっていく状態を作らなくてはいけませんが(Unityのアセットを使うと2Dのキャラクターにボーンを取り付け、アニメーションの作成をすることが出来るみたいです)、3Dの場合は勝手にその間を補間して作成してくれます。
なので、3Dモデルにボーンの設定がしてあれば、比較的容易にアニメーションの作成が出来ます(あくまで比較的容易)。
アニメーションの作成方法については
で記事を書いているので参考にしてください。
↑の記事では、BlenderのプラグインであるRigifyを取り付けてアニメーションを作成しますが、ボーンを動かしてアニメーションを作成する事も出来ます。
また、Unityではアニメーションを制御するAnimatorControllerと似たAnimationという機能がありアニメーションを作成出来そうですが、
このUnityのAnimation機能は2DのアニメーションやUI(ボタン等)のアニメーションを作成する時に使います。
キャラクターの歩きや走り等のアニメーションは、Blender等のソフトを使って作成します。
音声
ゲームではグラフィックと共に重要なのが音声です。
これを作成するとなるとやはり勉強が必要です。
音声自体は相当こだわりがなければ、他の人が作ったものをお借りした方が早いでしょう・・・・。
Unityでは音声ファイルを取り込み、音声の設定を施したりスクリプトから音声の再生を開始、停止等をする事が出来ます。
元の音声は別に用意しておき、それをUnityに取り込んで使用するという事ですね。
わたくし自身は音声を作りたいという願望がない為にこの項目は簡素です・・・(^_^;)
スクリプト
Unityでは、Unityに搭載されているスクリプトエディターを使ってゲームで使用するスクリプトを作成していきます。
Unityで使用出来るスクリプトはC#とJava風のJavaScriptです(現在はC#のみになっています)。
JavaとJavaScriptは名前が似てますが別物です。
当ブログではJavaScriptを使用してスクリプトを作っています。
途中からC#でスクリプトを組むようにしました。
C#やJavaの勉強をした事がある方は、Unityのスクリプトリファレンスを見ながらスクリプトを作成する事が出来ると思います。
プログラミングをした事がない方
プログラミングはやりたくないという人は、プログラミングが出来る人を仲間に入れて、自分は3DCGを担当したりシナリオを担当したりして、担当を作り複数人でゲーム制作をするというのもいいかもしれません。
まったくプログラミングをした事がないけど、これから学習したい!という方はC#やJava、Unityの書籍で勉強していくのがいいと思います。
書籍をおすすめする理由は、広い範囲を学習する事が出来るからです。
ネットでわからない部分を調べるのは便利ですが、その部分だけを見ても解らない事もあります。
また全体を学習するうちに、前にわからなかった部分がなんとなく理解出来る事もあります。
Unityの書籍ではプログラミングの仕方の解説は少ないので、深く理解したい方はC#やJavaの書籍を買う事をお勧めします。
Javaの本を買うなら個人的に
がわかりやすかったです。
最初に買う本は簡単過ぎても難しすぎても挫折する可能性があるので、わかりやすく丁度良い書籍を紹介しました。
UnityではJavaではなくJavaScriptですが、Unityで使うJavaScriptはJava風のJavaScriptなのでJavaScriptの本を買って勉強するよりも
Javaの本を買って勉強した方がいいです。
現在ではUnityのJavaScriptは廃止の予定となっている為、これからC#とJavaScriptのどちらにしようか悩んでいる方はC#を選択した方が良いでしょう。
Unityで作成するスクリプトは、情報処理技術者試験等で出てくるアルゴリズム問題のような難しい処理は必要なく(処理速度等を考慮すると必要だとは思いますが)、
基本的なプログラミングの知識とプログラムの組み方を知っておくと良いと思います。
もちろん本格的なゲームを作成しようと思うと難しい処理も必要になってきますが・・・・。
数学・物理が苦手!プログラミングという言葉だけで敬遠してしまう!アルファベットばかりで嫌になる!ぼくちゃん文系だから!
という方も問題ないと思います。
それなりの論理的な思考は必要ですが、中学校を普通に卒業してきた方ならもちろん、小学生、中学生も大丈夫だと思います(学校の勉強の方がいろいろ大変な気がする・・・)。
もちろん、得手不得手というのがありますので、全員が出来ます!とは断定出来ませんが、パズルだと思ってやるのもいいかもしれません。
自分でエラーを解消し、うまく動作した時の出来たぁ!という喜びを味わってみてください。
偉そうに言ってますが、わたくしも(唯一出来るであろう)プログラミングは得意ではありません・・・・(^_^;)
まったく初めてのプログラミングの場合は、なかなか覚えられず進まない事もありますが、本に書いてあるプログラムを実際に打ち込んで動作させていけば
だんだんと覚えていくと思います。
本を一回通して読み、プログラムを実行した後にまた2回目以降読んでいくと、最初にわからなかったところがわかってきたりします。
プログラミングをした事がある方
プログラミングをした事がある方はUnityの書籍がお勧めです。
Unityを学習していく事で、自分でゲームで使う機能を作成していくことが出来ると思います。
わたくしがおすすめするUnityの本は
の記事で紹介しているので参考にしてください。
本は書店で必ず中身を見て、自分に合うかどうかを確認してから購入した方がいいです。
Unityで3Dキャラクターを扱う
Unityで3Dキャラクターやスクリプトの使い方について勉強しましょう。
Unityの3Dキャラクター
Unityで使用する3Dキャラクターは、あくまでモデルであり見た目を表現しているにすぎません。
つまり、3Dキャラクター自体で地面との辺り判定をしません。
キャラクターが他の3Dオブジェクトと当たったかどうか?を判定する為に使用するのがコライダ(衝突装置)です。
コライダはUnityの機能で、キャラクターに応じて形状を選択し当たり判定の範囲(大きさ)を指定する事が出来ます。
このコライダは物理的に当たるようにするだけでなく、ただの範囲(他のキャラクターが侵入したか判定する)としても使用します。
Unityでキャラクターを動かすには
があります。
CharacterControllerを使った移動
CharacterControllerは、キャラクターを移動させる時に便利なUnityの移動機能を搭載したコンポーネント(構成要素)で、コライダを含みます。
コンポーネントはひとつの機能という感じで、作成したスクリプトもコンポーネントになります。
地面に接地しているかどうか?のプロパティ(属性)を持っていたり、キャラクターを移動させる為の関数も持っているので便利です。
CharacterControllerを使った移動は
で解説しているので参照してください。
Rigidbodyとコライダを使った移動
Rigidbodyとコライダを使った移動では、コライダで当たり判定、Rigidbodyでキャラクターを動かします。
Rigidbodyは物理的な特性を持ったコンポーネントで、CharacterControllerとは少し違ったスクリプトを組んでキャラクターを動かす必要があります。
Rigidbody自体は地面と設置しているかどうかのプロパティ(属性)を持っていないので、スクリプトで地面と設置しているかどうかの判断する必要があります。
キャラクターと他の物体との衝突を厳密にしたい場合は、こちらの方がいいかもしれません。
RigidBodyとコライダを使った移動は
で解説しているので参照してください。
3Dキャラクターのアニメーション制御
3Dキャラクターのアニメーションは、UnityのAnimatorController(アニメーターコントローラー)を使って制御します。
AnimatorControllerではアニメーションの遷移と条件を記述しておき、スクリプトからAnimatorControllerのパラメータを操作しアニメーションの遷移をさせます。
AnimatorControllerでは、細かい条件でアニメーションの遷移を指定する事が出来ます。
前を向いて歩いている状態から右斜め前を向く時は、体を少しだけ傾けて方向を変え、前から真横を向く時は大きく傾けさせたいといった時も、設定を細かく指定して遷移させる事が出来ます。
AnimatorControllerについては
で解説しています。
Unityでここを押さえれば応用が利くようになる
Unityでゲームを作成する時に、いくつかの機能を押さえれば、自分で応用して作成する事が出来るようになると思います。
もちろん他の要素も出来ないとゲームは出来ませんのであしからず・・・・。
コライダ
キャラクターの辺り判定部分や、他のゲームオブジェクトを検知する時に使用するのがコライダです。
↑の緑色の枠がコライダで、キャラクターの辺り判定に使っています。
主人公キャラクターに取り付けて、他の敵との衝突が起きるようにしたり、敵に取り付け主人公が近くにいる事を調べる範囲としてコライダを使用します。
CharacterControllerコンポーネント
主人公キャラクターを作ったらCharacterControllerコンポーネントを取りつけ、主人公を動かすスクリプトを取りつければすぐに主人公が動きます(アニメーションは別)。
後述するアニメーション制御のAnimatorControllerの設定をして、キャラクターを動かすと感動します(こんな簡単に3Dキャラ動かせるんだ!という感じで)。
AnimatorController
すでにさきほど紹介しましたが、AnimatorControllerを使ってキャラクターのアニメーションの遷移を作成すると、スクリプトから遷移させる事が出来ます。
歩きから走りに遷移させたり、攻撃やダメージのアニメーションに遷移させたりと、アニメーションを管理する機能ですね。
キャラクターの体の一部のアニメーションだけ変えたい、という場合もAnimatorControllerとレイヤー機能を組み合わせて実現する事が出来ます。
例えば上半身は銃を撃つアニメーションを使い、下半身は歩いているアニメーションを使うという事が出来るので、
普通に歩いているアニメーション、歩きながら銃を撃つアニメーションを別に作成する必要がありません。
レイ
Unityでは見えない線(レイ)を飛ばして、その先にゲームオブジェクト(キャラクターや建物等)があったかどうかを調べたりすることが出来ます。
↑の赤や青の線がレイを視覚化したものです。
このレイを使ったスクリプトが出来るようになると
等の色々な事を調べる事が出来るようになります。
レイを使いこなせるようになると、作れる機能の幅が広がる事は間違いありません。
ナビゲーション
ナビゲーション機能を使うと、敵の移動する場所を設定し、自動で最適なルートを選んで移動させる事が出来ます。
敵のAIを作ろうと思うと難しい処理が必要ですが、このナビゲーション機能を使うと敵のAIを簡単に実装する事が出来るようになります。
↑の例では黒い床の下側を目的地にしていますが黒い床は進入不可にしており、赤い坂を上ると近道ですが、赤い床は移動のコストを上げている為、回り道をした方が最適なルートになります。
ゲームオブジェクト毎に移動のコストを設定する事が出来るので、デコボコ道はコストがかかる、といった設定をする事も出来ます。
IK
IKを使うと本来のアニメーションを無視して、両手・両足の位置を特定の場所の位置や角度に置く事が出来るようになります。
IKはInverse Kinematicsの略で手足の末端のボーンを動かすとそのボーンと接続されている他のボーンも一緒に動きます(手首のIKを動かすとそれと連動してひじが動く)。
IKの他にFK(Forward Kinematics)というのがあり、こちらはルートのボーンを元に末端のボーンの位置や回転が決まる動かし方です。
例えばキャラクターが物を持って歩いている状態を作りたい時に、物と手の位置がうまく合わないことがあります。
そんな時にIKを使うと、手の位置と角度を物にうまく合わせる事が出来ます。
今回の記事を書いた理由
すでにゲームを作り始めてる人は知っている事ばかりだとは思いますが、まったくゲームを作成する知識がない時は、Unityがゲームを作成するツールである事はわかっても
、Unityで何が出来るのか?というのがわからないと思ったので、Unityと使う素材の繋がりみたいなものを書いてみようと思いました。
わたくし自身がゲームを作りたい!と思った時に知りたかった事で、その時の自分に見せてあげたい記事です(^-^)
早速ゲームを作りたい!と思った方は
の記事から始めてみてください。(^^)/
しかし、今回の記事は
『ゲームを作った事がない人が、ゲームを作り始める為の記事』ではなく『ゲームを作った事がない人が、Unityで3Dゲームを作り始める為の記事』
ですね・・・。
まぁ・・・そこは大目に見てください(._.)