[MemoryPackable] publicpartialstruct CartesianMixerStateData { public Vector2 parameter; publicint[] transitionIndices; public Vector2[] thresholds; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
stateData.stateType = NetworkAnimationStateData.StateType.DirectionalMixer; var payload = new DirectionalMixerStateData(); payload.parameter = directionalMixerState.Parameter; payload.transitionIndices = newint[directionalMixerState.ChildCount]; payload.thresholds = new Vector2[directionalMixerState.ChildCount];
for (int index = 0; index < directionalMixerState.ChildCount; index++) { var child = directionalMixerState.GetChild(index); var transitionIndex = _transition2IndexDict[_clip2TransitionsDict[child.Clip]]; payload.transitionIndices[index] = transitionIndex; payload.thresholds[index] = directionalMixerState.GetThreshold(index); }
var layer = animancer.Layers[layerIndex]; var layerData = new NetworkAnimationLayerData { layerIndex = layerIndex, layerWeight = layer.Weight }; var networkAnimationDatas = new NetworkAnimationStateData[layer.ActiveStates.Count]; for (var i = 0; i < layer.ActiveStates.Count; i++) { var state = layer.ActiveStates[i]; // 序列化state的代码,参考上面的内容 }
var stateData = layerData.states[i]; AnimancerState state = null; if (stateData.stateType == NetworkAnimationStateData.StateType.Clip) { if (!id2State.TryGetValue(stateData.stateHash, out state)) { if (!animancer.Graph.Transitions.TryGetTransition(stateData.transitionIndex, outvar transitionModifierGroup)) { Debug.LogError( $"Transition index {stateData.transitionIndex} not found in Animancer Graph."); continue; } state = layer.GetOrCreateState(transitionModifierGroup.Transition); id2State[stateData.stateHash] = state; } }
DirectionalMixerState mixerState; var parmData = MemoryPackSerializer.Deserialize<DirectionalMixerStateData>(stateData.payload); if (!id2State.TryGetValue(stateData.stateHash, out state)) { mixerState = new DirectionalMixerState(); state = mixerState;
for (int index = 0; index < parmData.transitionIndices.Length; index++) { if (!animancer.Graph.Transitions.TryGetTransition(parmData.transitionIndices[index], outvar transitionModifierGroup)) { Debug.LogError( $"Transition index {parmData.transitionIndices[index]} not found in Animancer Graph."); continue; }
mixerState = state as DirectionalMixerState; if (mixerState == null) { Debug.LogError($"State hash {stateData.stateHash} is not DirectionalMixerState."); continue; }