I2 Localizationで文章に改行コードを含める時に、少しハマったのでメモしておきます。
Google Spreadsheetからテキストをインポートしている場合、テキストに "\n" が含まれていても、uGUIのTextに表示すると、そのまま "\n" と表示されて、改行してくれません。
Google Spreadsheet経由だと "\n" は通常の文字として認識されてしまいます。
代わりにGoogle Spreadsheetのセルの中で、Alt + Enterを押して改行するようにします。
そして、Google Spreadsheetから、UnityのI2 Localizationにインポートをし直すと、正しく改行されるようになります。
2017年4月6日木曜日
2017年1月4日水曜日
[Unity] I2 Localization その5 〜 Google Spreadsheetとの連携
新年あけましておめでとうございます。
当ブログをご覧になって頂き、いつもありがとうございます。
少し日が開いてしまいましたが、I2 Localizationシリーズその5、今回はGoogle Spreadsheetとの連携方法について解説していきたいと思います。
ローカライズする用語が少なければ、Google Spreadsheetを使わず、これまでやってきたように I2/Resources/I2Languages.prefabに直接入力していくのが簡単でしょう。しかし用語・文章量が多くなってくると、途端に面倒になってきます。幸い、I2 LocalizationにはGoogle Spreadsheetとの連携機能があります。しかし導入方法が少し独特なので、早いうちに使い方をマスターしておくのも良いかと思います。
当ブログをご覧になって頂き、いつもありがとうございます。
少し日が開いてしまいましたが、I2 Localizationシリーズその5、今回はGoogle Spreadsheetとの連携方法について解説していきたいと思います。
ローカライズする用語が少なければ、Google Spreadsheetを使わず、これまでやってきたように I2/Resources/I2Languages.prefabに直接入力していくのが簡単でしょう。しかし用語・文章量が多くなってくると、途端に面倒になってきます。幸い、I2 LocalizationにはGoogle Spreadsheetとの連携機能があります。しかし導入方法が少し独特なので、早いうちに使い方をマスターしておくのも良いかと思います。
2016年12月4日日曜日
[Unity] I2 Localization その4 〜 C#スクリプトからローカライズ文章を取得する方法
前回から引き続き、I2 Localizationの利用について書いていきます。
今回は、スクリプトからローカライズされた文章を取得する方法です。
今回は、スクリプトからローカライズされた文章を取得する方法です。
Term(キー)を文字列で指定する方法
前回設定した、Term(キー)を使用します。一番簡単な方法は以下のように、Term(キー)を文字列で指定する方法です。しかし、この場合はTerm(キー)のタイプミスに注意して下さい。間違っていると、ローカライズされた文章は取得できません。
// Term(キー)を文字列で指定して取得する方法。タイポに注意!
string text1 = I2.Loc.ScriptLocalization.Get("Term Name");
2016年11月28日月曜日
[Unity] I2 Localization その3 〜 ローカライズ手順
前回から引き続き、I2 Localizationの利用について書いていきます。
今回はいよいよローカライズの手順です。
Language Sourceコンポーネントを編集していきますが、
この方法だと、シーンを跨いでもローカライズデータベース(Language Sourceコンポーネント)にアクセスできるので、小中規模なアプリではとても有効な手段だと思います。
ちなみに、この Assets \ I2 \ Localization \ Resources \ I2Languages.prefab は、初めてI2 Localizationをプロジェクトにインポートすると自動で生成されます。アセットをアップデートした場合は、編集済みの I2Languages.prefab ファイルを上書きしないように、上書き生成はしないようになっているそうです。(動作未確認)
まあ、上書きされたとしてもGitやSVNでバージョン管理していれば、それほど焦らなくてすむとは思いますが、念のため。
今回はいよいよローカライズの手順です。
Language Sourceコンポーネントを編集していきますが、
Assets \ I2 \ Localization \ Resources \ I2Languages.prefabを直接エディットする方法をとります。詳しくは前回を参照して下さい。
この方法だと、シーンを跨いでもローカライズデータベース(Language Sourceコンポーネント)にアクセスできるので、小中規模なアプリではとても有効な手段だと思います。
ちなみに、この Assets \ I2 \ Localization \ Resources \ I2Languages.prefab は、初めてI2 Localizationをプロジェクトにインポートすると自動で生成されます。アセットをアップデートした場合は、編集済みの I2Languages.prefab ファイルを上書きしないように、上書き生成はしないようになっているそうです。(動作未確認)
まあ、上書きされたとしてもGitやSVNでバージョン管理していれば、それほど焦らなくてすむとは思いますが、念のため。
2016年11月26日土曜日
[Unity] I2 Localization その2 〜 一番大事なものLanguage Source
前回から引き続き、I2 Localizationの利用について書いていきます。
I2 Localizationでは、Language Sourceコンポーネントがローカライズのデータベースとなり、ここにローカライズする言語の種類、翻訳したデータを引き出すキー(Termと呼ぶ)、翻訳データが格納されます。
このLanguage Sourceコンポーネントの管理方法には、以下の3つが挙げられていました。
中でもおすすめは(1)だそうです。ResourcesフォルダにI2Languages.prefabというファイルがあると、自動的に読み込んでくれます。Sceneを越えてプロジェクト全体で、ひとつのローカライズデータを利用することができます。
自分もWorrrm Rebirth (iOS版、Android版)のローカライズには、(1)の方法をとりました。
I2 Localizationでは、Language Sourceコンポーネントがローカライズのデータベースとなり、ここにローカライズする言語の種類、翻訳したデータを引き出すキー(Termと呼ぶ)、翻訳データが格納されます。
このLanguage Sourceコンポーネントの管理方法には、以下の3つが挙げられていました。
- Assets \ I2 \ Localization \ Resources \ I2Languages.prefabを直接エディットする。
- 各Scene毎にGameObjectのコンポーネントとして持つ。そうすることで、Scene毎にローカライズデータを分割できる。
- バンドルの一部として動的にロードする。
中でもおすすめは(1)だそうです。ResourcesフォルダにI2Languages.prefabというファイルがあると、自動的に読み込んでくれます。Sceneを越えてプロジェクト全体で、ひとつのローカライズデータを利用することができます。
自分もWorrrm Rebirth (iOS版、Android版)のローカライズには、(1)の方法をとりました。
Unityアプリのローカライズ対応 I2 Localization その1
拙作、Worrrm Rebirth(iOS版、Android版)の日本語ローカライズ作業をしました。(Androidの日本語対応版は既にリリース中です)
もともと英語版だけでリリースしていたのですが、いろいろあって後回しにしていました。
ちなみに、Unityでのローカライズ作業は初めてです。
それほど高機能なものでなくていいので、自分でローカライズシステムを組んでしまおうかと思いましたが、やはり時間短縮したかったので、アセットストアに頼ることにしました。
自分が見つけられたのは2つ。I2 Localization と AutoLocalization です。
どちらを利用するか悩みました。AutoLocalizationはシンプルにまとまっているような気がして、価格も安いです。開発者が日本人の方のようなので、ネイティブでサポートを受けられる恩恵もあります。ただ一件もレビューが付いていなかったので、その点が気になります。
I2 Localizationは多機能で、比較的高価格。英語マニュアルオンリーで、使いこなせるかが心配でしたが、高評価レビューの多いのがポイント高いです。やっぱり今の時代、ユーザーレビューの重要度は高いですね。
ちなみに、Unityでのローカライズ作業は初めてです。
それほど高機能なものでなくていいので、自分でローカライズシステムを組んでしまおうかと思いましたが、やはり時間短縮したかったので、アセットストアに頼ることにしました。
自分が見つけられたのは2つ。I2 Localization と AutoLocalization です。
どちらを利用するか悩みました。AutoLocalizationはシンプルにまとまっているような気がして、価格も安いです。開発者が日本人の方のようなので、ネイティブでサポートを受けられる恩恵もあります。ただ一件もレビューが付いていなかったので、その点が気になります。
I2 Localizationは多機能で、比較的高価格。英語マニュアルオンリーで、使いこなせるかが心配でしたが、高評価レビューの多いのがポイント高いです。やっぱり今の時代、ユーザーレビューの重要度は高いですね。
2014年9月29日月曜日
2014年4月10日木曜日
2013年5月6日月曜日
iOS版AdMob SDK 6.4.1導入、ソースファイルが.mmな人はちょっと注意
iOS版AdMob SDK 6.4.1で、c++ (.mmファイル)から GADAdSizeFromCGSize() を呼ぶとリンカエラーで出るようになってしまったので、ヘッダファイルをimportする時に自前でextern "C"で囲ってやる必要がありました。
#ifdef __cplusplus
extern "C" {
#endif
#import "GADBannerView.h"
#ifdef __cplusplus
}
#endif
関連記事
読み込み中..
2013年5月2日木曜日
2012年5月11日金曜日
Automator: Retina画像をフォルダアクションで一括コンバート(3)
前回からの続きです。
前回では、Retina画像を一括コンバートするフォルダアクションを作成しました。
今回は、そのフォルダアクションを実行テストしてみます。
まずは、前回作成したフォルダに、適当なRetina画像ファイルをコピーしてみます。
僕はDaikon@2x.pngというファイルを、RetinaConvertFolderにコピーしました。
以下のような結果画面が出れば成功です。
OK以外のボタンを押しても何も起こりませんので、素直にOKを押してウィンドウを閉じて下さい。
前回では、Retina画像を一括コンバートするフォルダアクションを作成しました。
今回は、そのフォルダアクションを実行テストしてみます。
まずは、前回作成したフォルダに、適当なRetina画像ファイルをコピーしてみます。
僕はDaikon@2x.pngというファイルを、RetinaConvertFolderにコピーしました。
以下のような結果画面が出れば成功です。
OK以外のボタンを押しても何も起こりませんので、素直にOKを押してウィンドウを閉じて下さい。
Automator: Retina画像をフォルダアクションで一括コンバート(1)
iPhoneアプリ開発でRetina画像(@2x)から、縦横半分にした非Retina画像を用意するのには、比較的手間がかかります。
1個1個の手間は大したこと無くても、ファイルが数十〜百個単位になったり、フォルダ階層が複雑になったりすると、コンバートのし忘れなど、ヒューマンエラーが問題になります。
特に、プログラム担当俺、サウンド担当俺、グラフィック担当俺、というインディーアプリ開発者にとっては、これらの作業は自動化しておきたいものです。
今回はRetina画像を、非Retina画像にコンバートするフォルダアクション作ってみます。フォルダクションとは、フォルダにファイルがコピーされると自動で起動するバッチ処理で、Mac OS X標準の機能です。
1個1個の手間は大したこと無くても、ファイルが数十〜百個単位になったり、フォルダ階層が複雑になったりすると、コンバートのし忘れなど、ヒューマンエラーが問題になります。
特に、プログラム担当俺、サウンド担当俺、グラフィック担当俺、というインディーアプリ開発者にとっては、これらの作業は自動化しておきたいものです。
今回はRetina画像を、非Retina画像にコンバートするフォルダアクション作ってみます。フォルダクションとは、フォルダにファイルがコピーされると自動で起動するバッチ処理で、Mac OS X標準の機能です。
2012年4月9日月曜日
Unity: RageSplineが面白そう
2DベクターグラフィックライブラリRageSplineが、Unity Asset Storeで4/8まで$25のセール中でした。
僕はもともとFlash好きな人間なので、ベクターグラフィックでゲームやアプリを作ったりしていました。
最近の iPhone アプリ開発ではビットマップデータを使用する事が多かったので、こういうライブラリが Unity で出てきてくれると、何か作りたくなってしようがないです。
問題は、iPhone上での実行速度なのですが、こちらの方は今のところ情報を得られていないです。
とりあえず、セール中にゲットできたので、時間のあいまに触ってみようと思います。
関連のある記事
僕はもともとFlash好きな人間なので、ベクターグラフィックでゲームやアプリを作ったりしていました。
最近の iPhone アプリ開発ではビットマップデータを使用する事が多かったので、こういうライブラリが Unity で出てきてくれると、何か作りたくなってしようがないです。
問題は、iPhone上での実行速度なのですが、こちらの方は今のところ情報を得られていないです。
とりあえず、セール中にゲットできたので、時間のあいまに触ってみようと思います。
関連のある記事
2012年1月16日月曜日
GB2ShapeCacheのCircleシェイプ読み込みバグ
PhysicsEditor からエクスポート(Box2D generic PLIST形式)したデータを読み込むクラス GB2ShapeCache で Circle シェイプが正しく読み込まれませんでした。
今現在、PhysicsEditor 1.0.5 に同梱されてくるものには、バグが含まれているので注意した方が良いでしょう。
開発者には既にレポートと修正パッチを渡しましたが、ここにも修正方法を書いておきます。
今現在、PhysicsEditor 1.0.5 に同梱されてくるものには、バグが含まれているので注意した方が良いでしょう。
開発者には既にレポートと修正パッチを渡しましたが、ここにも修正方法を書いておきます。
2011年12月22日木曜日
AdMaker SDK3.6導入テスト
iOS版 AdMaker SDK 3.6を導入してみました。
ここに来るまでの過去数バージョンのSDKには不具合があり、何回も導入テストで時間を無駄にされられたので、今回もドキドキしております。
半日テストしてみた限りでは、今のところ大きな問題は出ておりません。
導入方法に関しましては、公式の導入マニュアルをご覧ください。
注意点としては、今までアプリ毎に指定していた adURL、siteID、zoneID が、adURLひとつに集約されました。ただし、下位互換性を保つとやらで、siteID、zoneIDには、それぞれ @"111"と@"1111"を指定するようになっています。
ここに来るまでの過去数バージョンのSDKには不具合があり、何回も導入テストで時間を無駄にされられたので、今回もドキドキしております。
半日テストしてみた限りでは、今のところ大きな問題は出ておりません。
導入方法に関しましては、公式の導入マニュアルをご覧ください。
注意点としては、今までアプリ毎に指定していた adURL、siteID、zoneID が、adURLひとつに集約されました。ただし、下位互換性を保つとやらで、siteID、zoneIDには、それぞれ @"111"と@"1111"を指定するようになっています。
2011年11月8日火曜日
AdWhirlのCustom Eventを使う
AdWhirl で標準対応していない広告サービスを使うには、Custom Event という仕組みを使います。
使い方について需要がありそうなので、書いてみます。
実はめちゃくちゃ簡単です。
ただし、AdMaker なら AdMaker SDK を、AdLantis なら AdLantis SDK を単独で組み込んで使用できるスキルは必要です。(笑)
AdWhirl の管理画面で、Custom Event を登録します。
Apps の Ad Network Settings で、Add Custom Event というボタンを押します。
使い方について需要がありそうなので、書いてみます。
実はめちゃくちゃ簡単です。
ただし、AdMaker なら AdMaker SDK を、AdLantis なら AdLantis SDK を単独で組み込んで使用できるスキルは必要です。(笑)
AdWhirl の管理画面で、Custom Event を登録します。
Apps の Ad Network Settings で、Add Custom Event というボタンを押します。
AdWhirlとAdStirを比べる
先日リリースしたばかりの iPhone アプリには、AdMaker(mediba ad) を組み込んでいたのですが、これがほとんど広告を配信してくれない状態が続いています。
こういう事があるかもしれないと前々から思ってはいたのですが、最悪のタイミングで起こってしまいました。
それで広告切り替えシステムを導入する気になりました。
試したのは2つ。AdWhirl(3.0.0) と AdStir(1.0.2) です。
AdWhirl は Google 傘下の AdMob のサービスで、SDK はオープンソースになっています。
AdStir は ngi group のサービスで、最近始まったばかりのようです。SDK はフレームワークのみの提供です。
こういう事があるかもしれないと前々から思ってはいたのですが、最悪のタイミングで起こってしまいました。
それで広告切り替えシステムを導入する気になりました。
試したのは2つ。AdWhirl(3.0.0) と AdStir(1.0.2) です。
AdWhirl は Google 傘下の AdMob のサービスで、SDK はオープンソースになっています。
AdStir は ngi group のサービスで、最近始まったばかりのようです。SDK はフレームワークのみの提供です。
2011年10月17日月曜日
AdMaker SDK 3.4導入
AdMaker SDK 3.4がリリースされました。
更新履歴については今のところ表示されていないようです。
新規に組み込まれる場合は、SDK に入っているサンプルと Readme.txt を読めば特に問題無く組み込めると思いました。注意点追記しました。
3.3 から 3.4 へ SDK を更新する場合には、以下の点に注意するといいと思います。
ビルド設定の ARC は OFF にします。
設置したボタンをタップすると、AdMakerView をリリースします。
今回の SDK バージョンは iOS 5 に対応したと書いてあったので、もしかしたらインスタンスの解放を Automatic Reference Counting 任せにしているのかもしれません。
とはいえ、すべてのプログラムが ARC の設定を ON にしているわけでもないので、そういう仕様は厳しいのではないかと思いますが、どうでしょうか。
更新履歴については今のところ表示されていないようです。
新規に組み込まれる場合は、SDK に入っているサンプルと Readme.txt を読めば特に問題無く組み込めると思いました。注意点追記しました。
3.3 から 3.4 へ SDK を更新する場合には、以下の点に注意するといいと思います。
- AdMakerView クラスが UIViewController から UIView のサブクラスに変わった。これは 3.1 の時は UIView のサブクラスだったので、一周して結局また元に戻ったということになります。(笑)
- 上記変更により viewWillAppear と viewWillDisappear メソッドが使えなくなるかと思いきや、互換性を重視してかメソッドは残っている。しかしドキュメントには何も記述されていない。
- AdMakerDelegate の didLoadAdMakerView メソッドは、広告が読み込み直される度にコールされるようになった。(これは嬉しい)
- 内部ブラウザで広告を開く場合、AdMaker.useSafari = NO にする。しかし、 requestAdURL:(NSURLRequest*)request メソッドが呼ばれるだけで、それ以外のアクションは起こらない。内部ブラウザは自分で用意せよということなのかも?
- AdMakerView をインスタンス化して start メソッドで開始させてから、インスタンスを解放しようとするとクラッシュする。SDK 添付のサンプルプログラムを改造して確認しました。
ビルド設定の ARC は OFF にします。
設置したボタンをタップすると、AdMakerView をリリースします。
// SingleViewViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
AdMaker = [[AdMakerView alloc]init];
[AdMaker setAdMakerDelegate:self];
AdMaker.viewController = self;
AdMaker.useSafari = YES;
AdMaker.backgroundColor = [UIColor clearColor];
[AdMaker setFrame:CGRectMake(0,360,320,50)];
[self.view addSubview:AdMaker];
[AdMaker start];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"end AdMaker" forState:UIControlStateNormal];
button.frame = CGRectMake(85,50,150,40);
[button addTarget:self action:@selector(endAdMakerTouched:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:button];
}
- (void)endAdMakerTouched:(id)sender
{
NSLog(@"endAdMakerTouched");
if (AdMaker) {
// 注:この時点でAdMakerのリファレンスカウンタは2になっているので release を忘れないこと!
[AdMaker removeFromSuperview];
[AdMaker release];
AdMaker = nil;
}
}
クラッシュに関してはサポートに問い合わせてみるつもりです。今回の SDK バージョンは iOS 5 に対応したと書いてあったので、もしかしたらインスタンスの解放を Automatic Reference Counting 任せにしているのかもしれません。
とはいえ、すべてのプログラムが ARC の設定を ON にしているわけでもないので、そういう仕様は厳しいのではないかと思いますが、どうでしょうか。
登録:
投稿 (Atom)