これが私の最初の質問です。トピックに関するものを見つけることができませんでした。
GameObjectにアタッチされたスクリプト内のパブリックブールの数を変更するエディタースクリプトを作成したいと思います。
このスクリプトをGameObjectに添付しています。GameObjectはプレハブです:
using UnityEngine;
using System.Collections;
public class ScriptWithPublicBools : MonoBehaviour {
public bool b1;
public bool b2;
}
そして、これが私のエディタスクリプトです:
using UnityEngine;
using System.Collections;
using UnityEditor;
public class EditorHelper : ScriptableObject
{
[MenuItem("Trace/Trace")]
public static void trace()
{
foreach (GameObject g in Selection.gameObjects)
{
ScriptWithPublicBools tb = g.GetComponent<ScriptWithPublicBools>();
if (tb)
{
tb.b1 = false;
tb.b2 = true;
}
}
}
}
スクリプトは正常に機能しており、ゲームオブジェクトのブールはエディターで正しく設定されています。しかし、PLAYボタンを押すと、2つのboolスイッチの値が、スクリプトが適用される前の値に戻ります。
プレハブの値は関係ありません。値は、エディタースクリプトを適用する前に値に復元されるだけです。
私は何か間違ったことをしていますか、それともバグですか?
エディタースクリプトを適用して、シーンを新しいシーンとして保存し、新しく作成されたシーンを開くと、値も間違っています。
ただし、GameObjectがプレハブでない場合は、すべてが完全に機能し、プレイモードを開始した後でも、値はエディタースクリプトによって指定された値を保持します。
したがって、問題はプレハブを使用する場合にのみ発生します。