public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphJump settings) { m_AnimState = controller.GetComponent <AnimStateData>(); m_Mixer = AnimationLayerMixerPlayable.Create(graph, 2); m_AnimJump = AnimationClipPlayable.Create(graph, settings.animJump); m_AnimJump.SetApplyFootIK(true); m_AnimJump.SetDuration(settings.animJump.length); m_AnimJump.Pause(); graph.Connect(m_AnimJump, 0, m_Mixer, 0); m_Mixer.SetInputWeight(0, 1); var gameJumpHeight = 1.0f; var gameJumpDuration = 0.3f; var animJumpVel = settings.jumpHeight / settings.animJump.length; var characterJumpVel = gameJumpHeight / gameJumpDuration; m_PlaySpeed = characterJumpVel / animJumpVel; m_AnimAim = AnimationClipPlayable.Create(graph, settings.animAim); m_AnimAim.SetApplyFootIK(false); m_AnimAim.Pause(); graph.Connect(m_AnimAim, 0, m_Mixer, 1); m_Mixer.SetInputWeight(1, 1); m_Mixer.SetLayerAdditive(1, true); m_AimTimeFactor = settings.animAim.length / 180.0f; }
public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphStand settings) { m_Settings = settings; m_AnimState = controller.GetComponent <AnimStateData>(); m_PredictedState = controller.GetComponent <LogicStateData>(); m_Mask = 1 << LayerMask.NameToLayer("Default") | 1 << LayerMask.NameToLayer("Platform"); m_LocomotionMixer = AnimationMixerPlayable.Create(graph, (int)LocoMixerPort.Count); m_AnimIdle = AnimationClipPlayable.Create(graph, settings.animIdle); graph.Connect(m_AnimIdle, 0, m_LocomotionMixer, (int)LocoMixerPort.Idle); m_LocomotionMixer.SetInputWeight((int)LocoMixerPort.Idle, 1.0f); m_AnimTurnL = CreateTurnPlayable(graph, settings.animTurnL, m_LocomotionMixer, LocoMixerPort.TurnL); m_AnimTurnR = CreateTurnPlayable(graph, settings.animTurnR, m_LocomotionMixer, LocoMixerPort.TurnR); var ports = new int[] { (int)LocoMixerPort.Idle, (int)LocoMixerPort.TurnL, (int)LocoMixerPort.TurnR }; m_Transition = new SimpleTranstion <AnimationMixerPlayable>(m_LocomotionMixer, ports); if (settings.animTurnL.events.Length != 0) { m_LeftTurnFootFalls = ExtractFootFalls(settings.animTurnL); m_RightTurnFootFalls = ExtractFootFalls(settings.animTurnR); } var animator = controller.GetComponent <Animator>(); var skeleton = controller.GetComponent <Skeleton>(); var leftToes = skeleton.bones[skeleton.GetBoneIndex(settings.leftToeBone.GetHashCode())]; var rightToes = skeleton.bones[skeleton.GetBoneIndex(settings.rightToeBone.GetHashCode())]; var ikJob = new FootIkJob { settings = settings.footIK, leftToe = animator.BindStreamTransform(leftToes), rightToe = animator.BindStreamTransform(rightToes) }; m_FootIk = AnimationScriptPlayable.Create(graph, ikJob, 1); graph.Connect(m_LocomotionMixer, 0, m_FootIk, 0); m_FootIk.SetInputWeight(0, 1f); m_AimMixer = AnimationMixerPlayable.Create(graph, (int)AimMixerPort.Count, true); m_AnimAimLeft = CreateAimPlayable(graph, settings.animAimLeft, m_AimMixer, AimMixerPort.AimLeft); m_AnimAimMid = CreateAimPlayable(graph, settings.animAimMid, m_AimMixer, AimMixerPort.AimMid); m_AnimAimRight = CreateAimPlayable(graph, settings.animAimRight, m_AimMixer, AimMixerPort.AimRight); m_AdditiveMixer = AnimationLayerMixerPlayable.Create(graph); var locoMixerPort = m_AdditiveMixer.AddInput(m_FootIk, 0); m_AdditiveMixer.SetInputWeight(locoMixerPort, 1); var aimMixerPort = m_AdditiveMixer.AddInput(m_AimMixer, 0); m_AdditiveMixer.SetInputWeight(aimMixerPort, 1); m_AdditiveMixer.SetLayerAdditive((uint)aimMixerPort, true); }
public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphSquash settings) { m_Settings = settings; m_AnimState = controller.GetComponent <AnimStateData>(); m_PredictedState = controller.GetComponent <LogicStateData>(); m_Mixer = AnimationLayerMixerPlayable.Create(graph, 2); m_AnimSquash = AnimationClipPlayable.Create(graph, settings.animSquash); m_AnimSquash.SetApplyFootIK(false); m_AnimSquash.SetDuration(settings.animSquash.length); m_AnimSquash.Pause(); m_Mixer.ConnectInput(1, m_AnimSquash, 0, 0.0f); m_Mixer.SetLayerAdditive(1, true); }
void Awake() { m_AbilityMove = GetComponent <AbilityMove>(); m_AnimStateController = GetComponent <AnimStateController>(); m_AnimState = GetComponent <AnimStateData>(); if (m_AnimState == null) { m_AnimState = gameObject.AddComponent <AnimStateData>(); } m_PredictedState = GetComponent <LogicStateData>(); if (m_PredictedState == null) { m_PredictedState = gameObject.AddComponent <LogicStateData>(); } m_PredictedState.position = transform.position; m_PredictedState.velocity = Vector3.zero; }
public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphMove3Dir settings) { m_AnimState = controller.GetComponent <AnimStateData>(); m_MovementMixer = AnimationMixerPlayable.Create(graph, 3); m_MovementClips = new AnimationClipPlayable[3]; m_MovementClips[(int)Direction.Forward] = AnimationClipPlayable.Create(graph, settings.animMoveN); m_MovementClips[(int)Direction.ForwardLeft] = AnimationClipPlayable.Create(graph, settings.animMoveNW); m_MovementClips[(int)Direction.ForwardRight] = AnimationClipPlayable.Create(graph, settings.animMoveNE); foreach (var clip in m_MovementClips) { clip.SetApplyFootIK(true); clip.SetSpeed(settings.animMovePlaySpeed); graph.Connect(m_MovementClips[(int)Direction.Forward], 0, m_MovementMixer, (int)Direction.Forward); graph.Connect(m_MovementClips[(int)Direction.ForwardLeft], 0, m_MovementMixer, (int)Direction.ForwardLeft); graph.Connect(m_MovementClips[(int)Direction.ForwardRight], 0, m_MovementMixer, (int)Direction.ForwardRight); } }
public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphInAir settings) { m_AnimState = controller.GetComponent <AnimStateData>(); m_Mixer = AnimationLayerMixerPlayable.Create(graph, 2); m_AnimInAir = AnimationClipPlayable.Create(graph, settings.animInAir); m_AnimInAir.Play(); m_AnimInAir.SetApplyFootIK(false); graph.Connect(m_AnimInAir, 0, m_Mixer, 0); m_Mixer.SetInputWeight(0, 1); m_AnimAim = AnimationClipPlayable.Create(graph, settings.animAim); m_AnimAim.SetApplyFootIK(false); m_AnimAim.Pause(); graph.Connect(m_AnimAim, 0, m_Mixer, 1); m_Mixer.SetInputWeight(1, 1); m_Mixer.SetLayerAdditive(1, true); m_AimTimeFactor = settings.animAim.length / 180.0f; }
public Instance(AnimStateController controller, PlayableGraph graph, AnimGraphMove8Dir settings) { m_Settings = settings; m_AnimState = controller.GetComponent <AnimStateData>(); m_LocomotionMixer = AnimationLayerMixerPlayable.Create(graph, 3); m_BlendTree = new BlendTree2d(graph, settings.blendSpaceNodes); m_BlendTree.masterSpeed = settings.animMovePlaySpeed; graph.Connect(m_BlendTree.rootPlayable, 0, m_LocomotionMixer, 0); m_LocomotionMixer.SetInputWeight(0, 1.0f); if (settings.animAim != null) { m_AnimAim = AnimationClipPlayable.Create(graph, settings.animAim); m_AnimAim.SetApplyFootIK(false); m_AnimAim.Pause(); m_AimTimeFactor = m_AnimAim.GetAnimationClip().length / 180.0f; graph.Connect(m_AnimAim, 0, m_LocomotionMixer, 1); m_LocomotionMixer.SetInputWeight(1, 1.0f); m_LocomotionMixer.SetLayerAdditive(1, true); } }
void Start() { m_AnimState = GetComponent <AnimStateData>(); m_PredictedState = GetComponent <LogicStateData>(); m_PlayableGraph = PlayableGraph.Create(name); m_AnimGraph = animStateDefinition.Instatiate(this, m_PlayableGraph); m_AnimGraphLogic = m_AnimGraph as IGraphLogic; m_AnimGraphState = m_AnimGraph as IGraphState; m_PlayableGraph.Play(); #if UNITY_EDITOR GraphVisualizerClient.Show(m_PlayableGraph); #endif var outputPlayable = Playable.Null; var outputPort = 0; m_AnimGraph.GetPlayableOutput(0, ref outputPlayable, ref outputPort); var animator = GetComponentInChildren <Animator>(); animator.fireEvents = enableAnimatorEvent; var animationOutput = AnimationPlayableOutput.Create(m_PlayableGraph, "Animator", animator); animationOutput.SetSourcePlayable(outputPlayable, outputPort); }
public Instance(AnimStateController animStateController, PlayableGraph graph, AnimGraphStateSelector settings) { m_AnimStateData = animStateController.GetComponent <AnimStateData>(); m_Mixer = AnimationMixerPlayable.Create(graph, 0, true); m_AnimStates = new AnimationControllerEntry[(int)LocomotionState.MaxValue]; var controllers = new Dictionary <AnimGraphAsset, IAnimGraphInstance>(); var controllerPorts = new Dictionary <IAnimGraphInstance, int>(); var stateTransitionPorts = new List <int>(); var transitionTimes = new Dictionary <IAnimGraphInstance, float[]>(); foreach (var controllerDef in settings.controllers) { if (controllerDef.template == null) { continue; } if (controllers.ContainsKey(controllerDef.template)) { continue; } var controller = controllerDef.template.Instatiate(animStateController, graph); controllers.Add(controllerDef.template, controller); var outputPlayable = Playable.Null; var outputPort = 0; controller.GetPlayableOutput(0, ref outputPlayable, ref outputPort); var port = m_Mixer.AddInput(outputPlayable, outputPort); controllerPorts.Add(controller, port); stateTransitionPorts.Add(port); var times = new float[(int)LocomotionState.MaxValue]; for (var i = 0; i < (int)LocomotionState.MaxValue; i++) { times[i] = controllerDef.transitionTime; } for (var i = 0; i < controllerDef.customTransitions.Length; i++) { var sourceStateIndex = (int)controllerDef.customTransitions[i].sourceState; var time = controllerDef.customTransitions[i].transtionTime; times[sourceStateIndex] = time; } transitionTimes.Add(controller, times); } foreach (var controllerDef in settings.controllers) { var animState = controllerDef.animationState; if (m_AnimStates[(int)animState].controller != null) { continue; } var controller = controllers[controllerDef.template]; m_AnimStates[(int)animState].controller = controller; m_AnimStates[(int)animState].animStateUpdater = controller as IGraphState; m_AnimStates[(int)animState].port = controllerPorts[controller]; m_AnimStates[(int)animState].transitionTimes = transitionTimes[controller]; } m_StateTranstion = new SimpleTranstion <AnimationMixerPlayable>(m_Mixer, stateTransitionPorts.ToArray()); }