| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | using System.Collections.Generic;using GameLogic.Combat.Hero.HeroGPU;using GameTimeLine.CustomizeTimeLogic;using GPUECSAnimationBaker.Engine.AnimatorSystem;using UnityEngine;namespace GameLogic.Combat.Hero{    public class CombatHeroGPUAnimtion : HeroAnimtionBasic    {        public GpuEcsAnimatorBehaviour GpuEcsAnimatorBehaviour;        public GPUAnimtion GPUAnimtion;        private GpuEcsAnimationData[] animations;        private HeroGPUAnimtionStateInfo _heroPlayStateInfoBasic;        protected HeroGPUMono _heroGPUMono;        private List<string> _anchorNames = new List<string>();        protected override void ProInit()        {            GpuEcsAnimatorBehaviour =                combatHeroEntity.GameObject.transform.GetComponentInChildren<GpuEcsAnimatorBehaviour>();            animations = GpuEcsAnimatorBehaviour.animations;            _anchorNames = GpuEcsAnimatorBehaviour.anchorNames;            GPUAnimtion = new GPUAnimtion();            GPUAnimtion.Init(GpuEcsAnimatorBehaviour);            _heroPlayStateInfoBasic = new HeroGPUAnimtionStateInfo();            _heroGPUMono = combatHeroEntity.combatHeroGameObject.HeroGPUMono;        }        protected override void ProUpdate(float t)        {            GPUAnimtion.Update();            _heroGPUMono.animtionState = GPUAnimtion.gpuEcsAnimatorShaderData.shaderData;        }        public override void SetSpecialDotMonoFollow(SpecialDotInfo specialDotInfo)        {            if (!specialDotInfo.followSkeleton)            {                return;            }            int index = _anchorNames.IndexOf(specialDotInfo.dotName);            if (index >= 0)            {                GPUAnimtion.GetGPUAnchors(index, out Vector3 pos, out Quaternion unityQuaternion);                specialDotInfo.targetTran.localPosition = pos;                specialDotInfo.targetTran.localRotation = unityQuaternion;            }        }        private int GetAnimtionIndex(string name)        {            for (int i = 0; i < animations.Length; i++)            {                if (animations[i].stateName.Equals(name))                {                    return i;                }            }            return -1;        }        private void SetSpeed(float speed)        {            GPUAnimtion.SetSpeed(speed);        }        public override HeroPlayStateInfoBasic Play(string name, float speed = 1)        {            int index = GetAnimtionIndex(name);            if (index < 0)            {                return null;            }            _heroPlayStateInfoBasic.OnSetSpeed = SetSpeed;            AnimatorInfo animatorInfo = new AnimatorInfo()            {                animationID = index,                blendFactor = 0,                speedFactor = speed            };            GPUAnimtion.SetAnimtionIndex(animatorInfo);            return _heroPlayStateInfoBasic;        }    }}
 |