Deeplinkってやつを試してみました。iOSのみだけど。
カテゴリー別アーカイブ: 未分類
[VR]VR ZONE & GAME ON に行ってきた
VR ZONE
VR ZONE は namco さんが出展しているDiverCityTokyoPlazaにある期間限定のブースです。中にはVRコンテンツが多数展示されていて、料金の違うコンテンツを600円〜700円程度支払って体験します。
入場するには予めネット上から予約を行って1時間半単位での入場時間を得ます。
– 公式サイト
入場時に首から下げる入場者用カードを手渡されます。
その後、バナパスポートというRFIDチップ入のカードを購入したり、入り口にあるチャージマシンで体験機で支払うバナコインを現金でチャージする必要があるので人数によっては数分の待ち時間を要します。
[Mac]Unityでゲーム開発するマシンに入れておいたほうが良いモノ、設定しておいたほうがいいコト
インストールしておくと幸せになれるアプリケーション
- Unity3D
Unityで開発するんだからUnity入れないと!
フリー版でも十分に開発できる。 -
Xcode
iPhoe用ビルド出力時やgitのインストールで必要になる。 -
FBX viewer
デザイナから受け取ったデータを確認するのに必要。 -
Blender
無料DCCツール。自前でAnimatorの使い方とかを勉強する際に使い方を覚えておくと便利。
SerializeFieldのデフォルトはnullであってnullでない
Unityのエディタ上でAssetを選択するとInspector上にD&Dで設定できるObjectFieldがある。
publicに指定したり、SerializeFieldなどのAttributeを記述するとInspector上に出現し、指定の型に合ったAssetの参照を関連付けすることができるおなじみの仕組み。
ここに何も指定していなかった場合の対応策として null合体演算子
という条件演算子がある。
これで判定して対応しようとすると上手く動かない。

ReportCrashを起動させない
Macでアプリケーションを操作しているとアプリケーションがクラッシュ(不正終了)することがある。
アプリケーションがクラッシュするとでてくるのが ReportCrash
ウィンドウ。
このウィンドウは、ウィンドウ右下のボタンによって閉じ無いと Com + TAB でのアプリケーションの切り替えではでてこ無いし、プロセスにも残り続ける。
Activity Monitor
にも上位にランクインするし、マシンも延々と熱くなるので厄介極まりない。
そのうえプロセス上からQuitしても消えてくれ無い。再起動が必要で、再起動後も残り続けることがある。
どうやらアプリケーション自体が巨大であればあるほど ReportCrash
もマシンのリソースを奪うようだ。
この ReportCrash
を起動させ無い方法がある。
[C#]継承できないenumの代わりはClass内Classで
4月中に気になった本まとめ
[wp_ad_camp_1]
ソフトバンククリエイティブ
売り上げランキング: 6,718
UI大事。
技術評論社
売り上げランキング: 171
今現在読んでる本
翔泳社
売り上げランキング: 228,840
こないだ読み終わった本。尼の評価は低いけど、個人的には知らなかったC#の側面が分かってよかったなぁと。
Unityでは.NET 3.5だから.NET5の話とかは知る由もないわけで。Unity使ってる人は読んどくといいと思う。
技術評論社
売り上げランキング: 356
通勤用に。
ソフトバンククリエイティブ
売り上げランキング: 5,883
あんまり目新しい事は書いてないけど、こういうときの実装はこうしたら良いよ、のサンプルが多いので経験値稼ぎとして良い本だと思う。
オライリージャパン
売り上げランキング: 2,055
再読した。
[Unity][C#]StopCoroutineが動かない
Coroutineの挙動が不信だったので調べてみたのでメモ。
当初の状況
あれ?yield return www;してるからwwwインスタンスがデータ取得してからでないと次進まないはず
にも関わらずwww.textよめねーぞって怒られる。なんでだ…?
Reset()もできずハマる。
今回の問題点と目的
- coroutineはStopCortoutineした後に同じメソッドをStartCoroutineするとStopしたところから再開するんじゃ?疑惑の解消
- Start/Stopの動きを先ず確認
- 進む原因は?
ダメなソース
using UnityEngine; using System.Collections; public class coroutine : MonoBehaviour { // Use this for initialization IEnumerator Start () { StartCoroutine(Test()); Debug.Log("StartCoroutine 1"); yield return new WaitForSeconds(2f); StopCoroutine("Test"); Debug.Log("StopCoroutine"); yield return new WaitForSeconds(2f); StartCoroutine(Test()); Debug.Log("StartCoroutine 2"); } IEnumerator Test() { Debug.Log("Test Start"); yield return new WaitForSeconds(1f); Debug.Log("1 second"); yield return new WaitForSeconds(1f); Debug.Log("2 second"); yield return new WaitForSeconds(1f); Debug.Log("3 second"); yield return new WaitForSeconds(1f); Debug.Log("4 second"); yield return new WaitForSeconds(1f); Debug.Log("5 second"); Debug.Log("Test End"); } // Update is called once per frame void Update () { } }
結果
コンソールにはこんな表示が。
StopCoroutine()した後も元気に走り続けるTest()の姿が!
原因は、文字列ではなくハンドラを直接StartCoroutine()に渡していた事。
StopCoroutine()は文字列で受取った指定のCoroutineしか参照できず、あたかも処理を完遂したかの様にエラーも出さなきゃ警告も出ない。
修正
using UnityEngine; using System.Collections; using System.Collections.Generic; public class coroutine : MonoBehaviour { // Use this for initialization IEnumerator Start () { StartCoroutine("Test"); Debug.Log("StartCoroutine 1"); yield return new WaitForSeconds(2f); StopCoroutine("Test"); Debug.Log("StopCoroutine"); yield return new WaitForSeconds(2f); StartCoroutine("Test"); Debug.Log("StartCoroutine 2"); } IEnumerator Test() { Debug.Log("Test Start"); yield return new WaitForSeconds(1f); Debug.Log("1 second"); yield return new WaitForSeconds(1f); Debug.Log("2 second"); yield return new WaitForSeconds(1f); Debug.Log("3 second"); yield return new WaitForSeconds(1f); Debug.Log("4 second"); yield return new WaitForSeconds(1f); Debug.Log("5 second"); Debug.Log("Test End"); } // Update is called once per frame void Update () { } }
これだと以下のように動く。
ちゃんとStopCoroutineで止まってくれた。
そして疑惑だった途中再開もされていない。文字列で指定すればStopCoroutine()もちゃんと機能するということも分かった。
おまけ
- Startが今回のサンプルの様にIEnumeratorを返すタイプなのにStopAllCoroutines()をするとStartまで止めてしまうので注意。
- Resetは必要無い。
- IEnumeratorにparameterを渡す場合は第二引数に入れて上げれば機能する。
参考
[iOS]Json形式のテキストを読み込んでNSDictionaryにする
このメモはSBJson frameworksに関するもの。
記述時点での正式リリースバージョン3.0.4
参考:http://stig.github.com/json-framework/api/3.0/
ARC適用する場合は3.1α以降でなければ動作しない。
http://ip7.biz/wordpress/?p=1008
導入手順
- ターミナルを立ち上げる
- gitから入手すべく以下を入力してENTER
-
git clone git://github.com/stig/json-framework.git
- DLしたファイルを解凍し、解凍したファイル下のClassフォルダ内のファイルを自分のプロジェクトフォルダにD&Dしてコピーする。
- もしビルドが通らないのであれば、、Build Phases のCompile SourcesにSBJon関連全ファイル(.m,.h)を追加することでBuildを通す事が出来る。
- この時のエラーメッセージ
_OBJC_CLASS_$_SBJsonParser", referenced from:
- Json形式のファイルを扱うクラス(.m)内で以下を記述
-
#import
- JSON形式のファイルを扱うクラスヘッダ内で以下を記述
-
@class SBJsonStreamParser;
-
@class SBJsonStreamParserAdapter;
テキストファイルから読み込むんでデータ化
テキストファイルから読み込む
//read file NSString* fileName = [NSString stringWithFormat:@"dummyData"]; NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Documents"]; path = [path stringByAppendingPathComponent:fileName]; NSData* data = [NSData dataWithContentsOfFile:path];
読めてなかったら強制終了
if(data == nil) abort();
データを文字列にエンコード
//Data encode to NSString. NSString* dataStr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"data = %@",dataStr);
SBJsonでパースする
//SBJson parse to NSDictionary. SBJsonParser* sbjsonparser =[[SBJsonParser alloc]init]; NSError* error; error = nil; NSDictionary* dic = [sbjsonparser objectWithString:dataStr error:&error]; NSLog(@"JSON dictionary=%@", [dic description]);
テスト
読み込んだテキストファイルの中身
{ "buttonArray":[ { "word":"キウイ", "imgPath":"greenButtons_0000s_0003.png" }, { "word":"うみがめ", "imgPath":"redButtons_0000s_0003.png" } ] }
動作確認した際に出た文字列
CoreData[39477:fb03] JSON dictionary={ buttonArray = ( { imgPath = "babylogButtons_0000s_0003.png"; word = "U30adU30a6U30a4"; }, { imgPath = "babylogButtons_0000s_0003.png"; word = "U3044U3061U3054"; } ); }
[Blender]事始めのチュートリアル動画まとめ
Blenderを触り始めたものの、どうも操作周りが気持ち悪くて色々調べてたらビデオチュートリアル(日本語)を発見した。
1:Blender入門講座|導入編|Macユーザの方へ
/tmp/というディレクトリ指定は全部//(CurrentDirectory)に変更しましょう。という話。
File -> Save User Settings (Ctrl + S)
これでユーザ設定として保存されるので次回起動以降も設定が保持され、毎度設定しなくてもよくなる。
2:Blender入門講座|導入編|初心者の方へ-1 キー操作
よく分け分からなくなる原因になるキー
Tabキー
EditModeに切り替わるキー。
他のObjectを選択できなくなる。
TabkeyによるEditModeとObjectModeの変更に気をつける。
/キー
他のものが消えてなくなる。
ローカルモード。
もう一度押すと戻る。
Hキー
触ると選択中の物体を消す。
Hideの意。
Alt + Hで戻る。
EditModeでもMeshの一部を選択してHキーを押すと選択部分だけ消える。
Zキー
画面のプレビューモードの切り換え。
Zを押すとワイヤーフレームモード(面非表示)に切り替わる。
もう一度押すとソリッドモード(面表示)に戻る。
トラックパッド
動画では解説されてないので補足。
トラックパッドで二本指で上下にスワイプ(ドラッグではなくスワイプ。シャー!シャー!って勢いつけるやつ)をするとカメラが拡大縮小をする。
この操作は何故か微調整できない。というかする方法が分からない。
そしてAnimationのタイムフレームまでも一緒に移動するし、仕様がコンフリクトしてるまま実装したとしか思えない様な有様…。どうしてこうなった。回避策は?!
※この後で判明するんだけど、上下スワイプはマウスホイール回転と同じ判定だった。
3:Blender入門講座|基礎編|ユーザーセッティング
ユーザセッティング保存まわりに関する注意等。
変なユーザセッティングをしてしまった場合は初期設定に戻す。
File -> Load Factory Settings
を選択すると工場出荷時に戻されるので再度保存しておきましょう。
4:Blender入門講座|導入編|ノートPCの方へ
Ten-keyが無い人/マウスの中ボタン無い人用の設定。
動画では10キーの設定だけだったので捕捉。
3ButtonMouseエミュレート時の内容は以下の通り。
[TABLE=2]
いずれにせよマウスがボタン式でないとやりずらいし、上で書いた様に不具合的な動きをするのでやってられなくなる。
Save as Defaultをクリックして設定を初期設定として保存しておく。
5:Viewまわりの操作 キーボード操作編
ten key で操作。
1:X軸から
3:Y軸から
5:perspective / 平行投影
0:でカメラビュー。
+拡大
-縮小
Home:全体が見える位置に戻る。
マウスの”位置”でアクティブなウィンドウが切り替わる。
マウスカーソルがへんな範囲は行ってると変更がかからない。
6:Viewまわりの操作 マウス操作編
マウスのボタンは3つ必要、という話。
マウス操作は中スクロールができないとダメ。
Homeキーはフルキーボードにしか付いてないのでBlenderそのものがフルキーボード操作向き。
家にはiMacでワイヤレスのアルミキーボード+マジックトラックパッドで外ではMBAという僕の環境には合致するポイントが一切無い操作系です。本当にありがとうございました。
最後に
横にあったWinに接続していたMX518を引っこ抜いてMBAに接続してみると…
あり得ない程快適に…。いいじゃんBlender!ぬるぬるじゃん!
結論:素直にマウスを買いましょう。
そしてもう一個MX518を購入しようと思ったらもう作られてない。
なので後継機と言われているこの機種を購入する。