2016年6月26日日曜日

艦これAndroid先行運用版(激安運用)

最近忙しくてあまりやってなかった艦これ。

そういえば・・・と思ってしばらくぶりに起動したら

「艦これ 先行運用版」当選していました ヽ(´ー`)ノ

いくつかのデバイスで動作確認&しばらく運用中。
その辺についてついて少し書いてみようかと思います。
(主に激安系なデバイス)



動作確認したデバイス

タブレット機2台と激安スマホ1台をまずはWIFI環境で動作確認(モバイル回線は後述。

過去「無理やりブラウザで動作」させた状況に比べると総じて軽いです。

元々の艦これが解像度が800x600程度で綺麗に作られている為、安価な低解像度デバイスでもグラフィックがPC版同等で違和感全く無し。

  • Fireタブレット 8GB (Kindle Fire 第5世代。Android 5.1.1 )。
    アマゾンで8980円のデバイス(プライム会員は1台目のみ4980円)。
    ME-173Xよりも若干軽快。とりあえす普通に遊べる。
    余談:このKindle世代(?)からRootを取らなくてもあっさりGooglePlayが入るので「きのこれR」とかでも遊んでます。ただし課金などGoogleAPIまわりは動作しない可能性がありそうなので要注意(未確認。
      
  • Asus ME-173X (Android 4.2.2)
    もはや結構古い機種で艦これ推奨Android4.4以上に該当しない
    しかしあっさりインストール&動作
    今のところ特に問題なし。
      
  • Acer Liquid Z200 (Android 4.4.2)
    激安スマホで一時期話題になったデバイス。現行でも6000円ちょっとで売られている。
    3つの中では最も公式推奨動作要件に合致している(?)デバイス。
    4インチ画面はさすがに少々小さいか?と思ったが慣れれば意外とそうでもない(提督側スキルで補完)。
    遠征、演習、キラ付け程度は特に問題なく運用中。

過去「無理やりブラウザで動作」させた状況に比べると戦闘画面などを見てもどのデバイスでも圧倒的に軽い。
ただやはり母艦(PC版)と比べると微妙に戦闘画面の進行が遅い気はします。

母艦補助運用という意味では良く出来ていると思います。想像以上に軽い印象。



モバイル回線運用

本命のモバイル回線運用。

運用環境は以下の通り。

スマホ本体: Acer Liquid z200 (実売6500円位)
回線: OCN モバイル ONE (データ通信専用カード月額 972円 110MB/日)

※アマゾンあたりでSIMカードを買うと安い。


結論からいうとそれなりに遊べてます。以下にざっと所感記述。
  • 回線速度が結構影響する
    回線が遅いと激しくモタつきます。
    OCN ONEでターボOFFだとかなりきつくプレイ不能レベル。(ターボONだとそれなりに遊べる。
    思うにデバイス性能よりも回線速度のボトルネックが大きい印象。
    ※しかしクライアントは良く出来ている感じで、艦娘のグラフィックが未読込みでもある程度の操作は可能。キラキラなどは優先的に視認できる。
      
  • 通信トラフィックは少ない
    OCN ONEの最安プラン110MB/日で1日1時間程度遊んだくらいでは消費量がわからない位のトラフィック。艦娘グラフィック等は一度読むとキャッシュしている様子。
    ※追記:アップデート直後は50MB位消費。画像など再読み込みのせい?

      
  • 音楽/効果音/ボイスは止めて運用
    Z200はそれなりに非力なスマホなので。(出先でボイスが元気良く出て困る場合も?w
    PC版ではMP3ファイルをネット経由でダウンロード&キャッシュで再生していたはず。Android版もその辺は同じなのではないかと。
    つまり初回キャッシュさせずにトラフィック料金節約という意味では音関係はOFFの方がいいかも?。
    とはいえたまにBluetoothヘッドホン経由でボイス位は出してます。
イベントなどハードな運用は厳しそうですが、遠征、演習、キラ付け程度なら普通にできるので出先で合間に使うには良い感じですね。



運用コスト


とりあえず出先で「艦これ」が最低限できればいいということならば、

Acer Liquid z200 + OCN ONE(等のMVNO系)

が、私的には安価な感じです。

今日アマゾンで見た価格では、

Liquid z200(6140円) +OCN モバイルONEデータ通信専用SIM(400円)。

6540円で始められて、月額972円といった感じ。


※ただしz200はLTEには対応していなかったり、メモリ、ストレージ容量などがかなり少ないデバイスなので提督のデバイス運用能力というか工夫が結構必要です。安い分手間はかかる感じなのでその辺は自己責任で。 

プライム割引キャンペーン中の Kindle Fire(第5世代)は画面インチサイズ、性能ともにそれなりに良いのですが、SIMスロットが無いのがネック。(一応テザリング運用はできる

こちらはWIFIでベッドやソファでゴロゴロしながら運用などには良い感じです。
※一応公式動作保証外だとは思います念の為。
艦これはDMMランチャー管理下&サイトDLなので、GooglePlayは不要だとは思います。
課金まわりの動作が気になるので、その辺はPC版で操作する運用方針。




なんやかんやで、確保すべきはやはり回線速度ですかね。LTEだと挙動が早くなるか気になるところです。



2016年6月25日土曜日

UnityでCardboard SDK使用時エラー対処 ~ Failed to re-package resources.

CardboardのSDKを使ってみたら、いきなりエラーでつまずいたので対処法をメモ。


■問題点

Unity上でビルドすると、

 Failed to re-package resources. See the console. See the Console for details

というエラーダイアログが出る。
 

コンソールログはこんな感じ。



■開発環境


Windows10 Pro (x64)
Unity 5.3.5f1 Personal
Android SDK Manager Revision 25.1.7

アプリはこちらのをダウンロードして使用。

EmergentVR cardboard-unity

これに含まれる以下の2つのパッケージを空のUnityプロジェクトに放り込めばアプリの準備はOK。
  • CardboardDemoForUnity.unitypackage
  • CardboardSDKForUnity.unitypackage
※最新のCardbordのSDKはDaydream対応で名称が gvr-unity-sdk-master 等と変わっていたかも。とりあえずちょっとテストするには問題なし。



■原因

Android SDK Build-tools が最新版(Rev.24)すぎるとまずい模様。
Rev23以前を使えば良さそう。


■対処

Android SDK Build-toolsのRev.24を削除して対処。
Rev23以前を残すようにする。

Android SDKのインストール先ディレクトリから SDK Manager.exeを実行。
(例:インストール先ディレクトリ\android-sdk_r24.4.1-windows\SDK Manager.exe)

起動したら"Tools">"Android SDK Build-tools"の Rev.欄を見る。
Rev.欄が24の行が Installed になっていることを確認。


"Android SDK Build-tools"の Rev. 24の行にチェックを入れて、右下の"Delete 1 package.."をクリックしてアンインストール。

Not Installedになったことを確認。
※すぐ下のRev. 23.0.3 はInstalledになっていることを確認。なっていない場合は、チェックを入れて右下の"install 1 package"をクリックしてインストールしておく。



これでUnity上でコンパイルが通ります。


■機材(おまけ)

Cardboardはハコスコを購入。
6000円位で買ったスマホ AcerZ200で実験。

ちょっと画面サイズがずれたりしてますが、50fps位でていてそれなりにVRぽいです。
(かなり非力なスマホなので激しい3Dアプリは厳しいですが)

ちなみに7インチ以上のタブレットでは画面が大きすぎて両眼距離からかけ離れてしまいうまく見えませんでした。

2016年4月6日水曜日

視線検出センサー Tobii EyeX Controller(対応済みゲーム有り) in Unite2016

最近リアルでいろいろ変化があったりで、更新が滞ってましたが・・・。


Unite2016に行って参りました!(唐突


やはりというかVR、AR機器のデモの賑わいがすごいです。話題のPSVRも体験デモしてきました。



そこで超個人的に気になったのが、


トビー・テクノロジー株式会社が出展していた視線入力機器

つまり「眼球の動き」をトラッキングするというやつです。
 (昔、運転免許証の講習会映画上映で、ドライバーの視線トレースしていたのを見たような記憶)



今まさにVRブーム到来(?)寸前(??)だというのに、やや斜め上(斜め下?)なデバイスに、
つい食いついてしまうのはもう性分なのでしょうがないです(キッパリ
(KindleとかUOYAとか地味にマイナー方面なものをつい買ってしまうパターン)


いや、これはこれですごいんですよ! ヽ(`Д´)ノ

少なくとも一昔前に見たときは感動した記憶。
(一応私は発売元会社とは全く無縁です。念の為)



平たく言うと、マウスカーソルを「眼で=視線で」移動できるようなイメージです。
そんなデバイスが1万円程度で普通に買えるというのが驚きです(値段詳細後述。



マクロス フロンティアに出てくる視線追従の多重ロックオンみたいなこともできそうですが、これはこれでFOVEとか他社でHMD一体型があったと思うので、

やはりここは、


映画「マイノリティリポート」劇中のトムクルーズのあのUI

をMotion Leapと組み合わせてできないかという夢を感じます。

Unite2016のTobiiブースで配布されていたDMカードにはこう書かれています。

See the future
Create the future

(゚д゚)(。_。)(゚д゚)(。_。) コクコク

多分本気出せばもう技術的には夢ではないと思います。
(本気出す=リソース確保=金+時間+人材・・・ですかね・・・やっぱり夢?(笑)


無論SDKはUnityも対応してます。



■買うしか


結論、注文しました(超速

製品名: Tobii EyeX Controller


USB接続タイプです。(メガネタイプもありますが、そちらは業務用らしくお値段も高い)。


輸送2週間位とありますが、多分海をどんぶらこと流れてくるので1ヶ月~1ヶ月半位の心の余裕が必要です。

追記: ShippingのUPSトラッキング メールが来ました。Scheduled Delivery Date: Monday, 2016/04/11。って4/5注文で4/11予定表記(時差加味しても4/12)。正味1週間とかかなり早い気がしますがちょっとあてにしてみましょう( ̄ー ̄)
追記:発送元はスウェーデン、UPS便4/9に到着。早っ。

定価は139USD(119ユーロ)。本社はスウェーデンらしいのでユーロ圏ですね。

サイトを見ると4月はなにやらキャンペーン(?)期間らしく、

  • Assassin’s Creed Syndicateのゲームコードが無料(勿論Tobii EyeX Controller対応
  • 海外シッピング無料(これ結構大きい
  • Unite2016来訪者はブースでDMカード貰っていれば139USDが95USDになるクーポンコード有。


シッピング無料は結構太っ腹だと思います。
クーポン併用で119ユーロが83ユーロ。円換算で10871円でした。


購入サイト(海外本社サイト): http://www.tobii.com/xperience/
(ちなみに国内法人サイトはこちら: http://www.tobiipro.com/ja/




■対応ゲーム

数は少ないですが、一部有名タイトルのゲームも対応済みな様子。

サイトに対応ゲームの一覧があります。Assassin’s Creed やTom Clancy
ユーロトラック2等々。


対応アプリ一覧: http://www.tobii.com/xperience/apps/


何気にMSIが出しているゲーミングノートPCのGTシリーズにこのデバイス標準搭載品があったりします(ArienWareに似てる気がするのは気のせい?)。


対応ゲームがあるとすぐ遊べて使用感もわかるし、SDK使って何か作る際の参考にもなりそうです。





■Windows10の生体認証対応

Windows10は生体認証に対応で、それを「Windows Hello」と呼んでいるらしい。

ログイン時にパスワードが不要とあるので、生体認識でログインということだと思います。


Tobiiの本家公式サイトを読む感じでは(理解があっていれば、

  • デバドラ不要。Tobii EyeX Controllerのドライバ類はWindows10にビルドイン済み。
  • 認証には顔、虹彩(アイリス)を用いている。

らしいです。

虹彩は指紋同様に個人識別情報としては古くから有用とされてますが、実際どこまで識別強度が高いのかは気になるところ。

Windowsのログイン用途なら充分かもしれないし、これもちょっと面白そうではあります。

※追記: Windows10にしたので「Windows Hello」使用中。便利ですねこれ。




■技術的な(勝手な)考察

Tobii EyeX Controllerは赤外線LEDと受光センサーを用いているらしいです。
(受光センサーの詳細は不明ですが、画像用のCMOSセンサーかも???)

皮膚自体の温度によるサーモグラフ的なものと、眼球の赤外反射をうまく利用してそう?

眼球は赤外反射が皮膚とは特性が異なると思われます。
また、黒目と白目も眼の構造上反射率が違う気がします。
(猫の目が夜光って見えるときがあるのと似た話?)

ということを仮定して妄想すると。
  • 顔はサーモグラフ的なパターンでそこそこ認識できそう。
    ※というか昔CCDで赤外撮影してたような映像で捉えるのかも?
  • 皮膚と眼球付近の温度差で眼の面積部分を抽出できそう。
  • 黒目中央付近から入射した赤外と、白目付近に投影された赤外は反射の加減が異なるような気がする。
ということから、顔認識、白目面積内での黒目の位置などを割り出せそうな感じかも?





などと、妄想しながら到着を楽しみに待つことにしますヽ(´ー`)ノ

追記: TobiiもMotion Leapも赤外線ですね。同時使用は厳しいかなぁ・・・。Motion Leapも買えばわかるk(ry。

2015年10月17日土曜日

オブジェクトのタグ名検索でハマったこと

Unityでオブジェクトのタグ名検索でちょっとハマったのでメモ。

結論からいうと、オブジェクトのタグ名検索があてにならない特定の状況&タイミング(?)があるので注意。
※ひょっとするとどこかに明記されてる(?)既知の仕様かもしれません。


■環境


Unity 5.1.1f1 personal (C#使用)
Windows7


■注意すべき状況&タイミングの概要


タグ付け済みの子オブジェクトを含む親オブジェクトのプレハブがあるとします。
そして既にシーン上にInitiate済みとします。

説明の便宜上オブジェクト名、タグ名は以下とします。
  • 親オブジェクト名:ObjectA
  • 子オブジェクト名:ObjectC (タグ名:TagObjectC)


問題(?)が起きる手順。
  1. タグ名(TagObjectC)で検索したものを GameObject型の変数に保存。
    ※特に問題なし。
     
  2. ※時間経過でフレームが進み、現在 n フレームとします。
     
  3. ObjectA を Destroyする。
    ※つまり子オブジェクト(ObjectC)も消えます。
     
  4. 同フレーム中にObjectAを再度Initiateする。
     
  5. 「1.」でタグ名(TagObjectC)検索&保存済みのGameObject型の変数の指すObjectCは既にDestroy済み。
    新たにタグ名(TagObjectC)で検索して保存しなおします。
    つまり「4.」で Initiate した ObjectA 内にて検索&結果が返ることを期待しています。
     
  6. ※時間経過で次のフレームに進み、現在 n+1フレームとします。
     
  7. 前フレームでタグ名検索&保存しておいた GameObject型の変数にて ObjectCを参照してみます。
    この時、この変数 はいつのまにか勝手に null になっています。

ちょっとややこしいですが(;・∀・)

注意する点の要約は、

  1. 同フレーム中に同名のプレハブをシーン上でDestroy &  Initiate した。
    ※シーン中に当該プレハブの同時存在は1つ。
     
  2. さらに同フレーム中にてタグ名検索をかけた。
    ※新たにInitiateしたプレハブのオブジェクト内で検索HIT&結果取得することを期待。
     
  3. Destroyした方のタグの付いたオブジェクトを返している&同フレーム中は null ではない。
     
  4. 次のフレームでいつのまにか null になっているので「アレっ?」となる。
    ※Destroy処理がタグ名の内部DB?Hash?にも反映された為?


多分、同フレーム中での実際のオブジェクトのDestroyの処理が行われるタイミング、タグ名とシーン上のオブジェクトの関連性更新などのタイミングの差異問題だと思うので「そういう仕様になっている」ような気がします。

※上記処理の確認はUpdate()内で行っています。FixedUpdate内では未確認。こっちだとひょっとするとDestroy後タグ名の参照先更新(?)がされるかも?


■回避策


今回の状況&タイミングにおいては、子オブジェクト名で検索をするように実装すれば回避できています。
つまりオブジェクト名検索ではさすがに同フレーム中でもInitiateした最新の方をみてくれるようです。

なので今回のケースではタグ名検索を使わなければハマらなかったわけですが(汗。

前々からタグ名検索は便利そうな反面「何かありそう」なモヤっとした雰囲気を感じていたのが少し納得できた感じです。



2015年8月3日月曜日

Shadow Projector活用サンプル~地面から離れると小さく消失する影~

Unity提供のアセット(Shadow Projector)で「丸い影」を落とすサンプル。

ただし上昇して地面から離れるほど影を小さくして消失させます。







サンプル

環境: Windows7x64。Unity5.1.1f1 personal。

プロジェクトのダウンロードはGitHubサイト右下 Download ZIP
https://github.com/maruton/Sample_ShadowProjector



概要

普通(?)にShadow Projectorを利用して「丸い影」を落としたのが下の図1。影を上から照射しています。

この場合、上昇していくと影は次第に大きくなります。
(ある程度の高さを超えると影は薄くなり見えなくなります)

図1


上昇していくと小さくなり、やがて消失する影を考えてみます。

図2は影を下から照射しています。
下方から照射しても床の裏側だけでなく、表側にも影がレンダリングされることを利用します。

図2



光の回折

現実世界で太陽光下(無限遠から平行に照射)のような状況にて、光の回折を考えた場合。
高度が上がるほどに太陽光は真下に回り込むようになります。

結果、上昇していくと影は徐々に小さくなりいずれ完全に消失します。
(電灯などの近接してる非並行な光では逆に影は大きくなったりするので図1の方が自然な感覚)

Unityで屋外フィールド上をキャラクタが上昇/下降するような場合、演出的にも影が小さくなることで高度が上がってる感が出しやすそうです。


とはいえ「誰も影なんかそこまで見てない」という意見が最も的確な気もしますが、


ちょっとやってみたくなったので ⊂⌒~⊃。Д。)⊃


と、強引な動機付けが済んだところで、以後簡単に補足説明。

※夏休みの自由研究に格子回折とかちょっと面白いかもしれません(´∀`)




使用するアセット

Shadow projectorのAssetはUnityに標準で提供されていますが、パッケージ名がUnity5で変わったようです。

Shadow projectorを含むAssetは上部メニューから、

Assets > Import Package > Effects

で、インポート。



Shadow projectorの配置

ここではCubeをキャラクタに見立てて配置しています(オブジェクト名Character)。

インポートしたAssetに含まれる BlobShadowProjector をCharacterオブジェクトにドラッグ&ドロップして子Objectにします。



BlobShadowProjector が下から影を照射するように配置。



Floorオブジェクトに影の照射はしつつもCharacterオブジェクトには照射したくないのでレイヤで調整します。

ここでは簡単に、
  • レイヤ名Characterを新しく作り、Characterオブジェクトをそのレイヤに設定。
  • 子オブジェクト BlobShadowProjector はDefaultレイヤのまま。
さらに 子オブジェクトBlobShadowProjector を選択、Inspector内の Ignore Layersに レイヤ名 Character を指定。

これで レイヤ名 Character に配置したCharacterオブジェクトには影が照射されなくなります。


この状態で床下、床上を見ると以下のようになります。

影は床の表裏ともにレンダリングされているので、床上でも影が見えます。

ここでオブジェクトCharacterを上に移動していくと影が小さくなり、BlobShadowProjector が床よりも上に出た時点で影は消失するようになります。


この辺の微調整は BlobShadowProjector の Inspector内の Field Of View で行います。
他、照射の距離範囲はNear Clip Plane、Far Clip Plane等々。




ここまでで一応、上昇すると影が小さくなりやがて消失する影が簡単にできます。

しかし、Characterオブジェクトが傾むく動作をすると、子オブジェクトのBlobShadowProjector はぶら下がった振り子のような挙動になる為、真下に影が照射されません。

サンプルプロジェクトではこの辺も対応しています。



補足

  • 地面から遠くなるにつれて影の輪郭がハッキリしてしまう
    本当は徐々にぼやけていくべきですが、しくみの都合上仕様です。
    がんばってシェーダーをいじればぼかすこともできるかもしれませんが、軽量低負荷簡単手抜きという目的もあるので割り切ってしまう方が得策と思います。
    シーン上での見せ方とか、高速移動してるとどうせわからないとか、ごまかす手段はいろいろありますタブン|∀゚)
     
  • キャラクタ本体のScaleに注意
    親Objectであるキャラクタ本体と BlobShadowProjector  のScale値が等しくない場合、子オブジェクトの距離指定時に相互Scaleの比率で倍率がかかります。詳細は割愛しますがUnity4頃からこうなっているので仕様なようです。
    距離に倍率をかけて補正すれば良いだけですが無駄な演算が増えるのでScaleは共に <1,1,1>にした方が無難です。
     
  • 本体キャラが縦長の場合
    影そのものはBlobShadowProjector のInspector内のAspect Ratioで縦横比を簡単に変更できます。問題はキャラ本体の向きに追従させなければならない点ですが、サンプルでは軽量化の為考慮してません。
    BlobShadowProjector の向きをキャラ本体の向きに合わせるように制御すれば可能だと思います。
     
  • 本体キャラがロール/ピッチ変動する場合
    サンプルのiTween移動のようにロール/ピッチ角が変動すれば影の縦横比も変動すべきですが、これも軽量化の為に常に丸影です。
    まじめにAspect Ratioを動的に変えてやればそれっぽい楕円な影が落とせそうです。(でもロール/ピッチの両方はちょっと面倒そうです。Field Of Viewも動的にいじらないとダメかも?)


    しかし所詮「丸影」なのでそこまでする必要性は要検討です。

結局なんちゃって影なので、凝るのはほどほどにしておくのが良さそうです(´∀`)