- C# (.cs) はUTF-16
- JS (.js) はUTF-8
- Boo (.boo) は不明
- ネイティブのiOSはUTF-8
最終的にJSファイルに全ての日本語リテラルをまとめて回避しましたが、そもそも日本語リテラルは使わず国際化文言ファイルみたいなものを別途用意しておいたほうが筋が良いと思います。iOSならLocalizable.stringsがありますしね。
ps aux | grep unityとか叩けばなんとなくわかります。
このrspファイルにはC#コンパイラのコンパイラオプションとして渡すオプションが記述できます。ですので http://linux.die.net/man/1/mcs などに列挙されているコンパイラオプションであればひと通りなんでも使用可能です。今回はプリプロセッサ定義をやりたいので、以下のように書けばOKです。/Assets/smcs.rsp (C#用) /Assets/gmcs.rsp (C#エディタスクリプト用) /Assets/us.rsp (UnityScript、俗にJSと呼ばれている物用) /Assets/boo.rsp (Boo用)
-define:DEBUG複数の定義が書きたい場合は、
-define:DEBUG -define:USE_DEV_SERVERのようにスペースで空けて複数記載するか、
-define:DEBUG -define:USE_DEV_SERVERのように改行して複数記載するか、
-define:DEBUG;USE_DEV_SERVERのようにセミコロンで列挙して書くことができます。注意点として、C/C++/Objective-Cのdefineマクロと違って
-define:DEBUG=1のように値を定義することはできないみたいです。あくまでシンボルを作るだけみたいですね。
@akisutesama -define:HOGE -define:FUGA みたいに書けば複数定義出来ますよ。行を分けてもOK。ただしレスポンスファイル(rsp)を修正したらスクリプトは再コンパイルされる必要があるのでスクリプトをすべて再インポートしてください
— Hiroki Omae (@pigeon6) November 9, 2012
@akisutesama 念のために書いておくと.rspファイルはヘンな黒魔法ではなく応答ファイル(response file)といって、要するにコンパイラに渡すコマンドラインオプションをファイルに書いておけるという方式です。なので中身はただのC#コンパイラオプションでございます
— Hiroki Omae (@pigeon6) November 9, 2012
はい、mcsのmanページでよいと思います。オプションに関する情報ではないですがこちらも未読なら読んでおくと良いと思います mono-project.com/CSharp_CompilerRT @akisutesama: @pigeon6 ですよね、コンパイラオプションですよね?ってことは…
— Hiroki Omae (@pigeon6) November 9, 2012
@akisutesama 応答ファイルの利用はUnity的には公式機能ではないので、あまりやりすぎないようにした方がよいです。Unityはビルド時にコードの最適化を行ったり、特にiOSではAOTをやったりと結構事後処理を頑張っているので、そこでおかしくなる可能性はあります。
— Hiroki Omae (@pigeon6) November 9, 2012
AssetDatabase.Refresh(); reimportSomethingToForceRecompile(); private void reimportSomethingToForceRecompile() { var dataPathDir = new DirectoryInfo( Application.dataPath ); var dataPathUri = new System.Uri( Application.dataPath ); foreach( var file in dataPathDir.GetFiles( "GlobalDefinesWizard.cs", SearchOption.AllDirectories ) ) { var relativeUri = dataPathUri.MakeRelativeUri( new System.Uri( file.FullName ) ); var relativePath = System.Uri.UnescapeDataString( relativeUri.ToString() ); AssetDatabase.ImportAsset( relativePath, ImportAssetOptions.ForceUpdate ); } }これでC#で書かれたコードに対しては無事にrspファイルへの変更が反映されるようになります。
sudo gem install xcodeprojあとは上記のPostprocessBuildPlayerをUnityプロジェクトの /Assets/Editor 以下に配置して、コード中のフレームワーク名を指定している箇所をご自身のお好きなように変更してやればオッケーです。
@pigeon6 こないだのUnityで回転で吹っ飛ぶ理由がわかりました! Game Centerみたいっす。 developer.coronalabs.com/forum/2012/09/…
— akisute (@akisutesama) September 24, 2012
@akisutesama ありがとうございます。supportedInterfaceOrientationsForWindow/shouldAutorotate のまわりの対応ということなら対応中です。3.5.6で直すつもりみたい。
— Hiroki Omae (@pigeon6) September 25, 2012
UIViewController shouldAutorotateToInterfaceOrientation:が完全に廃止になっており、基本的には全く呼び出されないようになってしまっています。その代わりにより体型だった画面回転の仕組みが導入されています。iOS 6からの画面回転は、「アプリが対応する画面方向」と「各View Controllerが対応する画面方向」の2つによって画面の回転する方向が決定されるという仕組みになっています。
以下優先順位順に、 1. UIApplicationDelegate application:supportedInterfaceOrientationsForWindow: が返す向き。iOS 6以降のみ。 2. UIApplication supportedInterfaceOrientationsForWindow: が返す向き。iOS 6以降のみ。 3. Info.plist で指定されている UIInterfaceOrientation の向き。各View Controllerが対応する画面方向は以下のように決定されます。
各ViewControllerが supportedInterfaceOrientations を実装しているなら、それが返す向き。 していないならば、 iPhoneだと UIInterfaceOrientationMaskAllButUpsideDown iPadだと UIInterfaceOrientationMaskAllこの2つの積集合をとって、両方が一致した向きに画面回転が行われる仕組みになっています。
[[NSBundle mainBundle] pathForResource:@"MyMusic" forType:@"mp3"];みたいなコードを書いたことがあると思います。このBundleの仕組みを使うと、
/Assets/Plugins/iOS
以下にBundleを配置しても正しくBundleが認識されませんし、iOSのアプリにインストールされません。/Assets/Plugins/iOS/
以下ではなくて、/Assets/StreamingAssets/
以下にBundleを配置するようにしましょう。実は/Assets/StreamingAssets/
以下のパスには隠し要素があって、このパス以下のファイル・ディレクトリは全てアプリケーション自身の/Data/Raw/
ディレクトリに配置されるようになっています。NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"MyBundle" ofType:@"bundle" inDirectory:@"Data/Raw"]];これでUnityプラグインを多言語化したり画像リソースを使ったりするのが楽になると思います。
/Assets/Plugins/iOS/
以下においたBundleも扱えるようにしてくれると楽なんですが・・・Unity 3.5の地点ではどうもダメっぽいです。