Akey備忘録

忘れそうなことを書いておく。

Unityでハンドスピナー回すだけのアプリを作ってみた

Qiitaのコピーになります。

Unityでハンドスピナー回すだけのアプリを作ってみた

前からAndroidを公開してみたかったのと、アプリ作りの練習になると思い作って公開した。

開発環境

Unity2017.1.0f3

公開までの一連の流れ

・Unityでプロジェクト作成、開発 ・Play Consoleでアプリの作成 ・UnityでPlayer Settingを設定、Key Storeを作成、ビルド ・Play Consoleでアプリのリリース管理の設定、アプリのアップロード ・Play Storeでリリース

Unityでやること

プロジェクトを作った後、Switch PlatformでAndroidに設定。 Player Settingにリリースに変更が必要な項目を入力

ビルド(リリース)するために変更が必要な項目

・Bundle Identifier Play Consoleでアプリの作成で作った(com.***.com)のようなドメイン ・Key Store ・Key

アップデートの時に変更が必要な項目

・Version ・Bundle Version Code

Android SDKを設定。 Android SDKをダウンロードした後、ディレクトリをUnityに登録。 あとは最初のBuild時に自動でアップデート等が走る(かなり長い)。

apkファイルを実機テストして確認したらOK。

Play Consoleでやること

左のメニューに!的なアイコンがでるのでその項目をすべて設定していく。 内部テスト版、アルファ版、ベータ版、リリースの順で公開する。(ベータ版以前はとばしても可) リリースの管理画面でアプリをアップデートする。 設定をして公開。

躓いたところ

Buid and Runでアプリが実機にインストール出来なかった場合、apkを実機に送ってインストールする。 リリースの際アプリのアップデートが弾かれる場合はBundle Version Codeが全開と変わっているか確認する。

アプリの中身

ハンドスピナーInkscapeで描いた(SVGファイル)。 https://gist.github.com/TeraokaAkihiro/bd14e69f0a756a055a739508f7527133 Kritaで色付けして、エクスポート。 UnityでSpriteの設定でインポートして配置。 スクリプトGithubで管理。 https://github.com/TeraokaAkihiro/HandSpinner 回転はタッチ離した時、今タッチしている場所と前の複数フレームでタッチした場所の差をGetDiff関数で計算している。

public float GetDiff(Vector2 p1, Vector2 p2)
{
  float dx1 = 0f - p1.x;
  float dy1 = 0f - p1.y;
  float dx2 = 0f - p2.x;
  float dy2 = 0f - p2.y;
  float rad1 = Mathf.Atan2(dy1, dx1);
  float rad2 = Mathf.Atan2(dy2, dx2);
  float diff = rad1 * Mathf.Rad2Deg - rad2 * Mathf.Rad2Deg;
  return diff;
}

回転数のカウントは360度を3つのエリアに分割して判定している。

float angleZ = _transform.eulerAngles.z;
if(angleZ < 120f)
{
  rotationPart = 1;
}
else if(angleZ < 240f)
{
  rotationPart = 2;
}
else
{
  rotationPart = 3;
}

前のフレームから+1か-2、-1か+2で正転逆転を判定している。

Tweet機能も付けてみた。(参考→【Android】UnityでTwitter投稿する - スマゲ)

Application.OpenURL("http://twitter.com/intent/tweet?text=" + WWW.EscapeURL(text));

Button押したら走るようにするだけなのでかなり楽

戻るボタン押したら終了(UnityでのAndroidバックボタン対応 - Qiita)

if (Input.GetKeyDown(KeyCode.Escape))
{
  Application.Quit();
}

消す前の確認があるならばダイアログ出すのも良いかもしれない。

残っている問題

ハンドスピナーから離したときのスピードが安定しない ・回転数は保存されず終了したら0になる ・AdMobで広告を表示しようと思ったができなかった

感想

AndroidアプリのリリースはUIがしっかりしてて、法律まわりはすこし難しかったが、あまり調べること無く設定出来た。 Unityはググればコピペで済むことが多く楽だった。 回転数に関しては全く出てこなかったので自分で考えるしかなかったがパッと思いついてよかった。

AndroidアプリをリリースするならUnityがあるのでかなり簡単で時間もかからないので試してみては。