private void processCharacter(Animator animator) { CharacterPackage chrPack = new CharacterPackage(); chrPack.rootDag = vpet.Extensions.getPathString(animator.transform, scene); chrPack.rootDagSize = chrPack.rootDag.Length; HumanBone[] boneArray = animator.avatar.humanDescription.human; chrPack.bMSize = Enum.GetNames(typeof(HumanBodyBones)).Length; chrPack.boneMapping = new String[chrPack.bMSize]; chrPack.dagSizes = new int[chrPack.bMSize]; for (int i = 0; i < boneArray.Length; i++) { if (boneArray[i].boneName != null) { string enumName = boneArray[i].humanName.Replace(" ", ""); HumanBodyBones enumNum; Enum.TryParse <HumanBodyBones>(enumName, true, out enumNum); Transform boneTransform = vpet.Extensions.FindDeepChild(animator.transform, boneArray[i].boneName); chrPack.boneMapping[(int)enumNum] = vpet.Extensions.getPathString(boneTransform, scene); chrPack.dagSizes[(int)enumNum] = chrPack.boneMapping[(int)enumNum].Length; } } SkeletonBone[] skeletonArray = animator.avatar.humanDescription.skeleton; chrPack.sSize = skeletonArray.Length; chrPack.skeletonMapping = new String[chrPack.sSize]; chrPack.bonePosition = new float[chrPack.sSize * 3]; chrPack.boneRotation = new float[chrPack.sSize * 4]; chrPack.boneScale = new float[chrPack.sSize * 3]; chrPack.sdagSizes = new int[chrPack.sSize]; for (int i = 0; i < skeletonArray.Length; i++) { chrPack.skeletonMapping[i] = skeletonArray[i].name; chrPack.sdagSizes[i] = chrPack.skeletonMapping[i].Length; chrPack.bonePosition[i * 3] = skeletonArray[i].position.x; chrPack.bonePosition[i * 3 + 1] = skeletonArray[i].position.y; chrPack.bonePosition[i * 3 + 2] = skeletonArray[i].position.z; chrPack.boneRotation[i * 4] = skeletonArray[i].rotation.x; chrPack.boneRotation[i * 4 + 1] = skeletonArray[i].rotation.y; chrPack.boneRotation[i * 4 + 2] = skeletonArray[i].rotation.z; chrPack.boneRotation[i * 4 + 3] = skeletonArray[i].rotation.w; chrPack.boneScale[i * 3] = skeletonArray[i].scale.x; chrPack.boneScale[i * 3 + 1] = skeletonArray[i].scale.y; chrPack.boneScale[i * 3 + 2] = skeletonArray[i].scale.z; } characterList.Add(chrPack); }
private void processCharacter(Animator animator) { CharacterPackage chrPack = new CharacterPackage(); chrPack.rootId = gameObjectList.IndexOf(animator.transform.gameObject); HumanBone[] boneArray = animator.avatar.humanDescription.human; chrPack.bMSize = Enum.GetNames(typeof(HumanBodyBones)).Length; chrPack.boneMapping = Enumerable.Repeat(-1, chrPack.bMSize).ToArray <int>(); for (int i = 0; i < boneArray.Length; i++) { if (boneArray[i].boneName != null) { string enumName = boneArray[i].humanName.Replace(" ", ""); HumanBodyBones enumNum; Enum.TryParse <HumanBodyBones>(enumName, true, out enumNum); Transform boneTransform = vpet.Extensions.FindDeepChild(animator.transform, boneArray[i].boneName); chrPack.boneMapping[(int)enumNum] = gameObjectList.IndexOf(boneTransform.gameObject); } } SkeletonBone[] skeletonArray = animator.avatar.humanDescription.skeleton; chrPack.sSize = skeletonArray.Length; chrPack.skeletonMapping = new int[chrPack.sSize]; chrPack.bonePosition = new float[chrPack.sSize * 3]; chrPack.boneRotation = new float[chrPack.sSize * 4]; chrPack.boneScale = new float[chrPack.sSize * 3]; for (int i = 0; i < skeletonArray.Length; i++) { chrPack.skeletonMapping[i] = gameObjectList.IndexOf(GameObject.Find(skeletonArray[i].name)); chrPack.bonePosition[i * 3] = skeletonArray[i].position.x; chrPack.bonePosition[i * 3 + 1] = skeletonArray[i].position.y; chrPack.bonePosition[i * 3 + 2] = skeletonArray[i].position.z; chrPack.boneRotation[i * 4] = skeletonArray[i].rotation.x; chrPack.boneRotation[i * 4 + 1] = skeletonArray[i].rotation.y; chrPack.boneRotation[i * 4 + 2] = skeletonArray[i].rotation.z; chrPack.boneRotation[i * 4 + 3] = skeletonArray[i].rotation.w; chrPack.boneScale[i * 3] = skeletonArray[i].scale.x; chrPack.boneScale[i * 3 + 1] = skeletonArray[i].scale.y; chrPack.boneScale[i * 3 + 2] = skeletonArray[i].scale.z; } characterList.Add(chrPack); }
private void convertCharacterByteStream() { m_characterList = new List <CharacterPackage>(); int dataIdx = 0; while (dataIdx < m_characterByteData.Length - 1) { CharacterPackage characterPack = new CharacterPackage(); // get bone Mapping size characterPack.bMSize = BitConverter.ToInt32(m_characterByteData, dataIdx); dataIdx += size_int; // get bone Mapping size characterPack.sSize = BitConverter.ToInt32(m_characterByteData, dataIdx); dataIdx += size_int; // get root dag path characterPack.rootId = BitConverter.ToInt32(m_characterByteData, dataIdx); dataIdx += size_int; // get bone mapping characterPack.boneMapping = new int[characterPack.bMSize]; for (int i = 0; i < characterPack.bMSize; i++) { characterPack.boneMapping[i] = BitConverter.ToInt32(m_characterByteData, dataIdx); dataIdx += size_int; } //get skeleton mapping characterPack.skeletonMapping = new int[characterPack.sSize]; for (int i = 0; i < characterPack.sSize; i++) { characterPack.skeletonMapping[i] = BitConverter.ToInt32(m_characterByteData, dataIdx); dataIdx += size_int; } //get skeleton bone postions characterPack.bonePosition = new float[characterPack.sSize * 3]; for (int i = 0; i < characterPack.sSize; i++) { characterPack.bonePosition[i * 3] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.bonePosition[i * 3 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.bonePosition[i * 3 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; } //get skeleton bone rotations characterPack.boneRotation = new float[characterPack.sSize * 4]; for (int i = 0; i < characterPack.sSize; i++) { characterPack.boneRotation[i * 4] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.boneRotation[i * 4 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.boneRotation[i * 4 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.boneRotation[i * 4 + 3] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; } //get skeleton bone scales characterPack.boneScale = new float[characterPack.sSize * 3]; for (int i = 0; i < characterPack.sSize; i++) { characterPack.boneScale[i * 3] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.boneScale[i * 3 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.boneScale[i * 3 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; } m_characterList.Add(characterPack); } Array.Clear(m_objectsByteData, 0, m_objectsByteData.Length); m_objectsByteData = null; Array.Clear(m_characterByteData, 0, m_characterByteData.Length); m_characterByteData = null; GC.Collect(); }
private void convertCharacterByteStream() { m_characterList = new List <CharacterPackage>(); int dataIdx = 0; while (dataIdx < m_characterByteData.Length - 1) { CharacterPackage characterPack = new CharacterPackage(); // get bone Mapping size int intValue = BitConverter.ToInt32(m_characterByteData, dataIdx); dataIdx += size_int; characterPack.bMSize = intValue; // get bone Mapping size intValue = BitConverter.ToInt32(m_characterByteData, dataIdx); dataIdx += size_int; characterPack.sSize = intValue; // get root dag size intValue = BitConverter.ToInt32(m_characterByteData, dataIdx); dataIdx += size_int; characterPack.rootDagSize = intValue; // get root dag path byte[] rootDagByte = new byte[intValue]; Buffer.BlockCopy(m_characterByteData, dataIdx, rootDagByte, 0, intValue); dataIdx += intValue; characterPack.rootDag = Encoding.ASCII.GetString(rootDagByte); // get dag sizes characterPack.dagSizes = new int[characterPack.bMSize]; for (int i = 0; i < characterPack.bMSize; i++) { characterPack.dagSizes[i] = BitConverter.ToInt32(m_characterByteData, dataIdx); dataIdx += size_int; } // get bone mapping characterPack.boneMapping = new string[characterPack.bMSize]; for (int i = 0; i < characterPack.bMSize; i++) { int stringSize = characterPack.dagSizes[i]; byte[] dagByte = new byte[stringSize]; Buffer.BlockCopy(m_characterByteData, dataIdx, dagByte, 0, stringSize); dataIdx += stringSize; characterPack.boneMapping[i] = Encoding.ASCII.GetString(dagByte); } // get dag skeleton sizes characterPack.sdagSizes = new int[characterPack.sSize]; for (int i = 0; i < characterPack.sSize; i++) { characterPack.sdagSizes[i] = BitConverter.ToInt32(m_characterByteData, dataIdx); dataIdx += size_int; } //get skeleton mapping characterPack.skeletonMapping = new string[characterPack.sSize]; for (int i = 0; i < characterPack.sSize; i++) { int stringSize = characterPack.sdagSizes[i]; byte[] sdagByte = new byte[stringSize]; Buffer.BlockCopy(m_characterByteData, dataIdx, sdagByte, 0, stringSize); dataIdx += stringSize; characterPack.skeletonMapping[i] = Encoding.ASCII.GetString(sdagByte); } //get skeleton bone postions characterPack.bonePosition = new float[characterPack.sSize * 3]; for (int i = 0; i < characterPack.sSize; i++) { characterPack.bonePosition[i * 3] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.bonePosition[i * 3 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.bonePosition[i * 3 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; } //get skeleton bone rotations characterPack.boneRotation = new float[characterPack.sSize * 4]; for (int i = 0; i < characterPack.sSize; i++) { characterPack.boneRotation[i * 4] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.boneRotation[i * 4 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.boneRotation[i * 4 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.boneRotation[i * 4 + 3] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; } //get skeleton bone scales characterPack.boneScale = new float[characterPack.sSize * 3]; for (int i = 0; i < characterPack.sSize; i++) { characterPack.boneScale[i * 3] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.boneScale[i * 3 + 1] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; characterPack.boneScale[i * 3 + 2] = BitConverter.ToSingle(m_characterByteData, dataIdx); dataIdx += size_float; } m_characterList.Add(characterPack); } Array.Clear(m_characterByteData, 0, m_characterByteData.Length); m_characterByteData = null; GC.Collect(); }