全て手順付きで解説しますので、しっかりついてきてくださいね!
左右矢印キーで移動、スペースキーでジャンプです。
準備
まず、プロジェクトを作成してください。
次に作成するためのテストの場として地面を作っておきましょう。
メニューよりGameObject->CreateOther->Cubeを選択し、
拡大縮小ツールで下の画像の様に変形させてください。
また、そのままでは暗いのでDirectionalLightも設置しておきましょう。
こんな感じ

ここまでの操作がわからない方は別の記事を参考にしてくださいね。
プレイヤーの作成
次にプレイヤーとなる青い立方体を作成しましょう。
メニューよりGameObject->CreateOther->Cubeを選択し、拡大縮小ツールで上に伸ばします。
作成したCubeの名前をPlayerに変更しておきましょう。
次にProjectパネルを右クリック->Create->Materialを選択し作成したマテリアルの名前をPlayerに変更し、色を青く設定しましょう。
設定したマテリアルをプレイヤーに設定しましょう。
プレイヤーを青く設定できましたか?
色の設定はコチラに記載してあるのでわからない人は参照してください。

CharacterControllerの設定
Unityにはキャラクターの動きを簡単に作ることのできるCharacterControllerというコンポーネントが存在します。このCharacterControllerを利用することで移動や地形との当たり判定をほとんど自動でやってくれちゃいます。
それでは先程作成したPlayerにCharacterControllerを設定しましょう。
HierarchyパネルのPlayerを選択した状態でメニューのComponent->Physics->CharacterControllerを選択しましょう。

するとこんな警告が出ると思います。

この警告はPlayerにはすでにBoxColliderという箱状の当たり判定があるが、CharacterControllerで置き換えても大丈夫か?という警告です。
問題はありませんのでReplaceをクリックしましょう。

するとPlayerのInspectorパネルにCharacterControllerというコンポーネントが設定されるとおもいます。
このコンポーネントの各種値で登れる坂の限界(SlopeLimit)や登れる段差のサイズ(StepOffset)などが設定できます。
また、Center,Radius,Heightの値が壁などとの当たり判定が発生する範囲を設定できます。
Sceneパネルでは緑色の線で表示されている部分になります。
今後もし、プレイヤーが壁や床にめり込んでしまうことがアレばココの値を変更してみてください。
下の図は緑色の線が見やすくなるよう値をいじっていますが、初期の設定の値で特に困ることはないと思います。

CharacterControllerを制御する
上記までの状態では再生ボタンを押しても何も起こりません。
CharacterControllerを制御するためのスクリプトを追加し方向キーでの移動やジャンプの処理を追加して行きましょう。
Projectパネルを右クリック->Create->JavaScriptでスクリプトを追加し名前を
PlayerControllに変更してください。
PlayerControllをダブルクリックし編集画面を開き以下の通りスクリプトを記述してください。
#pragma strict
var speed : float = 6.0;
var jumpSpeed : float = 8.0;
var gravity : float = 20.0;
private var moveDirection : Vector3 = Vector3.zero;
private var controller:CharacterController;
function Start()
{
controller = GetComponent(CharacterController);
}
function Update()
{
//地面についているかどうか
if (controller.isGrounded) {
//移動方向を取得
moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
//ジャンプ
if (Input.GetButton ("Jump")) {
moveDirection.y = jumpSpeed;
}
}
// 重力を計算
moveDirection.y -= gravity * Time.deltaTime;
// 移動
controller.Move(moveDirection * Time.deltaTime);
}
このスクリプトはUnity公式リファレンスのスクリプトをちょっと変更したものになっています。
追記 2014/01/21:
Input.GetAxis("Vertical")の処理が抜けていました。
コメントでご指摘を頂きました、ありがとうございます。
Input.GetAxis("Vertical")の処理が抜けていました。
コメントでご指摘を頂きました、ありがとうございます。
各種処理の解説をします。
function Start()
{
controller = GetComponent(CharacterController);
}
の部分のStart関数は実行時に一回だけ呼ばれます。
その中ではGetComponent関数を呼び出しCharacterControllerコンポーネントを取得しています。
CharacterControllerを通じて各種関数を呼び出すことでキャラクターの移動処理を簡略化することができます。
CharacterControllerの詳細はUnityリファレンスのCharacterControllerを参照してください。
そして、Update関数は毎フレーム呼ばれます。
この中でプレイヤーの移動やジャンプの処理をしています。
なにやら色々処理をしていますが、今回は細かいことはおいといて先に進みます。
細かい解説はのちのちの記事で記載して行きます。
ではスクリプトを保存しUnityの画面に戻りましょう。
次に作成したスクリプトをPlayerに反映させます。
ProjectパネルのPlayerControllをドラッグしてHierarchyパネルのPlayerにドロップしてください。

PlayerのInspectorパネルにPlayerControllの欄が追加されていればOKです。
SpeedやJnmpSpeedの値を変更すれば移動速度やジャンプ力を調整できます。
それでは再生してみましょう!
左右キーで移動でスペースキーでジャンプできればOKです。
うまく出来ましたでしょうか。
ステージの作成
ではそれっぽいステージを作って行きましょう。
Cubeをコピーして移動、拡大縮小、回転を加えてお好きなようにステージを作りましょう!
私はこんな風なステージを作りました。

カメラの追従
上記までの状態でゲームを再生するとプレイヤーが画面外に行ってしまいますね…。
画面を写しているカメラがプレイヤーと一緒に移動すればうまくいきそうです。
カメラをプレイヤーと一緒に移動する方法はいくつかありますが、今回は一番簡単な方法で実現しましょう。
プレイヤーとカメラに親子関係を設定することでカメラがプレイヤーにくっついて移動するようにします。
親子関係を設定するにはHierarchyパネルのMainCameraをドラッグしPlayerにドロップしてください。
下の画像の右側の様になれば正しく親子関係が設定できています。

親子関係が上手く設定できたらMeinCameraをプレイヤーが真ん中に映る位置に移動しましょう。
完成
ゲームを再生してみてプレイヤーが移動しても常に画面の中央に写っているようになれば完成です!
簡単にアクションゲームができてしまいましたね!
以上です。
<<他の記事を読む
[スポンサードリンク]
【シンプルゲーム作成講座の最新記事】
デモは上下もいけるのに、なんで左右しかうごかへんのって!!!!!!!
Input.GetAxis("Vertical")
と出て再生してもすぐに止まってしまうのですが、どうすればいいのでしょうか?
バーティカルのスペルが間違ってました。
すみません
軸をロックしないとごろごろ転がってしまいますけど、その点はどうするんでしょうか?
でも、Z軸ロックすると今度は床をすり抜けます。
これって何でしょうか?
これは何故でしょうか。
語尾のエルは一つです。