public GameObject ImportSdf(string filename, Transform parent, Vector3 localPosition, Quaternion rotation) { if (_sdfCache.ContainsKey(filename)) { var obj = Instantiate(_sdfCache[filename], parent); obj.transform.localPosition = localPosition; obj.transform.localRotation = rotation; return(obj); } var sdf = SdfObjectParser.LoadSdf(filename); var sdfObject = new GameObject(sdf.Name); sdfObject.transform.parent = parent; sdfObject.transform.localPosition = localPosition; sdfObject.transform.rotation = rotation; var partDict = new Dictionary <string, GameObject> { { "WORLD", sdfObject } }; foreach (var sdfPart in sdf.Parts) { var partObj = ImportGeo(sdfPart.Name + ".geo", null, _3DObjectPrefab); partObj.transform.parent = partDict[sdfPart.ParentName].transform; partObj.transform.localPosition = sdfPart.Position; partObj.transform.localRotation = Quaternion.identity; partDict.Add(sdfPart.Name, partObj); } _sdfCache.Add(filename, sdfObject); return(sdfObject); }
public GameObject ImportSdf(string filename, Transform parent, Vector3 localPosition, Quaternion rotation, bool canWreck, out Sdf sdf, out GameObject wreckedPart) { wreckedPart = null; sdf = null; if (!_sdfCache.TryGetValue(filename, out sdf)) { sdf = SdfObjectParser.LoadSdf(filename, canWreck); _sdfCache.Add(filename, sdf); } GameObject sdfObject = new GameObject(sdf.Name); sdfObject.transform.parent = parent; sdfObject.transform.localPosition = localPosition; sdfObject.transform.rotation = rotation; Dictionary <string, GameObject> partDict = new Dictionary <string, GameObject> { { "WORLD", sdfObject } }; foreach (SdfPart sdfPart in sdf.Parts) { GameObject partObj = LoadSdfPart(sdfPart, partDict[sdfPart.ParentName].transform); if (partObj == null) { continue; } partObj.SetActive(true); partDict.Add(sdfPart.Name, partObj); } if (canWreck && sdf.WreckedPart != null) { wreckedPart = LoadSdfPart(sdf.WreckedPart, partDict[sdf.WreckedPart.ParentName].transform); if (wreckedPart != null) { wreckedPart.SetActive(false); Rigidbody rigidBody = sdfObject.AddComponent <Rigidbody>(); rigidBody.isKinematic = true; } } return(sdfObject); }