2015年7月6日月曜日

艦これで通信エラーを回避する方法

艦これで通信エラーを「ある原因においては」確実に回避できることがわかったのでメモ。

(キーワード「艦これ」で当ブログに辿り着いてる方も結構多いようなので、有益かも?と思いメモです)


状況

  • インターネット接続は問題ない。他のサイトは問題なく閲覧できる。
  • 艦これサーバは落ちていないしメンテ中でもない。
  • ログイン画面はすんなり開ける。しかしログイン後の母港画面に辿りつけずに「通信エラー」になる。
  • 特に艦これサーバの混雑で「通信エラー」になっている様子でもない。
  •  キャッシュクリアしても直らない。
  • とにかく自分だけ?ダメなの?そうなの?つД`) タスケテ;




原因と解決策

PCの時計がJST(日本時間)で現時刻を示していないと母港画面手前で「通信エラー」となってしまうようです。

今のところ再現性が100%なので海外アクセス対策(?)のひとつとして艦これサーバ側がチェックしているように思えます。

つまりPCの時計がずれていないか確認しましょう。

もしずれていたらPCの時計を日本時間で現時刻に合わせてみましょう。

他の要因がなければこれでアッサリ母港まで辿り付けます。

ちなみに時計設定時のズレ分はプラスマイナス9分以内にすること。その根拠は後述。
※普通にあわせればまず問題なし。



艦これが許容する時刻のズレ分

「時計を合わせましょう」だけではあまり面白くない(?)ので、

艦これの要求するPC時刻精度

はどれくらいなのかを軽く調べてみました。


毎回キャッシュクリア&PC時刻を意図的にずらしてテスト。ずらし分は秒単位で管理。

(電波時計を目視にて確認、ずらし分加算して手動でPC時刻設定。目視&手動の為1~2秒程度の誤差はありえます)

  • 現時刻 -10分:通信エラー
  • 現時刻  -9分:問題なし
  • 現時刻  +9分:問題なし
  • 現時刻 +10分:問題なし
  • 現時刻 +11分:通信エラー
  • 現時刻 +13分:通信エラー
  • 現時刻 +15分:通信エラー
  • 現時刻 +20分:通信エラー

といった結果から、おおむねプラスマイナス10分付近を判定の基準にしていることが伺えます。

+10分がOKなのに-10がダメなのは目視&手動テストによる誤差か、艦これサーバ側のプログラムの条件判定が >(Grater) か>=(Greater equal)か等の微細なものによる可能性もあるかもしれません。


ということで、この結果から、

PC時刻はプラスマイナス誤差9分以下程度なら大丈夫ぽい

ということがなんとなくわかります。


※将来的にもこの通りかはわかりません。サーバ側が変更される可能性もありえます。
また、本気で海外アクセスを排除するなら他にいくらでもチェックできる箇所はありえるので。




独り言

許容9分として、月差換算(30日)すると1日18秒まで許容となります。

クォーツ腕時計の精度なら余裕でクリアですが、最近のIT機器(特に安価なもの)では微妙に油断できないかもしれません。

PCのRTCはX'talの品質精度や温度、RTCの補正機能などにも関係しますが昔みた時は月差1分以下程度だった記憶。
未確認ですが最近の安価なノートブックあたりは私的には少し気になります。

一部の携帯電話などは一ヶ月で普通に5分以上ズレるものもありました。
通信がオンラインの場合は適時ネットワーク経由で時計補正しているのでズレにくい。
通信オフラインの場合は機器内蔵の時計精度に依存します。部品構成によるので一概には言えませんが。コストをケチりだすとCPU内蔵RC発振とか安価なセラロックを使うということもありえます。これはクォーツ腕時計=X'tal使用よりも低精度です)

昨今はオンライン時刻補正(NTPサーバで時刻同期)があたりまえになってきているので、より部品のコストダウン=低精度化しているような気もします。

つまり1日~1週間に1回は補正する前提。しばらく電源を入れていないPC/携帯や、オフライン運用併用で運悪く時刻同期できない期間が長かった場合はかなり時計がズレているということになります。


NTPサーバによるオンライン同期も実は「絶対」とは言い切れず、たまにサーバが落ちてたりすることもあり実は同期できていないなんてことも。
NTPサーバは比較的実害が低いと見られている(?)のか運用優先が低そうな気も(?)。
(ソフトのリビジョン管理等ではタイムスタンプは結構大事ですが)


過去にはNTPサーバそのものの時刻が(多分管理者の国地域の)ローカル時刻を指しておりタイムゾーン指定されていないのか、その分GMT時刻がズレる・・・なんてこともありました。
(有名企業のNTPサーバでもたまにおかしいこともあったので安心はできません)





たま~にPC(携帯)時刻を見て「だいたい合ってるな~」程度に確認しておくと良いかもしれません(´∀`)





2015年7月1日水曜日

Kindle FireからAmazonアプリストアが開けない場合の対策

急にKindleからアプリストアが開けなくなった問題を解決してみたメモ。

Android機では「またか」と思うけど、Kindle機だとちょっと焦る不思議。

状況

使用機種はKindle FireHD8.9。
  • Amazonアプリストアがある日突然開けなくなった。
  • WiFi~ネット接続は問題無し。
    ブラウザでネットは閲覧可能(Firefox/Chromeで確認)。
  • 何かしらアクセス不能に陥ってる様子。
    Amazonアプリストアのサイトにアクセスできていないような雰囲気?。
    (DNS解決失敗?サイトが落ちているわけはなさそう)




対策

結果的にアプリストアを担う(らしい?)アプリのキャッシュ&保持データをクリアして解決。

以下手順。
※Kindle FireHD8.9以外だとメニューの類が違うかもしれませんが、探せばどこかに同じような項目があると思います。
※作業中のバッテリ切れに注意。USB給電して作業が安心。



ホームで画面上部から下へスワイプ。
メニューが出るので右上の「その他」をタップ。



「設定」画面になる。「アプリケーション」をタップ。


「アプリケーション」画面になる。「インストール済みのアプリ」をタップ。


「インストール済みのアプリ」画面になる。フィルター:欄を「すべてのアプリケーション」にする。
アプリ一覧で下へ見ていき「Apps」を見つける。
2つあるのでサイズの大きいほう(下図では27.61MB)をタップ。


「データ削除」をタップ。
※すぐ下に「キャッシュ削除」も見えるが、「データ削除」でキャッシュも消える。


確認のダイアログが出るので、「OK」で削除。



次にホーム画面に戻り、本体電源ボタンを押下し続ける
シャットダウンしますか?とのダイアログがでてもそのまま押しっぱなしを継続

10秒位押下し続けると画面が消えるので、その後電源ボタンを離す
再度電源ボタンを押して、電源を入れる(再起動)。


ホーム画面の上部メニューから「アプリ」>「ストア」でAmzonアプリストアに行ってみる。

しばらく画面が暗転のままの場合があるかもしれないので焦らず待つ。結構長いです(10秒位?)。
※多分クラウド~端末アプリの情報同期とかKindle特有の高解像度アイコンをダウンロードしてると思われます。


アプリストア画面がでてくれば成功です。


※ワンボタンでクリーン化するアプリかメニューでも提供されていれば便利かも。 一般の方にこんな面倒な操作はさせないのが本来は良いはずで・・・。Kindleは実機からサポート要求するとコールバックで即電話かかってくるのはすごいのですけどね 。問題がそれで解決できれば・・・。



非Kindle機だとGooglePlayからインストールできるAmazonApp(アプリ購入/クラウド同期)もありますが、これもこれでたまにおかしくなることがあるようで・・・。


2015年6月16日火曜日

iTweenパス上を前を向きながら移動するサンプル

iTweenパス上を前を(進行方向を)向きながら移動するサンプル。





環境

Unity 5.0.1f1 Personal.
iTween Visual Editor.
※Asset Storeからインポート。




概要

乗り物等の移動物をちょっと動かす際に便利。
移動経路の作成にはAsset Store にある iTween Visual Editor を使用。
 (参考: iTweenパス上をユーザー操作で移動するサンプル) 


結論から言ってしまうと、

iTween.MoveTo(gameObject, table);

で、引き渡す table に、

table.Add( "orienttopath", true );
table.Add( "lookTime", 1.0f );

を追加するだけでできてしまう。

lookTime で与える数値で姿勢転換の強度を指定。
  • 小さい値: 姿勢転換が早くなる。
  • 大きい値: 姿勢転換が緩やかになる。

姿勢転換の挙動は移動パスのカーブの孤の大きさや、移動速度(time)にも関係するので要調整。

移動するオブジェクトの向き(XYZ)と姿勢の関係は、
  • Z+: 前
  • Y+: 上
  • X+: 右
となっているので、予めこのようにモデリング/エクスポートしておくか、空のGameObjectを作って中に放み込み&向き調整等で。




サンプル


サンプルソース
-----
/*
 * @file csMoveHeadingToPath.cs
 * @note  None 
 * @attention 
 *    [csMoveHeadingToPath.cs]
 *    Copyright (c) [2015] [Maruton]
 *    This software is released under the MIT License.
 *    http://opensource.org/licenses/mit-license.php
 */
using UnityEngine;
using System.Collections;

public class csMoveHeadingToPath : MonoBehaviour {
 string pathName = "MyPath";
 float pathTime = 18.0f;//5.0f
 Hashtable table = new Hashtable();
 void SetupPath(){
  table.Add( "path", iTweenPath.GetPath(pathName) );//ITween path hash data
  table.Add( "time", pathTime );
  table.Add( "easetype", iTween.EaseType.easeInOutSine );
  table.Add( "onstart", "cb_iTweenStart" );  //Handler func when iTween start
  table.Add( "onstartparams", "Start" );   //parameter of Handler func when iTween start
  table.Add( "oncomplete", "cb_iTweenComplete" ); //Handler func when iTween end
  table.Add( "oncompleteparams", "Complete" ); //parameter of Handler func when iTween end
  
  table.Add( "orienttopath", true ); //Head to forwarding vector (*Important*)
  table.Add( "lookTime", 1.0f ); //Time value for heading nose (*Important*)
  
  iTween.MoveTo(gameObject, table);
 }
 void cb_iTweenStart(string param){
  Debug.Log("[iTween] cb_iTweenStart: "+param);
 }
 void cb_iTweenComplete(string param){
  Debug.Log("[iTween] cb_iTweenComplete: "+param);
  iTween.MoveTo(gameObject, table);//Restart iTween.
 }

 void Start () {
  SetupPath();
 }
 void Update () {
 }
}
-----

Unity5用プロジェクトのダウンロード。
Git-Hub:https://github.com/maruton/Sample_iTween_HeadingPath



2015年6月11日木曜日

.gitignoreの正規表現

リビジョン管理ツールGitの.gitignore の正規表現についてメモ。


ネットで検索するとだいたい「正規表現が使える」とあるのですが。

実際やってみるとどうもうまくいかない・・・あれぇ・・・;。


厳密には正規表現ではない?

何をもって正規表現とするか・・・ですが。
とりあえず私的には、この辺の本を一応のリファレンスとしています。





どうもここで言う「正規表現」が .gitignore で全部使えるわけではないようです。





公式ドキュメントをみる

仕様は本家にありき。
ということで本家にいくとありました。

http://git-scm.com/docs/gitignore


どうも一部の複合的な表記はできないのかもしれません。

むしろ複雑すぎる表記はもっと簡便に書くべき・・・なのかもしれません。
運用上もわかりやすいし。




Unityで使う .gitignore

githubに .gitignoreのリポジトリがあります。
(なんかややこしい日本語ですが)



gitbub / gitignore



ここを見ると各種言語用に大量の .gitignore が登録されています。

この中に

Unity.gitignore

が下の方にあるのでとりあえずこれを使うと面倒が無い感じです。
あとは各自の好みで追加したりです。


2015年6月9日火曜日

SDユニティちゃん活用その7 ~公式配布表情アニメと互換性を持たせてBlenderでエクスポート~

Blender経由でFBXエクスポート&UnityでFBXインポートしたSDユニティちゃんで、表情アニメを公式配布スクリプトで動作させるメモ。




環境

Windows7x64
Unity 5.0.1f1 Personal
Blender2.74(x64)
SDユニティちゃん 3Dモデルデータ Download ver1.0。(2015/5時点最新)

※作業中素材には『ユニティちゃんライセンス』で提供されるコンテンツを利用しています。





概要

顔の表情はシェイプアニメで作られています。
公式配布SDユニティちゃんのFBXファイルをBlenderでインポート&エクスポートすると、

シェイプアニメの、
  • 定義名
  • 並び順 
が変わってしまいます。

これが原因で公式配布のスクリプト(FaceUpdateや、まばたき)アニメーションからの表情制御が動作しなくなっています。


Blender上でこの辺を調整してエクスポートすれば、公式配布のスクリプト、アニメーション下でも表情が動きます。




Blenderで作業

Blender上で作業します。

Blenderを起動、公式配布のSDユニティちゃんのFBXファイルをインポートしておきます。
(参考: SDユニティちゃん活用その1 ~Blenderでインポート~

Humanoidモデルをインポートして使っていますが、シェイプアニメはGenericモデルでも同じだと思います。

  1. Outlinerウィンドウ上から、
  2. インポートしたモデルの階層を展開し、
  3. _faceオブジェクトを選択する。
  4. Propertiesウィンドウから、
  5. Object Dataをクリック
  6. Shape Keysパネルにシェイプキーの定義名一覧が表示。

図中のShape Keys一覧のように定義名、並び順を変更します。



Shake Keysの定義名の上でダブルクリックで名前を変更できます。
定義名を選択し、右にある上下ボタンで並び順を変更できます。



モデルをFBXエクスポートします。
(参考: SDユニティちゃん活用その3 ~Blenderでエクスポート~




Unityで作業


□インポート

Unity上で先程FBXエクスポートしたモデルをインポートします。
(参考: SDユニティちゃん活用その4 ~Blender出力のFBXファイルをUnityでインポート~)



□スクリプト設定

表情の動作確認に公式配布のFaceUpdateスクリプトを利用します。

インポートしたモデルにFaceUpdateスクリプトを追加、Inspectorからスクリプト内の変数を以下のように設定します。



Animatorにアニメーションコントローラ SD_unitychan_motion_humanoid を設定します。

AutoBlinkforSDスクリプトを追加します。(まばたき用)


これでUnityをPlayしてGUIボタンで表情の動作確認ができます。


※この辺の一連のスクリプト設定を自動化するスクリプト(C#)を書いたので後述します。何度か繰り返す場合は少し楽ができるかもしれません。




スクリプトで設定の自動化

以下のことを自動化するコードを書きました。

自動追加後の各スクリプトの持つ変数は、配布モデルの既定値に自動で初期化します。

  • Animatorにアニメーションコントローラ SD_unitychan_motion_humanoid を設定。
  • IdleChangerスクリプトを追加。
  • FaceUpdateスクリプトを追加。
    ※Animations配列のElementも設定します。
  • AutoBlinkforSDスクリプトを追加。
  • RandomWindスクリプトを追加。



□ダウンロード

C#ソースはGitHubに置いてあります。次のURLでサイトを開き、

https://github.com/maruton/Tools_for_SDUnityChan


右下付近の「Download.ZIP」でダウンロード&展開。

Setup_Animations_for_SDUnityChan.cs をUnityのAssetにドラッグ&ドロップして追加しておきます。



□利用方法

便宜上文中でモデルの呼称を以下のようにしています。

SD_unitychan_humanoid : 公式配布のPrefabsフォルダにあるモデル。
blender_SDUnityChan :  Blender経由でUnityにインポートしたモデル。


  1. SD_unitychan_humanoid がシーンにあることを確認
    もしなければシーンに配置します。

  2. blender_SDUnityChan をシーン上に配置。

  3. 空のGameObjectをシーンに配置。
    CTRL+SHIDT+N で空のGameObjectを追加できます。
    Setup_Animations_for_SDUnityChan を追加し、Inspector上の
    • Go_Original にシーン上の  SD_unitychan_humanoid をドラッグ&ドロップ。
    • Go_Target  にシーン上の blender_SDUnityChan をドラッグ&ドロップ。
  4. Unity を Play。
    START ~ COMPLETE とログウィンドウに表示されれば設定完了しています。
    ※もし ERROR や not found などが見える場合は、Go_Original、Go_Targetの設定やモデルに問題がある可能性があります。

  5. シーン上の blender_SDUnityChan をAssetにドラッグ&ドロップ。
    この状態で(UnityがPlay状態のまま)、シーン上の blender_SDUnityChan をAsset(フォルダ Assets/Blender_SDUnityChan/Prefab あたりに)にドラッグ&ドロップ。
    各種設定済み状態でAssetに保存されます。
    このモデル名を便宜上 blender_SDUnityChan 1 としておきます。
    ※名前はなんでも構いません。文中で区別する為です。

  6. Unity のPlayを停止。

  7. blender_SDUnityChan 1 をシーンに配置。
    Inspector上から以下のコンポーネントにチェックを入れてEnableに。
    • Animator。
    • AutoBlinkforSD
    • RandomWind


  8.  シーン上blender_SDUnityChan 1blender_SDUnityChan_FaceOKにリネーム。

  9. シーン上の blender_SDUnityChan_FaceOK をAsset(フォルダ Assets/Blender_SDUnityChan/Prefab あたりに)にドラッグ&ドロップ。

    以後このモデルを使えば、設定済み状態で使えます。

blender_SDUnityChan_FaceOKをシーンに配置してPlayします。
(他にSD_unitychan_humanoid 等のモデルはシーンに置かないで下さい)
GUIからいろいろボタン操作すると表情も動きます。


公式配布のアニメーション動作にも表情が連動します。

補足: ユレモノ設定(SDユニティちゃん活用その6 ~SDユニティちゃんにユレモノを自動設定する~)をしていない場合は、RandomWindスクリプトは外して下さい。Consoleウィンドウにエラー表示がでます。