public static BlendShapeChannel[] GenerateBlendChannels(BlendShape[] shapes) { BlendShapeChannel[] channels = new BlendShapeChannel[shapes.Length]; for (int i = 0; i < shapes.Length; i++) { channels[i] = new BlendShapeChannel(shapes[i].Name, i, 1); } return(channels); }
// Select the BlendShape we want and modify his weight according to the slider value public void SetBlendShape(string blendShapeName, float blendShapeWeight) { #if UNITY_DOTSRUNTIME EntityCommandBuffer ecb = new EntityCommandBuffer(Allocator.Temp); Entities.ForEach((Entity entity, DynamicBuffer <BlendShapeWeight> smrBlendShapeWeightBuffer, ref SkinnedMeshRenderer smr, ref Character character) => { SetBlendShapeWeight setWeight = new SetBlendShapeWeight(); setWeight.NameHash = BlendShapeChannel.GetNameHash(blendShapeName); setWeight.ModifiedWeight = blendShapeWeight; DynamicBuffer <SetBlendShapeWeight> setWeightsBuffer = ecb.AddBuffer <SetBlendShapeWeight>(entity); setWeightsBuffer.Add(setWeight); }).WithoutBurst().Run(); ecb.Playback(EntityManager); ecb.Dispose(); #endif }
private static void ConvertBlendShapeData(GameObjectConversionSystem gsys, UnityEngine.SkinnedMeshRenderer uSkinnedMeshRenderer, Entity meshRendererEntity) { Mesh uMesh = uSkinnedMeshRenderer.sharedMesh; if (uMesh.blendShapeCount <= 0) { return; } DynamicBuffer <BlendShapeWeight> blendShapeWeightsBuffer = gsys.DstEntityManager.AddBuffer <BlendShapeWeight>(meshRendererEntity); for (int shapeIndex = 0; shapeIndex < uMesh.blendShapeCount; shapeIndex++) { string blendShapeName = uMesh.GetBlendShapeName(shapeIndex); float curWeight = uSkinnedMeshRenderer.GetBlendShapeWeight(shapeIndex); BlendShapeWeight blendShapeWeight = new BlendShapeWeight(); blendShapeWeight.NameHash = BlendShapeChannel.GetNameHash(blendShapeName); blendShapeWeight.CurWeight = curWeight; blendShapeWeightsBuffer.Add(blendShapeWeight); } }