5

これが私の最初の質問です。トピックに関するものを見つけることができませんでした。

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がプレハブでない場合は、すべてが完全に機能し、プレイモードを開始した後でも、値はエディタースクリプトによって指定された値を保持します。

したがって、問題はプレハブを使用する場合にのみ発生します。

4

1 に答える 1

4

EditorUtility.SetDirty (tb);すべての変更が完了したら呼び出す必要があります。詳細については、 EditorUtility.SetDirtyを参照してください。

プレハブ自体を変更する必要がある場合は、PrefabUtilityを参照してください。

于 2012-04-21T08:23:53.723 に答える