public GPUInstanceGroup(Mesh mesh, Material material, AnimDataInfo animDataInfo)
 {
     m_DrawMesh     = mesh;
     m_Mat          = material;
     m_AnimDataInfo = animDataInfo;
     m_Cells        = new List <GPUInstanceCell>();
     // CreateCell();
 }
Пример #2
0
        private void Awake()
        {
            m_Groups = new List <GPUInstanceGroup>();
            AnimDataInfo     animDataInfo = JsonUtility.FromJson <AnimDataInfo>(animInfoText.text);
            GPUInstanceGroup group        = new FootmanGroup(m_Mesh, material, animDataInfo);

            m_Groups.Add(group);
        }
 public static void SetAnimData(AnimDataInfo animDataInfo)
 {
     s_AnimDataInfo = animDataInfo;
     s_AnimDataMap  = new Dictionary <string, AnimMapClip>();
     foreach (var animData in s_AnimDataInfo.animMapClips)
     {
         s_AnimDataMap.Add(animData.name, animData);
     }
 }
Пример #4
0
    public List <BakedData> Bake()
    {
        if (_animData == null)
        {
            Debug.LogError("bake data is null!!");
            return(_bakedDataList);
        }

        int          totalHeight  = 0;
        AnimDataInfo animDataInfo = new AnimDataInfo();

        //所有动作生成在一个动作图上面
        for (int i = 0; i < _animData.Value.AnimationClips.Count; i++)
        {
            var animationState = _animData.Value.AnimationClips[i];

            if (!animationState.clip.legacy)//因为是顶点动画所以只能是legacy
            {
                Debug.LogError(string.Format($"{animationState.clip.name} is not legacy!!"));
                continue;
            }
            int startHeight = totalHeight;
            int frameHeight = (int)(animationState.clip.frameRate * animationState.length);//得到动画总帧数
            totalHeight += frameHeight;

            float       perFrameTime = animationState.length / frameHeight;
            AnimMapClip animMapClip  = new AnimMapClip();
            animMapClip.startHeight = startHeight;
            animMapClip.height      = frameHeight;
            // animMapClip.perFrameTime = perFrameTime;
            animMapClip.animLen = animationState.clip.length;
            animMapClip.name    = animationState.name;
            animDataInfo.animMapClips.Add(animMapClip);
        }

        // totalHeight = Mathf.NextPowerOfTwo(totalHeight);
        animDataInfo.maxHeight = totalHeight;
        var animMap = new Texture2D(_animData.Value.MapWidth, totalHeight, TextureFormat.RGBAHalf, true);

        animMap.name = string.Format($"{_animData.Value.Name}.animMap");

        Debug.LogError(totalHeight);

        for (int i = 0; i < animDataInfo.animMapClips.Count; i++)
        {
            BakePerAnimClip(_animData.Value.AnimationClips[i], ref animMap, animDataInfo.animMapClips[i]);
        }
        animMap.Apply();
        //在生成一个动画信息文本
        var animInfoJson = JsonUtility.ToJson(animDataInfo);

        Debug.LogError(animInfoJson);

        _bakedDataList.Add(new BakedData(animMap.name, animMap, animInfoJson));
        return(_bakedDataList);
    }
    public FootmanGroup(Mesh mesh, Material material, AnimDataInfo animDataInfo) : base(mesh, material, animDataInfo)
    {
        FootmanCellItem.SetAnimData(animDataInfo);

        for (int x = 0; x < 3; x++)
        {
            for (int y = 0; y < 3; y++)
            {
                FootmanCellItem item = new FootmanCellItem();
                item.Play("Run", true);
                // item.CrossFade("Run", 1.0f, true);
                item.pos      = new Vector3(x * 2, 0, y * 2);
                item.rotation = Quaternion.identity;
                AddCellItem(item);
            }
        }
    }