Akey備忘録

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

UnityのVRTKでアウトラインを表示する。

Qiitaより

VRTKのVRTK_OutlineObjectCopyHighlighterを使う。

開発環境

・Unity2017.1.0f3 ・SteamVR ・VRTK

はじめに

プロジェクトを作成後、SteamVRとVRTKをインポートしておく。 VRTKのセットアップが面倒な場合、適当なサンプルシーンから [VRTK_Scripts]と[VRTK_SDKManager]を使うシーンにコピペすればVRTKが使えて楽。

アウトラインの表示

表示したいオブジェクトをシーンに配置した後 VRTK_OutlineObjectCopyHighlighterをアタッチ。(Add Componentから"outline"を検索ですぐ出てくる) f:id:teraokaakihiro:20180424210230p:plain

その後アウトラインを表示するスクリプトを書く。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRTK.Highlighters;  //usingは忘れがちなので忘れずに

public class SetOutline : MonoBehaviour {

  VRTK_OutlineObjectCopyHighlighter vrtk_outline;

  void Start ()
  {
    vrtk_outline = GetComponent<VRTK_OutlineObjectCopyHighlighter>();
    vrtk_outline.Initialise();
    Color color = Color.black;
    vrtk_outline.Highlight(color);
  }
}

vrtk_outline.Initialise()を実行してvrtk_outline.Highlight()で表示する。

f:id:teraokaakihiro:20180424210229p:plain

こんな感じで表示されます。(Ticknessの値は左が1、右が0.5)

今回はStart()に書いたので最初から表示されるが、任意のタイミングで表示、非表示も可能。

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があるのでかなり簡単で時間もかからないので試してみては。

Google Homeの音量が大きいときの対処法

「音量を1%」

という感じで言えば最小音量になります。

もともとアプリからもスライダーで%単位で設定できるのですが、音声操作だと音量1までしか下がらないのかと思ってました。

ちなみに応答の声の音量は変わりません。

Google Homeは半額セールで買いました。 おすすめのコマンドは、Google Play Musicのプレイリストを作り、「{プレイリスト名}を再生」です。

【Unity】Particle systemを使って集中線を表示する

Particle systemを使って集中線を画面に表示する。 いろいろ省きます。 数字の部分は適宜調整してください。ちなみにコードは一切書かないです。

カメラを平行投影(距離感無視の視点)に設定する

・Projection → Orthographic

Particle systemオブジェクトを配置する

・Hierarchyで右クリック → Particle Systemか、メニュー → GameObject → Particle System

f:id:teraokaakihiro:20160703022935p:plain

Particle Systemの設定

配置したParticle Systemを選択してInspectorからプロパティを変更していく。

まずは全方位に飛ばすように設定する。

・Shape → Shape → Circle

f:id:teraokaakihiro:20160703023541p:plain

f:id:teraokaakihiro:20160703023753p:plain

カメラから見ると横方向になっているため回転させる

・Transform → Rotation → x = 0

ほぼ動かさないように設定する。

・Start Speed = 0.1

一番大事なRenderをいじる

Pivotの基準を中心にする

・Render → Remder Mode = stretched Billborad

細長くする

・Length Scale = 16

中心から少し離す

・Render → Pivot → Y = 20

だいぶそれっぽくなってきた。

一定時間で消したり量を調整する

Duration は発生の持続時間(秒)

Looping のチェックを外しループさせない

Start Lifetime は一つ一つの持続時間

Emissionで量を調整できる、100程度に設定

f:id:teraokaakihiro:20160703092149p:plain

あとは画面に合わせてPivot等を調整してParticle Systemの設定は終わり

Color over Lifetime でAlphaを設定してフェードさせる。

f:id:teraokaakihiro:20160703093900p:plain

前面に表示させる

今の状態でCubeなどのオブジェクトをParticle Systemの前に配置すると隠れてしまうので、 Main Cameraとは別にCameraを配置する。

・Hierarchyで右クリック → Cameraか、メニュー → GameObject → Camera

こっちをメインとして使う。

先に設置していたMain Cameraを選択してInspectorから

・Clear Flags → Depth only

・Depth → 1以上

に設定する。

f:id:teraokaakihiro:20160703093315p:plain

最初から配置されていた平行投影のカメラとParticle Systemを遠くに配置する。

Ctrlキーを押しながらクリックで複数選択、

・InspectorからTransform → Position → Y = 100

完成!

f:id:teraokaakihiro:20160703094229p:plain

さらに調整

Textureを使うともっとそれっぽくなる。

Textureはこちらの記事のものを使用。

Unityでエフェクトを軽くするspphire9.wordpress.com

f:id:teraokaakihiro:20160703094908p:plain