Unity NGUIで、ローカライズの設定手順

NGUIで、とりあえず英語と日本語を管理する方法

STEP.1 asset storeからインポートしたNGUIのLocalization.txtをリネームして、移動

これを、

Assets/NGUI/Examples/Resources/Localization.txt → Localization.csv

リネームして、

Assets/Resources/Localization.csv に移動。
※Resourcesフォルダが無い場合は、作ってね。

これをしないと、NGUIアセットをアップデートする度、ローカライズ文言がリセットされてしまいます (´;ω;`)

STEP.2 ローカライズの文言を作る

Assets/Resources/Localization.csv

をテキストエディタ等で開いて、英語,日本語のように記載していきます。

Localization.csvの中身


KEY,English,Japanese Flag,Flag-US,Flag-JA Language,English,Japanese NGUI_STAGE_1_NAME,Hamburger,ハンバーガー NGUI_STAGE_2_NAME,Sandwich,サンドイッチ

※カンマ区切りで、KEY,英語,日本語と記載しています。

STEP.3 Unityを再起動する。

これしないと、なぜか反映されなかったです。
※ビルドしても反映される事もあったり。

STEP.4 UI LabelにLocalizeをアタッチ

※先ほどLocalization.csvにKEYとして記載した、「NGUI_STAGE_1_NAME」を入力すると、英語、日本語が表示されます。

cocos2d-x(c++) で、int(整数)をstring(文字列)に変換

cocos2d-x(c++) で、intをstring(文字列)に変換

環境 cocos2d-x 3.14(c++)

StringUtils::toString()で、int型からstring型に変換できる。

int hogeInt = 123;
string hogeStr = StringUtils::toString(hogeInt);

で、下記でもできるのですが、androidでビルドするとエラーになるので、
下記を使う場合はご注意を。


string hogeStr = std::to_string(123);

cocos2d-x(c++) 色(Color3B等)を定数の配列でカラースキーム化

cocos2d-xで、色のパターン等用意する時、
配列で定数化しておくと便利なのでメモ

宣言


// Color3Bの型で3色用意 static const std::vector<Color3B> COLOR_LIST = { Color3B(255,0,0), //赤 Color3B(0,255,0), //緑 Color3B(0,0,255) // 青 };

呼び出し


COLOR_LIST.at(0); // 赤 COLOR_LIST.at(1); // 緑 COLOR_LIST.at(2); // 青

もちろん、Color4Bでも同じ要領

ちなみに赤を出したいだけなら、、、


Color3B::RED

とするだけなので、この記事はそういう趣旨じゃない。。。

cocos2d-x(c++)ひっかかりそうなポイントメモ

ただ生成したNodeのgetContentSize()は0。


node->getContentSize().width // 0

座標は、左下が基準

OpenGLだからか、左下が基準。

oya->addChild(ko)をすると色々挙動が難しい

子は親のアンカーポイントを無視する。

getBoundingBoxの座標が連動していなかったり。

androidでビルドする時、std::to_string()を使うビルドできない。

下記で代用


int newInt = StringUtils::toString(hogeInt);

Vec2でキャストせずにintとしてつかっているといつの間にかずれるのでちゃんとキャストしよう


Vec2 vec2Hoge = hogeMethod(touchLocation); log("vec2HogeFloat x:%f y:%f",vec2Hoge.x,vec2Hoge.y); log("vec2HogeInt x:%i y:%i",vec2Hoge.x,vec2Hoge.y);

cocos2d-xのアプリ開発のお気に入り環境メモ

cocos2d-xでAndroidとiOSのアプリ開発で使っている環境メモ

言語&IDE

C++でxcode使ってる、

もうcocos creator使った方がいいみたいですが。

UI&アニメーションの開発エディタ

下記ツールでUIをGUIエディタ作れる。

cocos studio

version3.10で ※注意サポート終了

下記からダウンロード可能

http://cocos2d-x.org/docs/deprecated/studio/

メモ

  • 下記particle2dxのplistをそのまま取り込める。
  • opacityや、colorのアニメーションも、デフォルトだとタイムラインに表示されないが、record frame の✅を入れると表示される。

パーティクル用のエディタ

Particle2dx

http://particle2dx.com/
* オリジナルの画像がアップロードできないようなので、一度エクスポートしてから、画像ファイル名をplistをテキストエディタで開いて変更する。
* もしくは、エクスポート時の画像ファイル名と同じ画像ファイルで上書き。

シェーダー周り

cocos2dx用というわけでないないがシェーダーのデモに使える

http://glslsandbox.com/e#38793.0

Unity5で 『 library not found for -lPods-Unity-iPhone』と出たら

lPods-Unity-iPhone

『 library not found for -lPods-Unity-iPhone』

Unity5.0の時のiOSアプリを、Unity5.4xにアップデートし、
久々xcodeでビルドと下記エラーが、

lPods-Unity-iPhone
lPods-Unity-iPhone

ld: library not found for -lPods-Unity-iPhone clang: error: linker command failed with exit code 1 (use -v to see invocation)

原因は、前の古いバージョンのUnityを使っている時にリンクエラーがでるそうです。。

で解決方法はエラーの通りでございまして、、汗

  • xcode上の General設定の、Linked Frameworks and Libraries から、
  • 「libPods-Unity-iPhone.a」 を frameworkから削除し、ビルドしなおせばOK
-lPods-Unity-iPhone
-lPods-Unity-iPhone

これをdelete!!

そしてリビルド!!!

以上!!!!

Unityで、#UNITY_IOS等の、エディタ上とプラットフォームの判定を勘違いしてた

Unityで、よくAndroidや、iOSの条件分岐かく 「#if UNITY_IOS」等の分岐ですが、

勘違いして使っていました。


#if UNITY_ANDROID Debug.Log("androidだよー"); #elif UNITY_IOS Debug.Log("iosだよー"); #else Debug.Log("unityエディタ含むよー"); #endif

を、Unity上のswitch platformで 『iOS』にしていて、
Unity上で実行したら。。


unityエディタ含むよー

となるとおもっていた。。。汗

違かった。。。

実際は、


iosだよー

と、なった

ほんまアホやった。。


#if UNITY_EDITOR Debug.Log("Unityエディタで実行中だよー"); #elif UNITY_ANDROID Debug.Log("androidだよー"); #elif UNITY_IOS Debug.Log("iosだよー"); #else Debug.Log("その他だよー"); #endif

#if UNITY_EDITOR

これがしたかったやつや。。

さっきのはあくまでswitch platformで指定しているiOSの条件にものでした。。

iOSアプリで、GameCenterを入れても、自分のスコアしか反映されない

gamecenter アイコン

タイトルの通り、iPhoneアプリでleaderboard等、
ランキング機能を使っていたのですが、いくらやっても、
何故か自分のスコアしか反映されない。

いくら施行錯誤しても、だめでした。

sandboxユーザー でやったり、TestFlightユーザー でやったり、
ユーザーを何度も作り直したり、
debugやreleaseが問題なのかなと思ったたり、

一行に1ユーザーの情報だけしか表示されない、、
何が原因なんだー、、半日まっても駄目。。。

iOS swiftでQRコード認識時に時々クラッシュする際対策!

iphone swiftでQRコード認識時にクラッシュする事がある。その対策

QRコードリーダーアプリで、下記のようにカメラ内のQRコードを読み取る時に、
クラッシュする事が一定確率であった。

エラー内容


fatal error: unexpectedly found nil while unwrapping an Optional value

クラッシュ対象のコード


qrCodeObject = previewLayer.transformedMetadataObjectForMetadataObject( metadata as! AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject

この部分で、クラッシュする事がある。。

色々調べたら、AVCaptureVideoPreviewLayer内のメソッドでnilが入る事があるらしい。

超参考:http://ja.stackoverflow.com/questions/14968/%E4%B8%8B%E8%A8%98%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E5%8F%82%E8%80%83%E3%81%AB%EF%BC%92%E6%AC%A1%E5%85%83%E3%83%90%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%82%92swift2%E3%81%A7%E6%9B%B8%E3%81%84%E3%81%9F%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C-%E5%AE%9F%E6%A9%9F%E3%83%87%E3%83%90%E3%83%83%E3%82%AF%E6%99%82%E3%81%AB%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E7%94%BB%E9%9D%A2%E3%81%AE-fatal-error-unexpectedly

ボクが対策したコード


if previewLayer.transformedMetadataObjectForMetadataObject( metadata as! AVMetadataMachineReadableCodeObject) != nil { //nilチェックしてから処理 qrCodeObject = previewLayer.transformedMetadataObjectForMetadataObject( metadata as! AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject }else { // キャプチャセッション再始動 captureSession.startRunning() }

nilチェックをおこなってら処理する事で解決しました。
また、ただのnilの場合はカメラが動かなくなってしまうので、
キャプチャーセッション等を、再度走らせる事で思い通りの動作になりました。!
参考になれば幸いです!!