实现先将动画对象,使用autolod插件生成lodground,
然后在GPUI Crowd Manager 生成CrowdPrefab,然后bake animation。
然后 Crowd 的animationdata 那里勾上use crowd animator,apply root motion 就可以使用了
生成对象
private List<GPUInstancerPrefab> _instanceList;
生成方法
GameObject g = Instantiate(prefab, spawnPosition, Quaternion.identity);
GPUICrowdPrefab prefabInstance = g.GetComponent<GPUICrowdPrefab>(); // We reference the prototype by the GPUICrowdPrefab component that GPUI adds on the prefab...
GPUInstancer.GPUInstancerAPI.AddPrefabInstance(gpuiCrowdManager, prefabInstance);
_instanceList = new List<GPUInstancerPrefab>();
_instanceList.Add(prefabInstance);
GPUInstancerAPI.RegisterPrefabInstanceList(gpuiCrowdManager, _instanceList);
动画切换
if (this.transform.GetComponent<GPUICrowdPrefab>() != null)
{
GPUICrowdPrototype crowdPrototype = this.transform.GetComponent<GPUICrowdPrefab>().prefabPrototype as GPUICrowdPrototype;
GPUIAnimationClipData clipData = crowdPrototype.animationData.clipDataList[2];//需要切换的动画index,只能有四个
GPUICrowdAPI.StartAnimation(this.transform.GetComponent<GPUICrowdPrefab>(), clipData, 0);
}
基于脚本的动画播放进度的过渡,根据进度触发攻击事件,不用脚本可以在Manager 中设置在第几帧触发事件
GPUICrowdPrefab gPUICrowdPrefab = this.transform.GetComponent<GPUICrowdPrefab>();
if (gPUICrowdPrefab != null)
{
GPUICrowdPrototype crowdPrototype = gPUICrowdPrefab.prefabPrototype as GPUICrowdPrototype;
GPUIAnimationClipData clipData = crowdPrototype.animationData.clipDataList[1];
// GPUICrowdAPI.StartAnimation(gPUICrowdPrefab, clipData, 0);
float t = gPUICrowdPrefab.crowdAnimator.GetClipTime(clipData);
float currentClipFrame = GPUICrowdAnimator.GetClipFrame(t, clipData.length, clipData.clipFrameCount, false);
float progress = currentClipFrame / clipData.clipFrameCount;
if (progress >= 0.95f)
{
Vector4 _blendWeights= new Vector4(0, 0, 0, 0);
isAttacking = false;
_blendWeights.x = 1;
_blendWeights.y = 0;
clipData = crowdPrototype.animationData.clipDataList[0];
gPUICrowdPrefab.crowdAnimator.StartBlend(gPUICrowdPrefab.runtimeData, gPUICrowdPrefab. gpuInstancerID - 1,_blendWeights, crowdPrototype.animationData.clipDataList[0], crowdPrototype.animationData.clipDataList[1], default, default, null, null, 0.1f);
}
_blendWeights为过渡权重,x为1,y为0,就是过渡到第一个动画,0.1f为过渡值。
Vector4 _blendWeights是代表仅有的四个动画的权重