public static void CloneTo(this VRCPlayableLayerControl source, VRCPlayableLayerControl dest) { dest.layer = source.layer; dest.ApplySettings = source.ApplySettings; dest.goalWeight = source.goalWeight; dest.blendDuration = source.blendDuration; dest.debugString = source.debugString; dest.name = source.name; dest.hideFlags = source.hideFlags; }
private void GetBehaviours(RuntimeAnimatorController runController, AnimatorController controller, TEA_PlayableLayerData layerData, VRCAvatarDescriptor.AnimLayerType type) { AnimatorController runCont = AssetDatabase.LoadAssetAtPath<AnimatorController>(AssetDatabase.GetAssetPath(runController)); int layerC = 0; foreach(AnimatorControllerLayer layer in runCont.layers) { AnimatorControllerLayer copyLayer = controller.layers[layerC]; int stateC = 0; foreach(ChildAnimatorState state in layer.stateMachine.states) { ChildAnimatorState copyState = copyLayer.stateMachine.states[stateC]; int behC = 0; foreach(StateMachineBehaviour beh in state.state.behaviours) { //Debug.Log($"getting avatar[{currentAvatar.name}] copyState[{copyState.state.name}] state[{state.state.name}] behC[{behC}] count[{copyState.state.behaviours.Length}]"); if(beh is VRCPlayableLayerControl) { VRCPlayableLayerControl pc = (VRCPlayableLayerControl)beh; TEA_PlayableLayerControl tc = copyState.state.AddStateMachineBehaviour<TEA_PlayableLayerControl>(); tc.blendDuration = pc.blendDuration; tc.debugString = pc.debugString; tc.goalWeight = pc.goalWeight; tc.layer = pc.layer; tc.state = copyState.state.name; } else if(beh is VRCAvatarParameterDriver) { VRCAvatarParameterDriver vd = (VRCAvatarParameterDriver)beh; TEA_AvatarParameterDriver td = copyState.state.AddStateMachineBehaviour<TEA_AvatarParameterDriver>(); td.name = vd.name; td.debugString = vd.debugString; td.localOnly = vd.localOnly; td.parameters = new List<VRC.SDKBase.VRC_AvatarParameterDriver.Parameter>(); foreach(VRCAvatarParameterDriver.Parameter param in vd.parameters) { td.parameters.Add(new VRCAvatarParameterDriver.Parameter() { chance = param.chance, name = param.name, type = param.type, value = param.value, valueMax = param.valueMax, valueMin = param.valueMin }); td.state = copyState.state.name; //--- validation --- } ValidateParameterDriver((VRCAvatarParameterDriver)beh, type, layer, state.state); } behC++; }//for behavior stateC++; }//for state layerC++; }//for layer }