Unityについての質問です。
やっている事
バージョンは2017.3を利用しています。
ios, appleのtvOS,android, android TV向けにアプリを作っているのですが、
tvOSだけリモコンから渡されるインプットの値が変なので、
他プラットフォームと挙動を合わせるためにビルド時にインプット設定を毎回書き換えています。
問題
ビルド後に元の設定に戻そうとするとエディターの見た目は変わりますが、
SourceTreeで実ファイルの差分を確認してみると、OnPreprocessBuildで書き換えたままになっています。
どうすれば実ファイルにもインプット設定が反映するでしょうか。
1度目(OnPreprocessBuild)の時はちゃんとファイルに反映して
2度目(OnPostprocessBuild)の時はエディターしか反映しない理由がわかりません。
ちなみにunity5.5の時はPostprocessBuildに書き換え処理を入れて、
1度ビルドして設定を書き換えた後、もう一度ビルドしてxcodeプロジェクトを作った後に、
SourceTreeから変更をリセットしてtvOS向けの書き出しを行なっていました。。
C#
1public class ProcessBuild : IPreprocessBuild, IPostprocessBuild 2{ 3 //実行順を指定(0がデフォルト、低いほど先に実行される 4 public int callbackOrder { get { return 0; } } 5 6 //ビルド前の処理 7 public void OnPreprocessBuild (BuildTarget buildTarget, string path){ 8 //インプット設定をtvOS用に書き換え 9 SerializedObject serializedObject = new SerializedObject (AssetDatabase.LoadAllAssetsAtPath ("ProjectSettings/InputManager.asset") [0]); 10 SerializedProperty axesProperty = serializedObject.FindProperty ("m_Axes"); 11 12 SerializedProperty axisPropertySubmit = axesProperty.GetArrayElementAtIndex (15); 13 axisPropertySubmit.Next (true); 14 do { 15 if (axisPropertySubmit.name == "altPositiveButton") { 16 axisPropertySubmit.stringValue = "joystick button 14"; 17 break; 18 } 19 } while (axisPropertySubmit.Next (false)); 20 21 SerializedProperty axisPropertyCancel = axesProperty.GetArrayElementAtIndex (17); 22 axisPropertyCancel.Next (true); 23 do { 24 if (axisPropertyCancel.name == "altPositiveButton") { 25 axisPropertyCancel.stringValue = "joystick button 0"; 26 break; 27 } 28 } while (axisPropertyCancel.Next (false)); 29 30 serializedObject.UpdateIfDirtyOrScript (); 31 serializedObject.ApplyModifiedProperties(); 32 } 33 34 //ビルド後の処理 35 public void OnPostprocessBuild (BuildTarget buildTarget, string path){ 36 //インプット設定を元に戻す 37 SerializedObject serializedObject = new SerializedObject (AssetDatabase.LoadAllAssetsAtPath ("ProjectSettings/InputManager.asset") [0]); 38 SerializedProperty axesProperty = serializedObject.FindProperty ("m_Axes"); 39 40 SerializedProperty axisPropertySubmit = axesProperty.GetArrayElementAtIndex (15); 41 axisPropertySubmit.Next (true); 42 do { 43 if (axisPropertySubmit.name == "altPositiveButton") { 44 axisPropertySubmit.stringValue = "joystick button 0"; 45 break; 46 } 47 } while (axisPropertySubmit.Next (false)); 48 49 SerializedProperty axisPropertyCancel = axesProperty.GetArrayElementAtIndex (17); 50 axisPropertyCancel.Next (true); 51 do { 52 if (axisPropertyCancel.name == "altPositiveButton") { 53 axisPropertyCancel.stringValue = "joystick button 1"; 54 break; 55 } 56 } while (axisPropertyCancel.Next (false)); 57 serializedObject.UpdateIfDirtyOrScript (); 58 serializedObject.ApplyModifiedProperties(); 59 } 60}
あなたの回答
tips
プレビュー