public void reset() { curGameObject = null; animData = null; clipsData.Clear(); if (boneIds != null) { boneIds.Clear(); } }
public void Awake() { m_transform = transform; m_gameObject = gameObject; meshRenderer = this.gameObject.GetComponent <MeshRenderer>(); meshRenderer.sharedMaterial = mat; meshFilter = this.gameObject.GetComponent <MeshFilter>(); meshFilter.sharedMesh = lowMesh; scale = m_transform.localScale; m_gpuAnimation = new GPUSkinningAnimation(); if (textAsset) { animData = textAsset; m_gpuAnimation.Initial(animData); } }
// 设置选中的模型 public void setSelectedModel(GameObject obj, GenerateType type, List <AnimationClip> clips, SkinnedMeshRenderer skinnedMeshRenderer, float compress) { if (obj == null) { Debug.LogError("select obj is null!!"); animData = null; return; } if (curGameObject != obj || animData == null || genType != type || skinnedMeshRenderer != selectedSkinnedMeshRenderer || compress != compression) { genType = type; curGameObject = obj; clipList = clips; selectedSkinnedMeshRenderer = skinnedMeshRenderer; compression = compress; refreshGeneratorInfo(); } }
public void refreshGeneratorInfo() { animData = ScriptableObject.CreateInstance <GpuSkinningAnimData>(); int totalFrame = 0; int clipFrame = 0; clipsData.Clear(); boneIds = resortBone(curGameObject); animData.totalBoneNum = boneIds.Count; animClips = clipList.ToArray(); for (int i = 0; i < animClips.Length; ++i) { AnimationClip clip = animClips[i]; clipFrame = (int)(clip.frameRate * clip.length / compression); GpuSkinningAnimClip clipData = new GpuSkinningAnimClip(clip.name, totalFrame, totalFrame + clipFrame - 1, clip.frameRate / compression); clipsData.Add(clipData); totalFrame += clipFrame; } animData.totalFrame = totalFrame; animData.clips = clipsData.ToArray(); GenerateConfig config = generateConfigs[genType]; if (config.animationType == AnimationType.Vertices) { // 顶点动画 Mesh mesh = selectedSkinnedMeshRenderer.sharedMesh; animData.texWidth = mesh.vertices.Length; animData.texHeight = totalFrame * 2; // vec3需要两个像素表示(rgba32->float16) } else { // 骨骼动画 long totalPixels = boneIds.Count * DEFAULT_PER_FRAME_BONE_DATASPACE * totalFrame; calTextureSize(totalPixels, out animData.texWidth, out animData.texHeight); } }
private string convertGpuSkinningAnimData2Str(GpuSkinningAnimData data) { string str = "概要信息:\n所需数据不全,请检查\n"; if (data != null) { string str_anims = ""; for (int i = 0; i < data.clips.Length; ++i) { str_anims += string.Format(" \"{0}\": {1}~{2} \n", data.clips[i].name, data.clips[i].startFrame, data.clips[i].endFrame); } str = string.Format("概要信息:\n纹理大小:{0}x{1}\n总帧数:{2}\n骨骼数量:{3}\n动画列表:\n{4}", data.texWidth, data.texHeight , data.totalFrame, data.totalBoneNum, str_anims); } else { if (curGameObject == null) { str += "提示: 未选中FBX文件!!\n"; } } return(str); }
// init public void Initial(GpuSkinningAnimData data) { animData = data; animClipsDict = animData.getAnimationClipsDict(); }