今回はスマートフォンの加速度センサーを利用した玉転がしゲームのスクリプトについて紹介していきます。
一応細かく説明をしていきますが、もし読むのが面倒ならばコードをそのまま転がしたいオブジェクトに貼り付けてもらえればOKです。
[:contents]
加速度センサーで球体を転がすためのスクリプト
using UnityEngine; using System.Collections;
public class TAMAkorogashi : MonoBehaviour
{
const float Gravity = 9.81f;//重力加速度を定義します。
public float gravityScale = 1.0f;//重力の適用具合を定義します。
void Update()
{
Vector3 vector = new Vector3();
if (Application.isEditor)
{
vector.x = Input.GetAxis("Horizontal");
vector.z = Input.GetAxis("Vertical");
if (Input.GetKey("z"))
{
vector.y = 1.0f;
}
else
{
vector.y = -1.0f;
}
}
else
{
vector.x = Input.acceleration.x;
vector.z = Input.acceleration.y;
vector.y = Input.acceleration.z;
}
Physics.gravity = Gravity * vector.normalized * gravityScale;
}
}
重力加速度、重力の適用具合を定義する。
const float Gravity = 9.81f;//重力加速度を定義します。
public float gravityScale = 1.0f;//重力の適用具合を定義します。
まず、球を転がしたときに現実世界と同じような動きにするために、重力加速度と重力の適用具合を定義します。
重力加速度 1G = 9.80619920 m/s2 ≒ 9.81f
重力の適用具合 1.0f
Unityでの動作、スマートフォンでの動作を書く。
Unityで動作させる場合の処理と、スマートフォンで動作させる場合の処理を書いていきます。
Unityでの動作
if (Application.isEditor)
{
vector.x = Input.GetAxis("Horizontal");
vector.z = Input.GetAxis("Vertical");
if (Input.GetKey("z"))
{
vector.y = 1.0f;
}
else
{
vector.y = -1.0f;
}
}
vector.x = Input.GetAxis("Horizontal");
Horizontal(水平)
入力されたキーボードの左右キーがvector.xの値になります。( -1.0f ~ +1.0f )
vector.z = Input.GetAxis("Vertical");
Vertical(垂直)
入力されたキーボードの上下キーがvector.zの値になります。( -1.0f ~ +1.0f )
if (Input.GetKey("z"))
{
vector.y = 1.0f;
}
else
vector.y = -1.0f;
}
zキーが押されている間はvector.yの値は1.0f、そうでない場合は-1.0fになります。
スマートフォンでの動作
else
{
vector.x = Input.acceleration.x;
vector.z = Input.acceleration.y;
vector.y = Input.acceleration.z;
}
vector.x、vector.y、vector.zのそれぞれの値がスマートフォンの加速度センサーが検知した値になります。(それぞれ -1.0f ~ +1.0f )
Physics.gravityをベクトルの方向に合わせて変化させる。
Physics.gravity = Gravity * vector.normalized * gravityScale;
vector.normalized
これをかけることによって方向を維持したまま長さが1.0 のベクトルにすることができます。
重力加速度 × 重力の適用具合 にvector.normalizedをかけ合わせることによって長さ1.0のベクトルにしています。