【Unity】Android端末のジャイロセンサーを使ってボールを転がすメモ

UnityEditor

やりたいこと

– スマホを傾けてアプリの中のボールを転がしたい
– スマホを机に置いた状態が水平であってほしい

とりあえず実装

参考

– 傾きで玉を転がすゲームなどの場合(モバイル端末を地面に水平に構えた場合)
http://ft-lab.ne.jp/cgi-bin-unity/wiki.cgi?page=unity_script_gyro_mobile

できた。

さらにやりたいこと

– directional lightも傾きに合わせて動かしたい

とりあえず実装

http://docs.unity3d.com/ja/current/ScriptReference/Gyroscope-attitude.html

ライトに直接スクリプトを貼って簡単じゃーん(?)

・・・何か違う

– 想定通りに影が変わらない軸がある
– どうやらAndroid端末のジャイロは、手に持ち、通話中の状態を基準と想定している?
– Unity上とAndroid端末のy軸とz軸が逆っぽい

yとzを入れ替える

できた。ソースは後述。

もうひとつやりたいこと

– このままだと直射日光は垂直にしか当たらないので、適当に傾けたい

シーンで設定しているライトの向きをオフセットとして使う

– transform.rotation の値の型は Quaternion
– Quaternion同士を掛け算すると向きを合成できる

というわけで、以下のコードに。

“`cs
public Quaternion direction_light_offset;
public Quaternion gyro_to_light;

void Start () {
// 太陽光の傾きオフセットをシーンの設定から保持
direction_light_offset = this.transform.rotation;
}

void Update () {
// 端末の傾きを保持
gyro_to_light = Input.gyro.attitude;
// yz軸の値を入れ替え
float yz_change;
yz_change = gyro_to_light.y;
gyro_to_light.y = gyro_to_light.z;
gyro_to_light.z = yz_change;
// ライトの向きを端末の傾き+元の設定のオフセットで変更
this.transform.rotation = gyro_to_light * direction_light_offset;
}
“`

できた。

Quaternionについての参考はこちら

あわせて読みたい

コメントを残す

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