private bool CreateCable(Node node) { var nativeCable = m_tree.GetCable(node.Uuid); if (nativeCable == null) { Debug.LogWarning("Unable to find native instance of cable: " + node.GameObject.name + " (UUID: " + node.Uuid.str() + ")"); return(false); } var cable = node.GameObject.GetOrCreateComponent <Cable>(); var route = cable.Route; route.Clear(); cable.RestoreLocalDataFrom(nativeCable); cable.RouteAlgorithm = Cable.RouteType.Identity; var properties = CableProperties.Create <CableProperties>().RestoreLocalDataFrom(nativeCable.getCableProperties(), nativeCable.getCablePlasticity()); properties.name = cable.name + "_properties"; cable.Properties = properties = AddOrReplaceAsset(properties, node, AGXUnity.IO.AssetType.CableProperties); for (var it = nativeCable.getSegments().begin(); !it.EqualWith(nativeCable.getSegments().end()); it.inc()) { var segment = it.get(); route.Add(segment, attachment => { if (attachment == null || attachment.getRigidBody() == null) { return(FileInfo.PrefabInstance); } var rbNode = m_tree.GetNode(attachment.getRigidBody().getUuid()); if (rbNode == null) { Debug.LogWarning("Unable to find rigid body in cable attachment."); return(FileInfo.PrefabInstance); } return(rbNode.GameObject); }); } var materials = node.GetReferences(Node.NodeType.Material); if (materials.Length > 0) { cable.Material = materials[0].Asset as ShapeMaterial; } cable.GetComponent <CableRenderer>().InitializeRenderer(); cable.GetComponent <CableRenderer>().Material = null; // Adding collision group from restored instance since the disabled pair // will be read from Space (cable.setEnableCollisions( foo, false ) will // work out of the box). var collisionGroups = cable.gameObject.GetOrCreateComponent <CollisionGroups>(); collisionGroups.AddGroup(nativeCable.getUniqueId().ToString(), false); var referencedGroups = node.GetReferences(Node.NodeType.GroupId); foreach (var group in referencedGroups) { if (group.Object is string) { collisionGroups.AddGroup(group.Object as string, false); } } return(true); }