C# unity3d:如何将预制实例的一部分保存为预制?
我有一个大房间,里面有成千上万个嵌套的对象。我试图从数百个对象中选择一组表示单个对象的对象。这最初是一个sketchup文件,它被转换为一个预制变量并添加到场景中C# unity3d:如何将预制实例的一部分保存为预制?,c#,unity3d,C#,Unity3d,我有一个大房间,里面有成千上万个嵌套的对象。我试图从数百个对象中选择一组表示单个对象的对象。这最初是一个sketchup文件,它被转换为一个预制变量并添加到场景中 using UnityEngine; using System.Collections; using UnityEditor; public class CreatePrefab : MonoBehaviour { [MenuItem("Extras/Create Prefab From Selectio
using UnityEngine;
using System.Collections;
using UnityEditor;
public class CreatePrefab : MonoBehaviour
{
[MenuItem("Extras/Create Prefab From Selection")]
static void DoCreatePrefab()
{
Transform[] transforms = Selection.transforms;
foreach (Transform t in transforms)
{
GameObject prefab = PrefabUtility.CreatePrefab("Assets/Prefabs/" + t.gameObject.name +
".prefab", t.gameObject, ReplacePrefabOptions.ReplaceNameBased);
}
}
}
因此,我尝试迭代选择,并将它们转换为预设。这非常可笑,因为总共有将近100000个物体,而组成椅子的所有东西,如螺母、螺栓、杆,都是单独的游戏物体
我试图使用GPU实例来降低帧速率,但这个导入的模型需要以某种方式转换为预置。我试图提取重复的有意义对象(例如椅子),作为单独的椅子预制件,但问题是:
我如何将构成椅子的各个部分组合起来,并将其变成一个预制件?Unity既不能处理这么多的对象,也不能处理这么深的层次结构!(). 这样你就永远不会有好的表现。您必须在专用软件(通常是3D建模软件)中减少并组合对象,然后将这些对象导入unity。与您的相同要求。Unity没有提供这样的方法来保存嵌套预制修改,但可以通过一个技巧来实现 解决办法是:
prefableUtility实例化另一个嵌套预置。实例化prefab
prefableUtility保存修改。SaveAsPrefabAssetAndConnect
var prefabPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(goInScene);
var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
var anotherGo = PrefabUtility.InstantiatePrefab(prefab) as GameObject;
// Do the same modification of the nestedGo to anotherGo
PrefabUtility.SaveAsPrefabAssetAndConnect(anotherGo, prefabPath, InteractionMode.AutomatedAction); // This save will affect all prefab in Scene!
DestroyImmediate(anotherGo);
var prefablePath=PrefableUtility.GetPrefableAssetPathofNearestInstanceRoot(goInScene);
var prefact=AssetDatabase.LoadAssetPath(PrefactPath);
var anotherGo=prefactutility.实例化prefab(prefab)作为游戏对象;
//对nestedGo进行相同的修改,使其成为另一个Go
PrefactUtility.SaveAsPrefabAssetAndConnect(另一个Go、PrefactPath、InteractionMode.AutomatedAction);//此保存将影响场景中的所有预设!
立即销毁(另一个);
Unity既不能处理这么多的对象,也不能处理这么深的层次结构!(.因此,您永远不会以这种方式获得良好的性能。您必须在专用软件(通常是3D建模软件)中减少和组合对象,并将这些对象导入unity。@Thomas我接受这一答案