【Unity】1時間で超入門3Dゲームを作ってみる
目次
超入門3Dゲームを作成してみよう♬
ゲームはプレイするより開発してる方が楽しいとしばらく思ってましたが、最近またプレイするのが楽しくなってきたソニックムーブのあまのっちです。
とあるアプリにハマってしまい、まさかの課金初体験をしてしまいました。
本題に入ります。
前回書いたUnityで超入門3Dゲームを作ってみるが思いのほか好評?だったみたいで「GoogleでUnity 入門」と検索すると3~4番目にも出ててちょっとびっくりしてます。
(結構多そうなキーワードなのにね)
それでは久しぶりにUnityで簡単なゲームを作成したいと思います。
目次
最近のUnity
スマホで3Dゲーム開発といえばUnity!ってな風習になりつつある今日このごろですが、そのUnityがなんと「2D向けゲーム開発機能とクラウドサービスを新たに提供、さらには今秋に予定されているUnity 4.3に統合」するみたいですね。
参照:Unity、2D向けゲーム開発機能とクラウドサービスを新たに提供
これはわくわくが止まりません。もうすぐですかね。
2D向けゲーム開発機能とは
Unity 4.3 にインテグレートされる『2D 向けゲーム開発機能』は、従来より使いやすさに定評のあるUnityエディタに対し、本格的な2Dゲームを作るために便利な機能を追加したものです。
追加機能(抜粋)
- 2d ゲームを作成するのに最適化された専用シーンビュー
- スプライトアニメーションを簡単に管理するためのテクスチャ管理機能
- スプライトテクスチャからの当たり判定作成機能
- キー調整のできるタイムシートを含む強化されたアニメーションエディタ
- 2d 描画に特化された専用レンダラー
- 2d 向けに特化された専用物理エンジン「box2d」を搭載
これらの機能を使うことで、3D ゲーム制作で培われてきた Unity エディタの使いやすさとイテレーションのしやすさはそのままに、 2D デベロッパーの方にも今まで以上に直感的に、2D グラフィック制作時のセンスを直接ゲームに落とし込むことが可能となります。
どうやらPro版だけではなく、Freeでもかなりの機能を使用することができるようなので、Unity Proを購入されてない方もリリース後は触ってみましょう!
こんなことを記載しているうちになんとUnity4.3がリリースされました…詳細
1時間で超入門3Dゲームを作ってみる
では本題に入りましょう。
今回の目標はずばり簡単なブロックショットゲームです。
(クリックで拡大します)
下準備
まずは下記の要領で舞台となる部屋を作成します。
•プロジェクトの作成 → Resouceの配置 → Materialの追加
Resouceを配置は画像をドラック&ドロップで行い、Materialの追加は下記の手順で行うことができます。
• [Project Treeで右クリック] – [Create] – [Material]
オブジェクトの配置に関しては前回の記事に記載しているので、分からない方は参考にしてください。
Unityで超入門3Dゲームを作ってみる
上記の作業を行い、以下の画像の様なSceneを作成しましょう♬
(クリックで拡大します)
Cubeを5つ作成し、適切なサイズに設定後に作成したMaterialを適用しています。Material の適用は適用したいObjectにドラッグすればできるので簡単ですね。
次に、壁に当たり判定を付ける為に物理シュミレーションを追加します。 作成したCubeには下記の手順でRigidbodyを選択します。
●[Componet] – [Physics] – [Rigidbody]
これで物理シュミレーションが可能になりました。 実行してみてください。
落下するのがわかると思います。笑 重力が適用されたのです。
これを動かさないようにするために、ObjectのInspectorから「isKinematic」を探してチェックしてください。
落下するBoxのPurehabを作成とScriptの記載
次は先ほど作成した舞台の上部から、定期的に箱を落下させます。 この箱を撃ち落とすのがこのゲームの目的ですので、的を作成するわけですね。
「Commond + Shit + N 」で新しくGameObjectを作成します。 名前をBox Generatorにし、Boxを落下させたい位置に移動させてください。
Purehabの生成
それではPurehabを生成していきます。
同じようなオブジェクトを何回も生成する場合には、この「Purehab」という物を使用します。
Cubeを作成し、名前をBoxとしてください。 いまのBoxにRigidbodyをセットし、今度はisKinematicはそのままにします。
Tagをクリックし、Add Tagとし、「BOX」と記載しておきます。 これはあとで当たり判定に使用します。
(クリックで拡大します)
次にProjectTreeで[Create] – [Purehab]とし、名前をBoxPrehubとします。 先ほど生成した「Box」を「BoxPrehub」にドラッグして完成。
もう使用しないので、Scene上にあるBoxは削除して構いません。 これでBoxの大量生成が簡単にできるようになりました。
Scriptの作成
次にProjectTreeで[Create] – [Script] – [C# Script]をクリックし、名前をBox Generatorとして以下のようにScriptを記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
[sourcecode lang="text"] using UnityEngine; using System.Collections; public class BoxGenerator : MonoBehaviour { <%%KEEPWHITESPACE%%> public float interval = 5.0f; public GameObject boxPrehab = null; <%%KEEPWHITESPACE%%> private bool nextIsRed; private float timer; <%%KEEPWHITESPACE%%> // Use this for initialization void Start () { timer = 0; nextIsRed = true; } <%%KEEPWHITESPACE%%> // Update is called once per frame void Update () { timer -= Time.deltaTime; if (timer &amp;amp;amp;amp;amp;amp;lt; 0.0) { <%%KEEPWHITESPACE%%> float offsX = Random.Range(-8.0f, 8.0f); float offsZ = Random.Range(-4.0f, 4.0f); Vector3 position = transform.position + new Vector3(offsX ,0 ,offsZ); <%%KEEPWHITESPACE%%> Instantiate(boxPrehab,position ,Random.rotation); nextIsRed = !nextIsRed; timer = interval; } } } [/sourcecode] |
このScriptをScene上のBoxGeneratorにアタッチ(ドラッグ)し、InspectorでIntervalには2を入力、Box PrehabにはBoxPrehabをセットします。
(画像のIntervalは5になっていますが2にしてください。)
実行すると定期的にBOXが落下するはずです。
Gunの作成とScriptの記載
ここからはクリックで玉を発射するGunの作成を行います。 以下の2つのScriptを作成します。
1. Gun_To_MainCamera.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
[sourcecode lang="text"] using UnityEngine; using System.Collections; public class Gun_To_MainCamera : MonoBehaviour { <%%KEEPWHITESPACE%%> public GameObject gunPrehab; public float initialVelocity = 20.0f; <%%KEEPWHITESPACE%%> // Use this for initialization void Start () { <%%KEEPWHITESPACE%%> } <%%KEEPWHITESPACE%%> // Update is called once per frame void Update () { <%%KEEPWHITESPACE%%> if (Input.GetButtonDown("Fire1")){ <%%KEEPWHITESPACE%%> GameObject gun = Instantiate(gunPrehab ,transform.position ,transform.rotation) as GameObject; <%%KEEPWHITESPACE%%> Vector3 screenPoint = Input.mousePosition; screenPoint.z = 10.0f; <%%KEEPWHITESPACE%%> Vector3 worldPoint = camera. ScreenToWorldPoint(screenPoint); Vector3 direction = (worldPoint - transform.position).normalized; gun.rigidbody.velocity = direction * initialVelocity; } } } [/sourcecode] |
2.Gun_Bullet.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
[sourcecode lang="text"] using UnityEngine; using System.Collections; public class Gun_ : MonoBehaviour { <%%KEEPWHITESPACE%%> // Use this for initialization void Start () { <%%KEEPWHITESPACE%%> } <%%KEEPWHITESPACE%%> // Update is called once per frame void Update () { <%%KEEPWHITESPACE%%> } <%%KEEPWHITESPACE%%> void OnCollisionEnter (Collision collisionInfo ) { <%%KEEPWHITESPACE%%> // Debug.Log(collisionInfo.gameObject.tag); if (collisionInfo.gameObject.tag == "BOX"){ <%%KEEPWHITESPACE%%> // Boc Destroy Destroy(collisionInfo .gameObject); } // self dstroy Destroy(gameObject); } } [/sourcecode] |
次に新しく発射する玉のPrehabを作成します。Create – Sphere で丸い玉を作成し「Bulled」と命名し、Rigidbodyを追加、BoxPrehabと同じようにPrehabを作成してください。
出来たら
1. Gun_To_MainCameraを「Main Camera」にアタッチ
2.Gun_BulletをBulledPrehabにアタッチ
これで実行してみてください。
問題がなければクリックで玉を発射し、BOXにあたると玉とBOXが消えるはずです。
サンプルゲーム
応用すると簡単なミニゲームを作成できますね。 サンプル
(別途Unity Web Playerのインストールが必要です)
まとめ
いかがでしたでしょうか?
たったこれだけの作業で簡単なBoxシューティングのミニゲームのモックが 出来上がってしまいました。
3Dゲーム開発においてZ軸が加わるだけで非常に取っ付きにくくなりますが、これらは慣れてしまえばなんてことはありません。
2Dゲームにも今後対応していくようなので、アプリ開発者としては一度は触っておきたいですね。