gpu instancer crowd 动画使用方式

实现先将动画对象,使用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是代表仅有的四个动画的权重

相关推荐
Martina_03213 天前
AI生成3D场景导入 Unity/Unreal 后,NPC 总串层?用6步检查导航高度与跨层连接
人工智能·游戏·数学建模·3d·unity·自然语言处理·aigc
小贺儿开发3 天前
Unity 局域网遥控幻灯片展示工具 3.0
科技·http·unity·工具·ppt·通信·网页
WarPigs5 天前
Unity对象不应该使用null传播的问题
unity
每日出拳老爷子6 天前
【VR】【Unity】抓走转放系列21|一天搭完门和抽屉工具槽:小场景按这个次序拼装
unity·vr·驱动·排错·snap zone
淡海水7 天前
02-02-原理篇-分代GC
算法·unity·c#·游戏引擎·.net·gc
小贺儿开发7 天前
Unity 文物新生 会讲故事的文物展墙
人工智能·科技·unity·ai·视频·互动·演示
淡海水7 天前
02-03-原理篇-大对象堆
unity·c#·游戏引擎·.net·gc
WarPigs8 天前
Unity在Create菜单添加创建自定义脚本模板选项
unity
淡海水8 天前
02-01-原理篇-Mark-Sweep与变种算法
算法·unity·c#·游戏引擎·.net·gc
babywang08 天前
Unity笔记--塔防游戏中的ECS架构:从原理到实战的全面解析
unity·ecs架构