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

一応細かく説明をしていきますが、もし読むのが面倒ならばコードをそのまま転がしたいオブジェクトに貼り付けてもらえれば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.xvector.yvector.zのそれぞれの値がスマートフォンの加速度センサーが検知した値になります。(それぞれ -1.0f ~ +1.0f )

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

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


vector.normalized

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

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

投稿者 甘酒さん

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です