假設我有一個簡單MonoBehaviour
如何在預製從腳本編輯
public class FooScript : MonoBehaviour {
public int someValue = 0;
}
我做遊戲物體,附加FooScript
。我做了一個預製,並在場景中刪除。
在編輯器中,我可以選擇項目中的預製件,並且可以編輯someValue
。
假設我知道預製件的路徑,我如何編輯編輯時間腳本以編輯預製件內的FooScript
實例?
搞什麼名堂試圖
GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(pathToPrefab);
GameObject root = ???? // WHAT DO I CALL HERE!?
FooScript fooScript = root.GetComponent<FooScript>();
fooScript.someValue = 789;
在這種情況下
其實prefab
是空
如果切換到
Object prefab = AssetDatabase.LoadMainAssetAtPath(prefabPath);
GameObject root = prefab as GameObject;
prefab
不爲空,但root
是
接下來我試着這
Object[] objs = AssetDatabase.LoadAllAssetsAtPath(prefabPath);
foreach (var o in obs)
{
Debug.Log(" type:" + (o.GetType().Name));
}
,打印
type: GameObject
type: Transform
type: FooScript
但使用的是因爲我不得不想盡一切遊戲物體和或FooScript哈克的解決方案。我的意思是我想作爲一個實用的解決方案,它可能會工作,但它感覺像增加技術債務,我將不得不稍後修復
我試過的其他事情是創建一個新的遊戲對象和新的FooScript的預製和調用PrefabUtility.ReplacePrefab
GameObject newGameObject = new GameObject();
FooScript fooScript = newGameObject.AddComponent<FooScript>();
fooScript.someValue = 789;
Object prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
PrefabUtility.ReplacePrefab(newGameObject, prefab, ReplacePrefabOptions.ConnectToPrefab);
GameObject.Destory(newGameObject); // don't want this in the scene
但這不適合我。預製件中的值被替換,但場景中的所有實例都斷開連接。
重申。我不想編輯預製的實例。我試圖在編輯時從腳本編輯預製件本身。
你通過HTTPS嘗試:/ /docs.unity3d.com/ScriptReference/AssetDatabase.html? – 2016-08-05 09:33:17
是的,對不起。 「資產」是一個錯字。更新了這個問題 – gman
[here](http://forum.unity3d.com/threads/assetdatabase-loadassetatpath-not-working.134913/),他們建議使用[Resources.LoadAssetAtPath](https://docs.unity3d.com /ScriptReference/Resources.LoadAssetAtPath.html),但文檔說這是depricated – ColmanJ