/// <summary> /// To be called on FixedUpdate every frame /// </summary> public void Animate(Vector4[] rotations, Vector3[] translations) { GCHandle gcRotations = GCHandle.Alloc(rotations, GCHandleType.Pinned); GCHandle gcTranslations = GCHandle.Alloc(translations, GCHandleType.Pinned); // results var deformed = new Vector3[this.GetRestVertexCount()]; deformed.Initialize(); GCHandle gcDeformed = GCHandle.Alloc(deformed, GCHandleType.Pinned); NativeInterface.Animate(this._cppMesh, gcRotations.AddrOfPinnedObject(), gcTranslations.AddrOfPinnedObject(), gcDeformed.AddrOfPinnedObject()); gcRotations.Free(); gcTranslations.Free(); gcDeformed.Free(); string errorMessage = ExtractFailureMessage(NativeInterface.AnimationError(this._cppMesh)); if (!errorMessage.Equals("")) { NativeInterface.DestroyMesh(this._cppMesh); throw new Exception(errorMessage); } this.mesh.SetVertices(deformed); }