経緯
- シーン間のデータ共有をする方法を探していたところ下記を発見
参考1
参考2
スクリプト作成後、エディターからassetファイルを作成
- 上記のページを参考にしたがassetファイルにデータが記録されなかったためこちらを参照
ScriptableObjectを使ったスクリプト
C#
1using UnityEditor; 2 3[CreateAssetMenu(fileName ="SettingData",menuName ="SettingData")] 4public class SettingData : ScriptableObject 5{ 6 7 //音量設定をセーブ 8 public static void saveVolume(SettingData data) 9 { 10 PlayerPrefs.SetFloat(VOL_SE, data.volSE); 11 PlayerPrefs.SetFloat(VOL_BGM, data.volBGM); 12 PlayerPrefs.Save(); 13 saveSettingData(data); 14 } 15 16 //設定データの保存 17 public static void saveSettingData(SettingData data) 18 { 19 EditorUtility.SetDirty(data); 20 AssetDatabase.SaveAssets(); 21 } 22 23}
※アプリ終了後もデータを保持するためにPlayerPrefsでデータを保存しています。
ScriptableObjectを利用する側
C#
1public class UseSettingData : MonoBehaviour 2{ 3 [SerializeField] SettingData data; 4 //音量を設定 5 public void setVolume(float se,float bgm) 6 { 7 data.volSE = se; 8 data.volBGM = bgm; 9 SettingData.saveVolume(data); 10 } 11 //音量を取得 12 public float getVolumeSE() 13 { 14 return data.volSE; 15 } 16}
GameObjectに上記スクリプトをアタッチしInspectorからassetファイルを選択しています。
- ビルド時にエラー発生
error CS0103: The name 'EditorUtility' does not exist in the current context EditorUtility.SetDirty(data); <-該当箇所のコード --------------------------- error CS0103: The name 'AssetDatabase' does not exist in the current context AssetDatabase.SaveAssets(); <-該当箇所のコード --------------------------- Error building Player because scripts had compiler errors ------------------------------- Build completed with a result of 'Failed' in 9 seconds (9333 ms) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) ------------------------------- UnityEditor.BuildPlayerWindow+BuildMethodException: 4 errors at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (UnityEditor.BuildPlayerOptions options) [0x002bb] in <8004fcc221b54f98ba547350ea71d812>:0 at UnityEditor.BuildPlayerWindow.CallBuildMethods (System.Boolean askForBuildLocation, UnityEditor.BuildOptions defaultBuildOptions) [0x00080] in <8004fcc221b54f98ba547350ea71d812>:0
- 過去質問より該当スクリプトをEditorフォルダに移動
Editorフォルダ内に移動したScriptableObjectを使用しているスクリプトが見つからないエラー
error CS0246: The type or namespace name 'SettingData' could not be found (are you missing a using directive or an assembly reference?)
- 上記スクリプトと関連スクリプトもエラーになるので関連するもの全てEditorフォルダに移動
エラーが消えたので実行→成功
- ビルドして実機テストすると実機側でエラー
the referenced script on this Behavior is missing!
UnityEditorのInspectorで確認するとScriptに下記のWarning(黄色△!)が表示されている
the associated script can not be loaded please fix any compile errors and assign a valid script
- スクリプトをRemoveComponentして再アタッチしようとしたところ
Can't add script behavior UIAction. the script needs to derive from MonoBehavior
のWarningダイアログが表示される
- ReimportAllして再度アタッチしようとしたところ
the script is an editor script
のWarningダイアログが表示される
- 再度上記の過去質問に行きつきよくよく目を通してみると
UnityEditorを使っているコードはエディタ専用、Editorフォルダに入れる ビルド後の環境ではUnityEditorの機能はコンパイルが通っても動作しない
とのことなのですが
- AndroidアプリでScriptableObjectは使用できない(動作しない)のか
- 単純にやり方が間違っているのか(どうすればできるのか)
- Editorフォルダに移動したスクリプトのnot foundの対処方法が間違っているのか
- その他
詳しい方アドバイスお願いします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/16 06:48
2020/09/16 06:58
2020/09/17 00:58
2020/09/17 02:32
2020/09/17 12:11