【Unity 3D】キャラとカメラを動かす手順をサクッと学ぶ!

キャラクターを移動させる

このページで学べること
  • スクリプトの作成と追加
  • キャラクターの移動
  • キャラクターの方向転換

今回はキャラとなるオブジェクトを追加して移動とカメラの方向転換ができるようにしましょう

今回の内容

キャラ移動と方向転換のスクリプト

まずは今回の完成状態の動きと作成するスクリプト(キャラを動かすための文章)を紹介しておきます!

キャラ移動用スクリプト

using System.Collections; using System.Collections.Generic; using UnityEngine; public class move : MonoBehaviour {

public float PlayerSpeed; //移動速度の設定項目を追加する
void Start() //ゲーム開始時に動作する関数 { } void Update() //ゲーム中常に動作する関数 {
var speed = Vector3.zero;//(0,0,0)を基本座標にする if(Input.GetKey(KeyCode.W))//Wキーを押したら { speed.z = PlayerSpeed; //(0,0,PlayerSpeed)にする } if(Input.GetKey(KeyCode.S))//Sキーを押したら { speed.z = -PlayerSpeed;//(0,0,-PlayerSpeed)にする } if(Input.GetKey(KeyCode.A))//Aキーを押したら { speed.x = -PlayerSpeed;//(-PlayerSpeed,0,0)にする } if(Input.GetKey(KeyCode.D))//Dキーを押したら { speed.x = PlayerSpeed; //(PlayerSpeed,0,0)にする } transform.Translate(speed);//キャラから見てVector3の方向に移動 Wキーを押したら(0,0,PlayerSpeed)に移動
}
}

カメラの方向転換用スクリプト

using System.Collections; using System.Collections.Generic; using UnityEngine; public class camera : MonoBehaviour {

[SerializeField] GameObject player;//ゲームオブジェクトの設定項目を追加する
void Start() { } void Update() {
float mouse_x = Input.GetAxis("Mouse X");//マウスの横方向の移動量を取得してmouse_xに入れる float mouse_y = Input.GetAxis("Mouse Y");//マウスの縦方向の移動量を取得してmouse_yに入れる if (Mathf.Abs(mouse_x) > 0.001f)//横方向(x)に一定量移動していれば横回転 { //回転軸はワールド座標(Vector3)のY軸(UP) transform.RotateAround(player.transform.position, Vector3.up, mouse_x);//(中心点、回転軸、回転角度) } if (Mathf.Abs(mouse_y) > 0.001f)//縦方向(y)に一定量移動していれば縦回転 { //回転軸はカメラ自身(transform)のX軸(right) transform.RotateAround(player.transform.position, transform.right, mouse_y);//(中心点、回転軸、回転角度) }
}
}

スクリプトを作成する

キャラを動かすにはスクリプトという命令書を作ってそこに命令を書く必要があります

スクリプトは画面下部のプロジェクトメニューに作成します

プロジェクトメニューで右クリックをして「作成 → C#スクリプト」を選択します

そうするとプロジェクトメニューにスクリプトファイルのアイコンが表示されるので、「move」という名前で作成しましょう

これでスクリプトが作成できたので、ファイルをダブルクリックで開いて命令を書いていきましょう

移動のスクリプトを作る

それでは移動のスクリプトを記述します

以下のスクリプトをコピーしてmoveの中身を上書き保存しましょう

キャラ移動用スクリプト

移動のスクリプトは以下の「//」を書いている部分になります

using System.Collections; using System.Collections.Generic; using UnityEngine; public class move : MonoBehaviour {

public float PlayerSpeed; //移動速度の設定項目を追加する
void Start() //ゲーム開始時に動作する関数 { } void Update() //ゲーム中常に動作する関数 {
var speed = Vector3.zero;//(0,0,0)を基本座標にする if(Input.GetKey(KeyCode.W))//Wキーを押したら { speed.z = PlayerSpeed; //(0,0,PlayerSpeed)にする } if(Input.GetKey(KeyCode.S))//Sキーを押したら { speed.z = -PlayerSpeed;//(0,0,-PlayerSpeed)にする } if(Input.GetKey(KeyCode.A))//Aキーを押したら { speed.x = -PlayerSpeed;//(-PlayerSpeed,0,0)にする } if(Input.GetKey(KeyCode.D))//Dキーを押したら { speed.x = PlayerSpeed; //(PlayerSpeed,0,0)にする } transform.Translate(speed);//キャラから見てVector3の方向に移動 Wキーを押したら(0,0,PlayerSpeed)に移動
}
}

保存が出来たらスクリプトをキャラに紐づけします

ヒエラルキーメニューからキャラを選択した状態で、インスペクターメニューへスクリプトをドラッグ&ドロップします

これで紐づけができました

今回のプログラムではインスペクターから移動速度を変更できるようになっているので、PlayerSpeedの部分を0.1に設定しましょう

これでキャラが動くようになったので、画面上部の再生ボタンをクリックしてゲームを動かしてみましょう

今回は【前:Wキー、後:Sキー、左:Aキー、右:Dキー】に割り振っていますので、キーを押して動かしてみてください

移動の方向とキーの関係
  • 前:Wキー
  • 後:Sキー
  • 左:Aキー
  • 右:Dキー

これでキャラが動きましたが、今はカメラがついて来てくれません

なので、次はカメラがついてくるようにしましょう

カメラがキャラについてくるようにする

ヒエラルキーメニューの「Maincamera」をドラッグ&ドロップでキャラデータと組み合わせることでカメラが付いてくるようになります

ただしこのままではキャラとカメラの位置がずれていると思うので、そちらも調整していきます

まずヒエラルキーメニューでキャラを選択し、インスペクターメニューにあるTransformの位置の座標を(0,0,0)にします

次にカメラも同じようにTransformの位置を変更しますが、こちらは(0,2,-5)にしておきましょう

これでカメラの位置がキャラより「上に2、後ろに-5」ずれた位置に設定されて見下ろすようになります

再度ゲームを動かして、カメラがついてくるか確認しましょう

無事カメラがキャラを追従してくれるようになりました

それでは最後にマウスを動かすとカメラの方向転換ができるように設定しましょう

方向転換のスクリプトを作る

方向転換のスクリプトはカメラに追加する必要があるので、また新しく「camera」という名前のスクリプトを作成します

作成出来たら命令を書きます

以下のスクリプトをコピーしてcameraの中身を上書き保存しましょう

方向転換用スクリプト

方向転換のスクリプトは以下の「//」を書いている部分になります

using System.Collections; using System.Collections.Generic; using UnityEngine; public class camera : MonoBehaviour {

[SerializeField] GameObject player;//ゲームオブジェクトの設定項目を追加する
void Start() { } void Update() {
float mouse_x = Input.GetAxis("Mouse X");//マウスの横方向の移動量を取得してmouse_xに入れる float mouse_y = Input.GetAxis("Mouse Y");//マウスの縦方向の移動量を取得してmouse_yに入れる if (Mathf.Abs(mouse_x) > 0.001f)//横方向(x)に一定量移動していれば横回転 { //回転軸はワールド座標(Vector3)のY軸(UP) transform.RotateAround(player.transform.position, Vector3.up, mouse_x);//(中心点、回転軸、回転角度) } if (Mathf.Abs(mouse_y) > 0.001f)//縦方向(y)に一定量移動していれば縦回転 { //回転軸はカメラ自身(transform)のX軸(right) transform.RotateAround(player.transform.position, transform.right, mouse_y);//(中心点、回転軸、回転角度) }
}
}

これをカメラに紐づけすると、インスペクターからどのオブジェクトを基準にするかを選べるようになります

この項目にキャラを設定するため、ヒエラルキーにあるキャラデータをドラッグ&ドロップします

これでカメラがキャラを基準に回転するようになったので、ゲームを動かして確認してみましょう

マウスを動かすとカメラの向きが変わりましたね

「とりあえず動かす」が一番の近道!

ポイントまとめ
  • 物を動かすにはスクリプトを書く!
  • if文を使って反応するボタンを決められる!
  • 3Dゲームで使う座標は(x,y,z)の3次元!

今回はキャラの移動とカメラのカメラの方向転換をするスクリプトを作ってキャラを動かせるようになりました

Unityを初めたばかりだと、少し動かせるだけでも楽しかったり嬉しかったりでモチベも上がりますよね

こんな感じでモチベを上げつつどんどん上達していきましょう!