public override Transform GetTransform() { UnityNodeBase transformNode = GetChildNodeByType(PCFResourceType.TRANSFORM); if (transformNode != null) { return(transformNode.GetTransform()); } return(this.transform); }
private void FindTransformsInHierarchy(UnityNodeBase node, Dictionary <string, Transform> mapping) { if (node.GetResourceType() == PCFResourceType.TRANSFORM) { Transform trans = node.GetTransform(); mapping.Add(node.GetName(), trans); } for (int i = 0; i < node.ChildNodes.Count; i++) { UnityNodeBase child = node.ChildNodes[i]; PCFResourceType type = child.GetResourceType(); //Optimize search by not going into subtress that do not contain bones. if (type == PCFResourceType.ROOT || type == PCFResourceType.OBJECT || type == PCFResourceType.TRANSFORM) { FindTransformsInHierarchy(child, mapping); } } }
public override void Deserialize(Dictionary <PCFResourceType, DataBlockBase> dataBlocks, UnityNodeBase parentNode, ResourceResponse resourceResponse, List <Action <UnityNodeBase> > postInstallActions, bool optimizedLoad) { if (!this.isDeserialized) { //Deserialize pointed node id. ResourceBlock dataBlock = dataBlocks[resourceType] as ResourceBlock; AssetResource resource = dataBlock.GetResource(this.referenceID); byte[] bytes = resource.GetResourceData(); UInt32 referencedNodeID = BitConverter.ToUInt32(bytes, 0); //JObject metaData = JObject.Parse(System.Text.Encoding.UTF8.GetString(metaDataBuffer)); //UInt32 referencedNodeID = metaData.Value<UInt32>("targetReferenceID"); Dictionary <UInt32, UnityNodeBase> referencedNodes = resourceResponse.GetReferencedNodes; if (referencedNodes.ContainsKey(referencedNodeID)) { UnityNodeBase referencedNode = referencedNodes[referencedNodeID]; Transform transform = referencedNode.GetTransform(); if (transform != null) { resourceResponse.GetFieldDeserializer.SetArrayItem(transform); } } this.isDeserialized = true; } }