一,创建Prefab
函数:PrefabUtility.CreatePrefab(),需要提供保存的目录以及当前的游戏对象。
ReplacePrefabOptions.ConnectToPrefab()表示创建的Prefab的同时自动关联到创建它的这个游戏对象。
[MenuItem(\"Assets/Tools/CreatePrefab\",false ,3)]
static void CreatePrefab()
{
if (Selection.activeTransform)
{
string path = \"Assets/Prefabs/Test.prefab\";
//判断文件是否存在,如果存在删除
if (AssetData .LoadAssetAtPath<Game >(path))
{
AssetData .DeleteAsset(path);
}
//创建新的Prefab传入三个参数,路径,对象,关联Prefab
PrefabUtility.CreatePrefab(path, Selection.activeGame ,
ReplacePrefabOptions.ConnectToPrefab);
//刷新视图
AssetData .Refresh();
}
}
在层级面板中选择一个想要创建Prefab的对象,然后点击Assets>>>>>Tools>>>>>CreatePrefab,就可以运行相关的函数。
二,实例化Prefab
在编辑器模式下我们通常使用PrefabUtility.InstantiatePrefab()方法来实例化Prefab,以及常用的FBX格式的资源,使用这种加载方式可以保持它的一些引用关系。(这方法用来保持原有的依赖关系,并非克隆一份新的)
我们通常使用transform.SetParent().第二个参数如果是false表示它不会被父坐标影响,会回归原点。
static void MyLoad()
{
if (Selection.activeTransform)
{
Game game = AssetData .LoadAssetAtPath<Game >
(\"Assets/Prefabs/Test.prefab\");
if (game != null)
{
Game go = PrefabUtility.InstantiatePrefab(game ) as
Game ;
go.transform.SetParent(Selection.activeTransform,false);
}
else
{
Debug.LogError(\"资源加载失败!!!\");
}
}
}
三,更新Prefab
函数:使用PrefabUtility.ReplacePrefab()方法用来更新Prefab。
[MenuItem(\"Assets/Tools/ApplyPrefab\", false, 4)]
static void ApplyPrefab()
{
if (Selection.activeTransform)
{
//判断是否是Prefab
prefab = PrefabUtility.GetPrefab (Selection.activeGame );
//如果是
if (prefab)
{
PrefabUtility.ReplacePrefab(Selection.activeGame ,prefab,ReplacePrefabOptions.ConnectToPrefab);
}
//刷新Project视图
AssetData .Refresh();
}
}
四,卸载资源
在编辑器模式下我们使用Game .DestroyImmediate()方法来卸载游戏对象。如果需要卸载游戏对象的引用资源,则第二个参数是True,默认为false。
[MenuItem(\"Assets/Tools/Delete\", false, 5)]
static void Delete()
{
if (Selection.activeTransform)
{
Game .DestroyImmediate(Selection.activeGame ,true);
}
}
五,游戏对象与资源的一些关系
我们知道游戏对象与资源是一种引用关系。例如一个模型是Mesh和贴图组成的,当我们拖到场景中时,这个游戏对象也是会引用对应的贴图和Mesh的。通常我们删除游戏对象时,仅仅是把游戏对象给删除了呢,并没有卸载掉对应的引用,因为如果加载和卸载游戏对象很频繁,每次卸载都将引用卸载掉,这会造成IO的阻塞。但是如果是长时间不用这些资源,必然导致内存的增加,因此我们可以使用EditorUtility.UnloadUnusedAssetsImmediate()来卸载长时间不用的资源。
继续阅读与本文标签相同的文章
360员工集体婚礼触动周鸿祎:想要重办一次婚礼了
-
每月更新两版 完善145个技术点 夸克无障碍版打造信息坦途
2026-05-18栏目: 教程
-
高危预警|RDP漏洞或引发大规模蠕虫爆发,用户可用阿里云免费检测服务自检,建议尽快修复
2026-05-18栏目: 教程
-
云上一指禅:大数据产品DataWorks每日问答
2026-05-18栏目: 教程
-
云数据库RDS是什么?
2026-05-18栏目: 教程
-
2019智能安防工程师大会在杭州成功召开
2026-05-18栏目: 教程
