甘酒のアプリ開発

一人でも多くの人を幸せにするアプリを作っていけたらなぁと思います。

【Unity】加速度センサーを利用した玉転がしゲームのスクリプト

今回はスマートフォンの加速度センサーを利用した玉転がしゲームのスクリプトについて紹介していきます。

 

一応細かく説明をしていきますが、もし読むのが面倒ならばコードをそのまま転がしたいオブジェクトに貼り付けてもらえればOKです。

 

 

 

 

加速度センサーで球体を転がすためのスクリプト

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.xvector.yvector.zのそれぞれの値がスマートフォンの加速度センサーが検知した値になります。(それぞれ -1.0f ~ +1.0f )

 

 

Physics.gravityをベクトルの方向に合わせて変化させる。

Physics.gravity = Gravity * vector.normalized * gravityScale;


vector.normalized

これをかけることによって方向を維持したまま長さが1.0 のベクトルにすることができます。

 

 重力加速度 × 重力の適用具合 vector.normalizedをかけ合わせることによって長さ1.0のベクトルにしています。