Unity3Dでのゲーム作り、第2段、ボールを転がしてモノを拾うゲームを作ります。
Unity3Dの日本語のチュートリアルはブロック崩しゲームと2Dシューティングしかありませんが、英語だと他に4つのゲームのチュートリアルがあります。
今回はその4つのうちの1つ、ボール転がしゲームを作っていきます。
1.イントロダクション
Project: Roll-a-Ball Introduction
Unity3Dのチュートリアルを元に進めていきます。
Introduction – 00 – Roll-a-ball – Unity Official Tutorials
イントロダクションで言いたいことは、このチュートリアルはボールを転がしてモノを拾うゲームだよ、ということだけです。難しいことはせずに、基本的なことをやるそうです。
2.初期設定
Project: Roll-a-Ball SETTING UP THE GAME
Setting up the game – 01 – Roll-a-ball – Unity Official Tutorials
まずは新しいプロジェクトを作成します。
Unity
File → New Project
項目は特にチェックせずに、プロジェクト名をRoll-A-Ballにでもして作成してください。
シーンを保存します。
File → Save Scene
_Sceneというフォルダを作って、そのフォルダにMiniGameという名前でシーンを保存します。ちなみにフォルダのアンダースコアは名前順にしたときに最初のほうに来させるためにつけてます。
地面を作ります。
GameObject → Create Other → Plane
作成したPlaneをGroundという名前に変更します。
Groundを選択して、Inspectorのギアのマークをクリック、Resetをクリックすると、
Groundの位置が0,0,0の位置になります。(つうか最初からなってた・・)
プレイヤーを作ります。
GameObject → Create Other → Sphere
作成したSphereをPlayerという名前に変更します。
Playerの位置をResetして位置を0,0,0にします。
このままだとPlayerが地面に半分埋まった状態なので、
PlayerのZ位置を0.5にします。
ゲーム画面を照らすライトを作ります。
GameObject → Create Other → Directional Light
作成したDirectional lightをMain Lightという名前に変更します。
Main Lightの位置をResetして位置を0,0,0にします。
Rotation X:30 Y:60に変更します。
Main Lightを選択したまま、InspectorのShadow TypeをSoft Shadowsに変更します。
ShadowのResolutionをVery High Resolutionに変更します。
良い感じに地面にボールの影ができました。
Player自身の黒い部分を薄くするライトを作ります。
影の色とPlayer自身の黒い部分が同じ色で紛らわしいので、上方向にPlayerに光を当てるライトを作成します。
Main Lightを選択して右クリックでDuplicateを選択します。
複製したMain LightをFill Lightという名前に変更します。
Fill LightのRotation X:-30 Y:-60に変更します
Colorをクリックして薄い水色に変更します。
Intensityを0.1に変更します。
No Shadowsに変更します。
階層(Hierarchy)を整理します。
GameObject → Create Empty
作成されたGameObjectの名前をLightingに変更します。
Lightingの位置をResetして位置を0,0,0にします。
Main LightとFill Lightを選択してLightingにドロップします。
初期設定は以上になります。
初期設定が終わると下記のようになります。
3.プレイヤーを移動させる
Project: Roll-a-Ball Moving the player
Moving the player – 02 – Roll-a-ball – Unity Official Tutorials
プレイヤーにPhysicsを追加
Playerを選択 → Component → Physics → Rigidbody
スクリプトを作成する
Assetsフォルダを選択して右クリックしてフォルダを作成
作成したフォルダの名前をScriptsにする。
Playerを選択してInspectorのAdd Componentをクリック
New Scriptを選択 → 名前はPlayerController、LanguageはCSharpにしてCreate and Addをクリックする。
作成されたPlayerControllerファイルをScriptsフォルダにドロップする。
PlayerControllerをダブルクリックするとエディタが起動します。
PlayerControllerを編集します。
using UnityEngine; using System.Collections; public class PlayerController : MonoBehaviour { public float speed; void FixedUpdate() { float moveHorizontal = Input.GetAxis ("Horizontal"); float moveVertical = Input.GetAxis ("Vertical"); Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical); rigidbody.AddForce(movement * speed * Time.deltaTime); } }
仕組みは何?とかいう疑問は各自で調べましょう。
rigidbodyにAddForceするとプレイヤーが動くと思っておけばいいのです。
いくつかプログラムを書いて比べているうちに、なんとなくわかります。
エディタを保存して、Unityに戻ります。
Playerを選択して、InspectorのScriptの部分に、Speedという項目ができているので、そこに500を入力します。
Main CameraのPositionとRotationを少し変えます。
Position X:0 Y:10 Z:-10
Rotation X:45 Y:0 Z:0
プログラムを実行してみると、
キーボードの上下左右でプレイヤー(ボール)を動かすことができるようになりました。
ちなみに地面がないところにいくと、ボールが下に落ちていきます。
4.カメラを動かす
Project: Roll-a-Ball MOVING THE CAMERA
Moving the camera – 03 – Roll-a-ball – Unity Official Tutorials
まずは試しにMain CameraをドラッグしてPlayerにドロップします。
するとMain CameraがPlayerの子供になって、Playerが動くとMain Cameraも一緒に動いてついてきます。
で、それで終ればいいのですが、
Playerはボールです。動くとき転がります。つまりCameraも転がってしまうんです。
ということで、Playerの子供にはすることができないので、Cameraを子供からはずして元に戻しましょう。
こういうときはスクリプトで制御します。
Main Cameraを選択してInspectorのAdd Componentをクリック
New Scriptを選択 → 名前はCameraController、LanguageはCSharpにしてCreate and Addをクリックする。
作成されたCameraControllerファイルをScriptsフォルダにドロップする。
CameraControllerをダブルクリックするとエディタが起動します。
CameraControllerを編集します。
using UnityEngine; using System.Collections; public class CameraController : MonoBehaviour { public GameObject player; private Vector3 offset; void Start () { offset = transform.position; } void LateUpdate () { transform.position = player.transform.position + offset; } }
エディタを保存して、Unityに戻ります。
まずMain Cameraを選択します。
続いて、PlayerをドラッグしてMain CameraのInspectorのScriptのPlayerにドロップします。
これでPlayerがpublic GameObject playerに関連付けられます。
プログラムを実行してみると、
Playerをキーボードの上下左右で動かすと、カメラ(視点)も一緒に上下左右と動いてくれます。
これにてボールを転がしてモノを拾うゲームの作り方、パート1は終了になります。
次のパート2で全部仕上げますよ!
コメントを残す