public GPUInstanceGroup(Mesh mesh, Material material, AnimDataInfo animDataInfo) { m_DrawMesh = mesh; m_Mat = material; m_AnimDataInfo = animDataInfo; m_Cells = new List <GPUInstanceCell>(); // CreateCell(); }
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); } }
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); } } }