您的位置:首页 > 移动开发 > Unity3D

unity3d预制体修改与保存

2017-07-11 17:07 253 查看

给预制体添加子物体并保存,预期效果:



public class GunFireMenuItems : MonoBehaviour
{
public static string effectPrefabPath = "Assets/MuzzleFlashes 1/";
public static string effectOSXPath = "Assets/../StreamingAssets/OSX/GunFire/";
public static string effectLinuxPath = "Assets/../StreamingAssets/Linux/GunFire/";

[MenuItem ("Assets/AssetBundles/GunFire/AddGunFireEffectTag")]
public static void AddGunFireEffectTag ()
{
EditorUtility.DisplayProgressBar ("Modify Prefab", "Please wait...", 0);
var files = new DirectoryInfo (effectPrefabPath).GetFiles ();
for (int i = 0; i < files.Length; i++) {
var fileInfo = files [i];
if (fileInfo.Name.EndsWith (".prefab")) {
//Debug.Log (effectPrefabPath + fileInfo.Name);
AddEffectTag (effectPrefabPath + fileInfo.Name); //添加effectTag
EditorUtility.DisplayProgressBar ("Modify Prefab", "Please waiti...", (i + 1) / (float)files.Length);
}
}
AssetDatabase.SaveAssets ();
//去除进度条
EditorUtility.ClearProgressBar ();
}

/// <summary>
/// Adds the effect tag.
/// </summary>
/// <param name="prefabFullPath">Prefab full path.</param>
public static void AddEffectTag (string prefabFullPath)
{
GameObject tempEffectPrefab = AssetDatabase.LoadAssetAtPath<GameObject> (prefabFullPath);
GameObject tempEffectInstant = PrefabUtility.InstantiatePrefab (tempEffectPrefab) as GameObject;

//没有EffectTag则添加
foreach (Transform trans in tempEffectInstant.transform) {
if (trans.name.Contains ("EffectTag")) {
DestroyImmediate (tempEffectInstant);
return;
}
}

GameObject EffectTag = new GameObject ("EffectTag");
GameObject Gunfire = new GameObject ("Gunfire");
Gunfire.transform.parent = EffectTag.transform;
EffectTag.transform.parent = tempEffectInstant.transform;

//替换保存
PrefabUtility.ReplacePrefab (tempEffectInstant, tempEffectPrefab, ReplacePrefabOptions.ConnectToPrefab);
DestroyImmediate (tempEffectInstant);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d prefab 保存 编辑