今日から始めるUnity3Dでゲーム作り、インストールと壁当てゲーム(初速、バウンド、ラケット操作)

思いつきで3Dのゲームを作ってみることにしました。

3DゲームといえばUnityです。
といっても、使ったことないのでネットで勉強しながら記事を書いていきます。

最終的なゲーム構成
ブラウザ、iOS、Androidで動くシンプルな3Dゲーム。

作成日数はこつこつ作って1ヶ月くらい。
目標は1日100円の広告収入です!

Unity3Dをダウンロード&インストール

何はともあれ、Unity3Dをダウンロードしてインストールします。
ちなみにWindowsパソコンとMacbook AirとWhiteにインストールしています。

基本的にノートパソコンでゲーム作りをしようと思います。

ただ両方とも非力なノートパソコンなので、
Unity3Dに耐えられるか微妙なところです。

無理っぽければあきらめてWindowsでゲーム作りしようと思います。

Unity3Dのダウンロードページ
1.2GBあります。
ちなみに現時点のバージョンは4.5.4です。

ダウンロードしたファイルをクリックしてインストールします。

ぐは、Macだと3.47GBの空き容量が必要とのこと。
ぐは、Windowsだと5.3GBの空き容量が必要とのこと。

インストールに20分くらいかかる。。。

インストール完了、とりあえずUnity3Dを起動する。

最初にライセンスを選べという画面が出てきます。
・Activate the existing serial number you received in your invoice
・Activate the free version of Unity
・Activate a free 30-day trial of Unity Pro

Activate the free version of Unityを選んでOKをクリック。

Unityのアカウントを作れという画面が出てきます。
無視します。

無視できませんでした。
Emailとパスワードを入力してアカウントを作成します。

パスワードは8文字以上、大文字1つ以上、小文字1つ以上、数字か特殊文字1つ以上

うざい。。

メールの受け取って、メールに記載されている“Confirm Email”ボタンをクリックする。

Unityにログインする。

質問をいくつか答える。

これでようやくUnity3Dが起動しました。
何かこれだけで疲れちゃった。
休憩しよう、そうしよう!(ヘタレ

Unity3Dのチュートリアルをやってみる

習うよりも慣れろということで、とりあえずUnity3Dのチュートリアル:はじめての Unityでブロック崩しのゲームを作ってみます。

今回はブロックなしにブロック崩しのゲーム、つまりラケットを動かしながらボールを壁に当てるだけのゲームを作ります。次の記事でブロックが登場します。

Unityを起動する。(Windows)

Create New Project

Tutorial_1で作成する、パッケージは空っぽ(保存場所はDropbox内)

File→Save Scene as
TheGameという名前で保存する

とりあえず今のところこんな感じの表示になってます。

チュートリアルと表示が異なるけど気にしない!

シーンパネルの動かし方を知っていると後々便利なんだとか。

シーンパネルの動かし方
マウス右ボタンを押しながらドラッグするとカメラの角度を自由に動かせる。
ホイールでカメラが前進・後退する。
ホイールをクリックしながらドラッグすると上下左右にパンできる。
xyzと書かれた3Dアイコンでもシーンパネルを動かせる。

パーツを配置する

永遠と続く地面があるだけで、まだ何も配置されていません。
ということで壁とラケットとボールとブロックを配置します。

長方形とかボールとかを3Dメッシュと呼ぶそうな。3Dメッシュをゲームオブジェクトと呼んでいて、他にサウンドとか照明とかもゲームオブジェクトなんだとか。

まずは壁を作って枠組みを作ります。

Game Object → Create Other → Cube
立方体がシーンパネルに設置されます。

立方体をクリックして、
Inspectorで位置を全部0にして、ScaleのXを20にする。ScaleのYとZは1。
直方体になる。

HierarchyのCubeを右クリックしてCopyを選択、次に同じ位置で右クリックしてDuplicateを選択。
Cubeが2つになる。

新しく作成されてCubeをクリックしてInspectorのTransformを編集。
Position X:-10 Y:0 Z:15
Scale X:1 Y:1 Z:30

これで左の壁と下の壁が作成できました。
残りの右の壁と上の壁も同じように作ります。

全部終わるとこんな感じになる。

カメラ(ゲームの視点)の位置と方向を調整する
Main CameraをクリックしてInspectorのTransformを編集します。
Position X:0 Y:25 Z:-5
Rotation X:55 Y:0 Z:0
Scale X:1 Y:1 Z:1

照明を設置します。
GameObject → Create Other → Directional Light
Directional LightをクリックしてInspectorのTransformを編集します。
Position X:0 Y:25 Z:-5
Rotation X:55 Y:0 Z:0
Scale X:1 Y:1 Z:1
とりあえず照明はカメラと同じ位置に配置しておきました。

ラケットを配置する。
Game Object → Create Other → Cube
Position X:0 Y:0 Z:5
Rotation X:0 Y:0 Z:0
Scale X:6 Y:1 Z:1

ボールを配置する。
Game Object → Create Other → Sphere
Position X:0 Y:0 Z:5
Rotation X:0 Y:0 Z:0
Scale X:6 Y:1 Z:1

Hierarchyの整理と見やすくなる。
CubeをRacketにして、SphereをBallにして、GameObject→Create Emptyで作った空のオブジェクトをWallsにしてそこに4つの壁をドラッグ&ドロップする。

こんな感じの表示になってる。

初めてのスクリプト

スクリプトって何?
みたいな感じになるけど、どうもオブジェクトの動かし方の決まりみたいなのをスクリプトというのかな?
そんな感じでいいです。動けばいいのです。

ボールに物理特性を与える巻

ボールを動かすためにはRigidbody(剛体)の設定が必要なんだとか。
Ballを指定して、Component → Physics → Rigidbody

Use Gravityのチェックを外す。
Constraintsを開き、Freeze PositionのYにチェックを入れる。
回転する必要もないのでFreeze Rotationの全要素をチェックする。
運動抵抗を与えないようにするためにDragをゼロにする。

これでボールは下に沈まずに、地面の摩擦はゼロで等速で動いて、回転なしでそのまま進む感じになるはず。

ボールに初速を与える巻

プロジェクトパネル上で右クリック、Create → Javascript
Javascriptファイルの名前をBallControllerにしたら、バグってUnityが落ちた。

Unityを再起動する。

BallControllerをダブルクリックしてファイルを編集する。

#pragma strict

var Speed = 20.0;

function Start () {
	rigidbody.AddForce(
	( transform.forward + transform.right ) * Speed,
	ForceMode.VelocityChange );
}

function Update () {

}

深く考えない!

右斜めにボールが動くスクリプトです。
BallControllerをHierarchyのBallにドラッグドロップして関連付けます。

これで実行すると、ボールが右斜めに進んで右側の壁にぶつかって
そのままボールが上に進んで上の壁にぶつかって止まりました。

とりあえず動いてますね。すごいです!

ボールをバウンドさせる巻

プロジェクトパネル上で右クリック、Create → Physic Material
ファイル名をPerfect Bounceにする・・・、バグる。

moving file failedというエラーメッセージが出てくる。
try againをすると何事もなかったかのようになる。

Perfect Bounceをクリック
Bounciness: 1
Friction Combine: Minimum
Bounse Combine: Maximum
残りは全て0

Perfect Bounceをドラッグしてシーンビューの中のBallにドロップする。
すると、Perfect BounceがBallに関連付けられて、跳ね回るようになる。

ラケットを操作する巻

プロジェクトパネル上で右クリック、Create → Javascript
ファイルの名前をRacketControllerにする。

RacketControllerを編集する。

#pragma strict

var Accel = 1000.0;

function Start () {

}

function Update () {
	rigidbody.AddForce(
		transform.right * Input.GetAxisRaw( "Horizontal" ) * Accel,
		ForceMode.Impulse
	);
}

フレームごとにUpdateが呼ばれる。
水平方向に力を加速度を加える。
ForceMode.Impulseにすることでラケットの質量を考慮した動きになるそうな。

RacketControllerをドラッグしてシーンパネルにあるラケットにドロップする。

最後にRigidbodyをラケットに設定する。
シーンパネルのラケットをクリック → Component → Physics → Rigidbody
これでラケットにRigidbodyが設定されます。

ラケットのRigidbodyの値を変更する
Mass: 50
Drag: 30
Angular Drag: 0
Use Gravity: チェックしない
Constraints Freeze Position: Y,Zにチェックする
Constraints Freeze Rotation: 全部チェックする

これでキーボードの矢印でラケットが右左に動くようになりました。

これにて壁当てゲームの作成完了です。
次回はブロックが登場してブロック崩しゲームになります。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください