這是我的第一個問題。無法找到關於該主題的任何內容。無法更改附加到遊戲對象的腳本的公共變量。在遊戲中恢復數值
我想創建一個編輯器腳本,用於更改連接到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按鈕時,兩個bool的值會切換回腳本應用之前的值。
無論預製件的值是什麼,在應用編輯器腳本之前,這些值都會恢復到值。
我做錯了什麼或它是一個錯誤?
如果我應用編輯器腳本,將場景保存爲新場景,並打開新創建的場景,這些值也是錯誤的。
但是,如果GameObject不是預製件,那麼所有的工作都完美無缺,並且即使在啓動播放模式之後,值仍然保持其由編輯器腳本給出的值。
所以這個問題只存在於使用預製件時。
順便說一句,我對團結3.5.0 – ymerkryds 2012-04-19 11:09:17
+1令人感興趣,歡迎SO。 _(GameObject是預製件)_:場景中的GameObject來自我理解預製件的實例,但不是預製件本身。我是否理解你是正確的,在這種情況下,變化是可見的,但不適用於預製本身? – Kay 2012-04-19 19:46:46
是的,你已經正確地理解了我。你的觀點是正確的,我的場景中的GameObject是一個預製的實例。由編輯器腳本設置的值僅適用於場景中的GameObject,並且不會應用於預製。但是當我按PLAY按鈕或保存場景並重新打開時,值不會被保存,而是在應用編輯器腳本之前將其恢復爲值。如果我打破預製實例,這不會發生。 – ymerkryds 2012-04-20 09:14:06