public void reset()
 {
     curGameObject = null;
     animData      = null;
     clipsData.Clear();
     if (boneIds != null)
     {
         boneIds.Clear();
     }
 }
Пример #2
0
        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);
        }
Пример #6
0
 // init
 public void Initial(GpuSkinningAnimData data)
 {
     animData      = data;
     animClipsDict = animData.getAnimationClipsDict();
 }