どうもー、小とろです。
最近刺激を求めていろいろなことに挑戦している最中です。
今回はその一つであるUnityを使って2Dゲームを作ってみたので、その内容を書いていこうと思います。
はじめに
この記事は株式会社富士通システムズウェブテクノロジーが企画する
いのべこ夏休みアドベントカレンダー 2020の2日目の記事です。
本記事の掲載内容は私自身の見解であり、所属する組織を代表するものではありません。
※そこまでたいそうなことは書いてないと思うので、気軽にご覧下さい。
Unityとは
一言でいうと、パソコンで誰でも簡単にかつ無料でゲームを作れるゲームキットになります。
2005年頃からゲームを作るのに特化したソフト(ゲームエンジン)として作られていて、
最近ではゲーム業界だけではなく、自動車産業・医療現場、はたまた
宇宙開発にまでUnityを使っていたりと、かなりの進化を広げています。
ちなみに、開発言語は基本的にC#になります。
『参考記事』 unity.com
今回作ったもの
Unityでは、3Dにも対応していますが、
今回は手早く取り掛かれそうな2Dゲームを対象に作ってみました。
準備したこと
とりあえず、これだけあればすぐにゲームが作れるので早速インストールしました。
Unity(Personal)
C#を編集できるエディタ(どっちか)
初回起動
Unityを起動すると、プロジェクト作成画面になるので、
2Dの選択とプロジェクト名を記載して作成しました。
下の画面が出て、準備完了です。
キャラ素材を手に入れる
UnityのAsset Storeという場所から、ゲームで使える素材(Asset)をダウンロードできるので 今回は無料の素材をダウンロードしました。
手順
起動したUnityのメニューバーからWindow > Asset Storeを選択します。
※ネットワーク環境は必須です。
以下の画面がAsset Storeになるので、
ここから素材を探していきます。
カテゴリに2DとFree Assetsを選択します。
これで、無料の2Dゲーム用素材が検索されます。
今回はこの素材を例にゲームを作っていきました。
importボタンでインポートしちゃいます。
インポートが完了すると、Unityの左下にインポートされたフォルダが出てきます。
ちょっと中身を見てみると、キャラの素材があると思います。
これでキャラ素材が手に入りました。
キャラを登場させる
次は、キャラをゲームに登場させます。
順を追って説明していきます。
まず以下の画面から始めます。
狐の素材6つを同時に選択して、ドラッグアンドドロップで配置します。
アニメーションファイルとして保存する必要があるので、名前を決めて保存します。
ここまでできれば、狐のキャラがゲーム画面に登場します!
(この時キャラは拡大しています)
デフォルトだとキャラが小さかったので、キャラのサイズを大きくするようにしました。
左のサイドメニューにキャラオブジェクトがあるので、クリックすると
右のサイドメニューにキャラオブジェクトのステータス情報が出てきます。
Transformと書かれている部分に、現在のキャラの位置(Position)、角度(Rotation)、大きさ(Scale)が定義が表示されます。
大きくするために、大きさ(Scale)をX=7、Y=7にしました。
最後に動作確認をするため、
画面中央上部に再生ボタンをクリック!
キャラが動いて成功です。
もう一度再生ボタンをクリックすると停止します。
キャラを動くようにプログラムする
キャラを登場させることができたので、
次はこのキャラに対して移動プログラムを設定していきました。
まず、キャラがいるフォルダを右クリックしてCreate > C# Scriptをクリック。
名前は「PlayerScript」とします。
そして、PlayerScriptをダブルクリックして、エディタを開くと
下の画面のようなプログラムコードが出てきます。
Unityは基本的にC#なので、中身はほとんどオブジェクト指向型の設計になります。
既にあるメソッドは以下のような処理をしてくれます。
Startメソッド…最初の一回のみ呼ばれる初期化メソッド
Updateメソッド…1フレーム(1/60秒)毎に呼ばれるメソッド
これらのメソッドを使いつつ、キャラを動かすプログラムを書いていきました。
以下のようにキーボードのキーを押された時の処理を書いていますが、
ほとんどの部分はUnityが独自に持つプロパティやメソッドを使っているのがわかると思います。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerScript : MonoBehaviour { Rigidbody2D rb; // Start is called before the first frame update void Start() { rb = GetComponent<Rigidbody2D>(); } // Update is called once per frame void Update() { //Aキー or 左矢印キーを押さえている間 if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) { rb.position += new Vector2(-7.0f, 0.0f) * Time.deltaTime; this.transform.localScale = new Vector3(-7, 7, 1); } //Dキー or 右矢印キーを押さえている間 if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) { rb.position += new Vector2(7.0f, 0.0f) * Time.deltaTime; this.transform.localScale = new Vector3(7, 7, 1); } } }
最終的にこのプログラムは、キャラに対してアタッチ(紐付け)しています。
作ったスクリプトファイルをキャラオブジェクトにドラッグアンドドロップすることでアタッチされます。
最後に、コンポーネントと呼ばれるUnity独自のプログラムをキャラに設定します。
今回当てるコンポーネントは「Rigidbody 2D」です。
・Rigidbody 2D
Rigidbody2Dは、物理挙動を担当するコンポーネントです。
物理エンジンの恩恵を受けられるようになり、重力を簡単にオブジェクトに掛けられたり、力をオブジェクトに加えて動かしたり出来ます。
こちらのブログを見るとイメージがつきやすいかもしれません。
「Rigidbody 2D」は、以下のような方法で設定しています。
ゲームオブジェクト(キャラ)を選択し、
右下のAdd Componentボタンを押します。
小ウィンドで「Rigidbody 2D」を検索して、クリック。
クリックした後、以下のようなものが追加されます。
Gravity Scaleは一旦0(ゼロ)にしておきました。
(1にすると物理演算が働いて、重力がかかったように下に落ちていきます。)
ここまで出来たら再生ボタンを押して、ゲームを起動。
キーボードの「Aキー」、「Dキー」を押すとキャラが移動するようになりました!
まとめ
いかがだったでしょうか?
意外と簡単に作れたのではないでしょうか?
今回はキャラを動かすだけでしたが、もっと工夫することで
ステージを作ったり、敵を倒したり、レベルアップ機能を作ったりなどいろいろできます。
さらには3Dゲームも簡単に作れるので、是非Unityで遊んでみてはどうでしょうか?
Unity初心者が作る2Dゲーム冒険記は、まだまだ続く予定。
次回をお楽しみに。