この記事について
Unity完全初心者が、入門書片手に何かつくってみたり、みなかったり、ゾンビがでてきたりします。
Introduction
はじめに神は天と地とを創造された。 地は形なく、むなしく、やみが淵のおもてにあり、神の霊が水のおもてをおおっていた。
神は「光あれ」と言われた。すると光があった。 神はその光を見て、良しとされた。神はその光とやみとを分けられた。神は光を昼と名づけ、やみを夜と名づけられた。夕となり、また朝となった。
第一日である。(旧約聖書 創世記 第1章より抜粋)
つまり、Unityである。
#Unityとは
Unity(別名:Unity3D)とは、統合開発環境を内蔵し、複数のプラットホームに対応するゲームエンジンである。ユニティ・テクノロジーズ(英語版)が開発した。日本法人はユニティテクノロジーズジャパン合同会社。ウェブプラグイン、デスクトッププラットフォーム、ゲーム機、携帯機器向けのコンピュータゲームを開発するために用いられ、100万人以上の開発者が利用している。Unityは主にモバイルやブラウザゲーム製作に使用されるが、コンソールゲーム機およびPCにゲームをインストールすることもできる。このゲームエンジン自体はC言語/C++で書かれているが、スクリプト言語としてC#、UnityScript (JavaScript)、Booの3種類のプログラミング言語に対応している。2005年にOS Xに対応したゲーム開発ツールとして誕生してから、今日ではマルチプラットフォームに対応したゲームエンジンにまで成長した。(Wikipediaより抜粋)
要するに、ゲーム開発エンジンで、天地創造ごっこができる。
#天地創造3分クッキング
新規でスタートすると下のような画面が現れる。宇宙創成の瞬間である。無限の空間に存在しているのは、ただカメラと光源のみ。
これでは寂しい。虚無の空間をただ眺めるだけのゲームだ。何かつくってみよう。
万物の根源は立方体である。立方体(Cube)を作ってみよう。
Unityでは、このようにCubeをはじめとする基本的な素材を組み合わせてゲームのフィールドを作っていく。
それでは、虚無の宇宙空間に地表を作ってみよう。Terrainという素材を使うのがいいらしい。
母なる大地の誕生である。ちなみに、白い部分が地表で、外側は虚無の空間が無限に広がっている。地表から落っこちるといつまでも落下し続けるので気を付けよう。
さすがに殺風景なので、草でも植えてみよう。テクスチャーを貼ればいいが、自分で作るのが面倒なので【参考文献】についていたサンプルを借用。
芝生っぽい感じになった。ついでに、マウスでぐりぐりやって山を作る。
キモイ | いい感じ |
---|---|
うまくやらないと、キモイ感じ(左)になってしまうので注意。とりあえず、地上が完成(右)。地球は丸くなかった。 |
人類の夜明け
人とか、建物とかは自作しなくても、Asset Storeというところから入手できる。無料のものもいろいろそろっている。
倉庫とマッチョをダウンロードしみた。
倉庫 | マッチョ |
---|---|
マッチョを追加したら、エラーが止まらなくなった。仕方がないので、最初からやり直し。宇宙の終焉である。
ボールの誕生
マッチョがいない世界を作り直した。倉庫しかないので、ボールでも作ってみよう。ボールは3DオブジェクトのSphereを選択する。
しかし、このままでは、重さも当たり判定もないボールのゴーストでしかない。属性にPhysics Rigidbodyから摩擦・反発・重力落下などを設定してやる。すると、普通の物体みたいに扱えるようになる。
ここで、ボールを投げるだけの単純なゲームを作ってみる。マウスでクリックした方向にボールを飛ばすだけの簡単なお仕事だ。
ゲーム内でのオブジェクトの動きはC#かJava Scriptで記述する。参考文献のサンプルコードをまるパクりして下のようにしてみた。
#pragma strict
public var prefab : GameObject;
public var power : float;
function Update () {
if(Input.GetMouseButtonDown(0))
{
var bullet = LoadBullet();
var ray : Ray = Camera.main.ScreenPointToRay(Input.mousePosition);
var dir : Vector3 = ray.direction.normalized;
bullet.GetComponent.<Rigidbody>().velocity = dir * power;
}
}
function LoadBullet() : GameObject{
var bullet = GameObject.Instantiate(prefab)as GameObject;
bullet.transform.parent = transform;
bullet.transform.localPosition = Vector3.zero;
return bullet;
}
実際に、投げてみる。
うまくいった模様。宇宙にボールが誕生した瞬間である。
ゾンビ製造器
マッチョがうまくいかなかったので、ゾンビで代用。ゾンビを無限発生させてみる。
ゾンビをダウンロードして、Rigidbodyを設定。
ゾンビが湧き出してくるようにスクリプトを記述。このスクリプトも【参考文献】のサンプルコードを流用。
もとは、ひよこをつくるスクリプトだったので変数名にhiyokoが残っている。ご察しの通り、今はhiyokoとはゾンビのことである。
#pragma strict
public var obj : GameObject;
public var interval : float = 3;
private var time : float;
function Start () {
}
function Update () {
time += Time.deltaTime;
if(time >= interval)
{
time = 0;
var hiyoko : GameObject = Instantiate(obj)as GameObject;
hiyoko.transform.localPosition = Vector3(
Random.Range(40.0, 60.0) ,
Random.Range(1.0, 10.0) ,
Random.Range(50.0, 70.0));
}
}
スクリプトを動かしてみる。
うまくいった。山のあたりからゾンビが湧き出してくる。
ついでに、ゾンビがカメラに向かってくるように、スクリプトにゾンビの動きを記述。
#pragma strict
public var power : float = 8.0;
private var target : GameObject;
function Start () {
target = GameObject.FindGameObjectWithTag("DeathZone");
}
function FixedUpdate() {
var direction : Vector3 = target.transform.position - transform.position;
GetComponent.<Rigidbody>().AddForce(direction.normalized * power);
transform.LookAt(direction);
}
動かしてみる。
何故か横移動だけど、とりあえず動いた。あと、足が地面にめり込んでる。
天地創造 OF THE DEAD
ゾンビが集まってくるとうざいのでボールをぶつけて追っ払うゲームにしてみた。
まぁ、ほっといてもゾンビは地表から落っこちて勝手に消えていきますけど。
とくにゲームオーバーとかないので、ただひたすらゾンビにボールをぶつけるだけ。
プレイ動画(1ヶ月くらいで消えます)
動画ではかくかくですが、実物はもっと滑らかです。
~おしまい
参考文献
Unity5入門 最新開発環境による簡単3D&2Dゲーム制作
荒川 巧也 (著), 浅野 祐一 (著)、SBクリエイティブ
*)この記事のスクリプトは、この本のサンプルより借用