Unity , ADX2 実験室メモ

非エンジニアのサウンドデザイナーがUnityでなにかをつくる

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

f:id:ksilogic:20160718103542p:plain

やりたいこと

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

とりあえず実装

参考

できた。

さらにやりたいこと

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

とりあえず実装

docs.unity3d.com

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

・・・何か違う

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

yとzを入れ替える

できた。ソースは後述。

もうひとつやりたいこと

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

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

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

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

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についての参考はこちら

tsubakit1.hateblo.jp