unity を使った 3D玉転がしアプリを作ってみたいと思います。3Dプリミティブの球体をiPhone/Androidの加速度センサーを使ってスマホを傾けると転がるようにします。
3D玉転がし
iPhoneとAndroidの加速度センサーは異なるAPIを使いますが、UnityではこれをInputクラスでまとめて使用できるようにしています。
GameObjectの配置
メニューから「GameObject」->「3D Object」->「Plane」で土台を作ります。
同様にで Sphere(ball), Directional light を設定して配置します
それぞれを左の「Hierarchy」でそれぞれを選んで、右側の「Inspector」で位置、回転、拡大を設定します。
Plane: Position, Rotation, Scale はデフォルトのまま
Sphere(ball): ボールとしてSphereを配置します。PositionPositionはY方向に「2」として浮き上がらせておきます。
他の Rotation, Scale はそのままの設定
Directional light: の設定はいい具合にボールに光が当たるようにします。
Main Camera: もともとありますが、画面を見る位置を決めます
このようになりましたでしょうか、これは「Scene」なので実際は「Game」で確認できます。
色の設定:Plane, Sphere に色を付けます
「Assets」->「Create」->「Material」
AssetsにNew Materialができます。名前をblueにしてInspectorから色を設定します。
Inspectorのスポイドの四角形をクリックするとパネルが現れるので青色に設定します。
Asset に出来上がった New Material のblueをドラッグ&ドロップで Planeに入れます
同様に、 Sphere を赤い色を設定します。
MainCameraでSceneを見ると「Camera Preview」で出来上がり画面の確認ができます。
RigidBody: ball を選択して「Component」「Physics」「Rigidbody」に設定します。
ballにRigidbodyの項目が追加されました。
加速度センサーを使ったスクリプトを作成
ball が上下左右の加速度で移動するようにスクリプトを作ります。
加速度センサー値は
1 2 3 |
Input.acceleration.x Input.acceleration.y Input.acceleration.z |
のようにして取得できます。
ballRun.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ballRun : MonoBehaviour { private float speed = 10.0f; // Use this for initialization void Start () { } // Update is called once per frame void Update () { var dir = Vector3.zero; // ターゲット端末の縦横の表示に合わせてremapする dir.x = Input.acceleration.x; dir.z = Input.acceleration.y; // clamp acceleration vector to the unit sphere if (dir.sqrMagnitude > 1) dir.Normalize(); // Make it move 10 meters per second instead of 10 meters per frame... dir *= Time.deltaTime; // Move object transform.Translate (dir * speed); } } |
このscriptをballにドラッグして設定します。
Unity Remoteで実行
Unity Remote 5 の使い方はこちらを参考に。
iPhone/AndroidにインストールしたUnity Remoteを起動しケーブルでPCと接続します。
「Edit」「Project Settings」「Editor」を選択します
Editor Settingsのダイアログが表示されるので
「Device」を選択肢の「Any iOS Device」に設定します。
(Androidの場合はAny Android Device)
これでUnityのSceneからGameに変更して「Play」すると、Unity画面から少し遅れてiPhone(Android)の画面でボールが現れます。上下左右に傾けるとボールが転がっていきます。
Unity Game:
iPhone: (Androidも同様です)
Reference:
モバイル端末の入力