質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1487閲覧

UnityEditor AssetDataBaseやSetDirtyについて

beginer_uni

総合スコア19

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/12/17 08:20

初めまして。UnityEditorについて質問があります。私は今自作のゲーム内のスクリプトのいくつかに以下のようなコードを書いています。
あらかじめ別のスクリプトでScriptableObjectを継承したものがあり、Unity上でAsset>Createで作ったものをResourcesフォルダにおいています。
ずっとこれでシーン間のステータスなどを管理していたのですが昨日iOSでBuildした際、エラーが出てしまい、調べた所using UnityEditorを使ったスクリプトはEditorフォルダに入れとかなければいけないと知りました。しかし、Editorフォルダに入れるとBuildされた時にすのスクリプトもBuildされないという記事も読み、実際、EditorフォルダにUnityEditorを使ったスクリプトを入れるとScriptableObject内の変数はうまく変更されませんでした。
そこで調べると#UNITY_EDITORでくくるという記事を見つけました。しかし#UNITY_EDITORでくくるとSetDirtyメソッドやAssetDataBaseがiOS、Android向けにBuildした際、うまく機能してるか心配です。
この前以下のスクリプトをiOS向けにBuildした際はusing UnityEditorが入っているのにも関わらずうまくいった気がするので頭がこんがらがっています。
UnityEditorを使ったAssetDataBase.SaveAssets()やSetDirtyはそもそもiOS向けにBuildしては機能しないのでしょうか。
どなたかご教授いただけると幸いです。

C#

1C# 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6using UnityEditor; 7 8public class nantoka : MonoBehaviour { 9 10///省略 11 12///...... 13 14public void OnClick(){ 15 HogeHoge hogehoge = Resources.Load<HogeHoge>("HogeHoge"); 16 17 hogehoge.value = 4; 18 19 //ダーティとしてマークする(変更があった事を記録する) 20 EditorUtility.SetDirty(hogehoge); 21 22 //保存する 23 AssetDatabase.SaveAssets();} 24 25}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

UnityEditorに属するクラスやメソッド(AssetDataBaseやSetDirty)は
エディタ上でしか動作しません。
(iOSでもAndroidでもPCでも、プラットフォームが何であれ「ビルド後=アプリとして書き出した後」は動作しません。過去に動いた気がするのは多分気のせいです)

そもそもUnityプロジェクト内にあるファイルは(Resourcesフォルダ内だろうが何だろうが)
ビルド後はそのままでは書き込み不可能です。
一旦読み書き可能な領域に移す等の対応が必要です(そのままでは書き込み出来ない形式の場合は別途変換も必要)。

また、ScriptableObjectはビルド後に変更されないデータの保存に適している為、もし「シーンAで獲得したポイントをシーンBに持ち越す」みたいな使い道で使用しているなら別の方法への切り替えをオススメします。

投稿2018/12/17 08:35

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginer_uni

2018/12/17 09:59

sakura_hana様 回答のほどありがとうございます。 AssetDataBaseなどがアプリになると動かないことを初めて知りました。動いたと思うのはおそらく気のせいですね。すみません。 それでは、あるスクリプトにはResources.Loadも使ってあるのですがこれはアプリになると作動するのでしょうか。 なるほどです。シーン間の変数の保持に対して、代わりにPlayerPrefsを使おうと考えているのですがこの方針で大丈夫でしょうか。
sakura_hana

2018/12/17 11:42

Resources.Loadはエディタの機能ではないのでアプリでも動きます。 シーン間の変数の保持はPlayerPrefsでも構いませんが、アプリ終了後も保持する必要が無いなら他の方法の方がいい場合もあるので、調べてみるとよいかと思います。
beginer_uni

2018/12/17 12:30

なるほど。とても勉強になります。 詳しい回答、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問