卵の操作
これからスクリプトを作成し、卵の動き処理を実装しましょう。
シーン設定
迷路の左上に Prefabs の中にある Egg を入れてください:

キーボードによる卵の動き
スマホで遊ぶ前に、まずUnityで動作を確認したいので、キーボードを使い、重力の向きを変えて、卵が転がるようにしましょう。

重力を変えるには2つの方法がある:
プロジェクト設定で重力を変える
1回だけ重力を変え、後がずっと変わらないなら、プロジェクト設定で重力ベクトルを変えることができる。「Edit ⇒ Project Settings」を開き「Physics⇒Settings」(物理設定)を選ぶと

「Gravity」(重力)という設定がある。デフォルト値としては、地球の重力になっている(真下のベクトルで、加速度は9.81)。今回は実行中に重力を変えるので、次の方法で変えましょう:
スクリプトで重力を変える
スクリプトでは、「Physics.gravity」の値を代入すれば、重力をいつでも帰ることができる。例えば:
// 地球の重力
Physics.gravity = new Vector3(0, -9.81f, 0);
// 月のの重力
Physics.gravity = new Vector3(0, -1.625f, 0);
// 木星の重力
Physics.gravity = new Vector3(0, -24.5f, 0);
スクリプト
キーボードの WASD で重力ベクトルの向きを変えましょう W と S で Z軸の前後にし、A と D でX軸の左右にしましょう。
// 実行中に重力を変える
public class GravityController : MonoBehaviour
{
// 重力の加速度(地球)
const float Gravity = 9.81f;
// 重力に与える倍率(強さの調整)
[SerializeField]
private float gravityScale = 1.0f;
private void Update()
{
// 重力のベクトル(Yはいつも下:-1)
Vector3 vector = new Vector3(0, -1, 0);
// WASDの入力( -1 ~ 1 )
vector.x = Input.GetAxis("Horizontal"); // 左右(x軸)
vector.z = Input.GetAxis("Vertical"); // 前後 (z軸)
// 単位ベクトルにする
vector.Normalize();
// 最後に、重力の向きを変える
Physics.gravity = vector * (Gravity * gravityScale);
}
}
スクリプトを空のゲームオブジェクトに追加し、操作を確認してください:

加速度センサーによる卵の動き
加速度センサー(Accelerometer)はスマホの加速と減速を測定し、3Dベクトル(向きと強さ)として返す装置です。重力は地球の方向へ引っ張る力であり、真下の加速ベクトルととして現れる。
つまり、加速度センサーを使うことにより、重力ベクトルを測定できます。なお、スマホの加速度センサーの座標系は以下の通りです:

ただし、今回のゲームでは、カメラで見た座標系は:

なので、加速度センサーの ZとY軸を交換しないといけない。
加速度センサーを有効化
加速度センサーを使うために、まず有効化しないといけない。Unityは次の命令がある:
// 加速度センサーを使えるか?
if (Accelerometer.current != null)
{
// 有効化する
InputSystem.EnableDevice(Accelerometer.current);
}
加速度センサーの値を読み込む
そして、実行中に、以下のように加速度センサーのベクトルを読む:
// 加速度センサーを使えるか?
if (Accelerometer.current != null)
{
// 加速度センサーの向きを取得
Vector3 acc = Accelerometer.current.acceleration.ReadValue();
}
スクリプト
GravityController を更新し、スマホの加速度センサーを使える場合は、実際の重力データを利用しましょう:
// 実行中に重力を変える
public class GravityController : MonoBehaviour
{
// 重力の加速度(地球)
const float Gravity = 9.81f;
// 重力に与える倍率(強さの調整)
[SerializeField]
private float gravityScale = 1.0f;
private void Start()
{
// 加速度センサーを使えるか? → 有効化
if (Accelerometer.current != null)
InputSystem.EnableDevice(Accelerometer.current);
}
private void Update()
{
// 重力のベクトル(Yはいつも下:-1)
Vector3 vector = new Vector3(0, -1, 0);
// 加速度センサーを使えるか?
if (Accelerometer.current != null)
{
// 加速度センサーの向きを取得
Vector3 acc = Accelerometer.current.acceleration.ReadValue();
// センサーの軸をゲームの軸へ変換
vector.x = acc.x; // X はそのまま
vector.z = acc.y; // ゲームの Z は、加速度センサーの Y である
}
else
{
// WASDの入力
vector.x = Input.GetAxis("Horizontal"); // 左右(x軸)
vector.z = Input.GetAxis("Vertical"); // 前後 (z軸)
}
// 単位ベクトルにする
vector.Normalize();
// 最後に、重力の向きを変える
Physics.gravity = vector * (Gravity * gravityScale);
}
}
実機で確認
スマホとPCをUSBケーブルで接続し、Build Profiles を開いてください。「Run Device」で端末を選び、「Build And Run」でビルドし、実行を確認してください。

No comments to display
No comments to display