Assets/Characters/Player/AC_Player.controller
@@ -25,6 +25,59 @@ m_InterruptionSource: 1 m_OrderedInterruption: 1 m_CanTransitionToSelf: 1 --- !u!1102 &-8776216366201631375 AnimatorState: serializedVersion: 6 m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: player_death m_Speed: 1 m_CycleOffset: 0 m_Transitions: [] m_StateMachineBehaviours: - {fileID: -2493127153716391096} m_Position: {x: 50, y: 50, z: 0} m_IKOnFeet: 0 m_WriteDefaultValues: 1 m_Mirror: 0 m_SpeedParameterActive: 0 m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 m_Motion: {fileID: 7400000, guid: cec1a898bd6cf1f4f87968928d9016ea, type: 2} m_Tag: m_SpeedParameter: m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: --- !u!1102 &-8551537280866366805 AnimatorState: serializedVersion: 6 m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: player_hit m_Speed: 1 m_CycleOffset: 0 m_Transitions: [] m_StateMachineBehaviours: [] m_Position: {x: 50, y: 50, z: 0} m_IKOnFeet: 0 m_WriteDefaultValues: 1 m_Mirror: 0 m_SpeedParameterActive: 0 m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 m_Motion: {fileID: 0} m_Tag: m_SpeedParameter: m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: --- !u!1107 &-8244801798701371434 AnimatorStateMachine: serializedVersion: 6 @@ -43,12 +96,18 @@ - serializedVersion: 1 m_State: {fileID: 7984510369417086179} m_Position: {x: 620, y: 200, z: 0} - serializedVersion: 1 m_State: {fileID: -8776216366201631375} m_Position: {x: 620, y: 300, z: 0} - serializedVersion: 1 m_State: {fileID: -8551537280866366805} m_Position: {x: 620, y: 390, z: 0} m_ChildStateMachines: [] m_AnyStateTransitions: [] m_EntryTransitions: [] m_StateMachineTransitions: {} m_StateMachineBehaviours: [] m_AnyStatePosition: {x: 50, y: 20, z: 0} m_AnyStatePosition: {x: 400, y: 310, z: 0} m_EntryPosition: {x: 50, y: 120, z: 0} m_ExitPosition: {x: 880, y: 120, z: 0} m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} @@ -78,6 +137,32 @@ m_InterruptionSource: 1 m_OrderedInterruption: 1 m_CanTransitionToSelf: 1 --- !u!1102 &-7583940583200162132 AnimatorState: serializedVersion: 6 m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: player_death m_Speed: 1 m_CycleOffset: 0 m_Transitions: [] m_StateMachineBehaviours: [] m_Position: {x: 50, y: 50, z: 0} m_IKOnFeet: 0 m_WriteDefaultValues: 1 m_Mirror: 0 m_SpeedParameterActive: 0 m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 m_Motion: {fileID: 7400000, guid: cec1a898bd6cf1f4f87968928d9016ea, type: 2} m_Tag: m_SpeedParameter: m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: --- !u!1107 &-3544671305424738950 AnimatorStateMachine: serializedVersion: 6 @@ -86,12 +171,16 @@ m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Base Layer m_ChildStates: [] m_ChildStates: - serializedVersion: 1 m_State: {fileID: -7583940583200162132} m_Position: {x: 200, y: 0, z: 0} m_ChildStateMachines: - serializedVersion: 1 m_StateMachine: {fileID: -8244801798701371434} m_Position: {x: 320, y: 110, z: 0} m_AnyStateTransitions: [] m_AnyStateTransitions: - {fileID: 7389560801624237999} m_EntryTransitions: [] m_StateMachineTransitions: {} m_StateMachineBehaviours: [] @@ -100,6 +189,23 @@ m_ExitPosition: {x: 800, y: 120, z: 0} m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} m_DefaultState: {fileID: 68305137226140118} --- !u!114 &-2493127153716391096 MonoBehaviour: m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 40c71d8fcb09c1d4ba6bf7f07a33b574, type: 3} m_Name: m_EditorClassIdentifier: boolName: CanMove updateOnState: 1 updateOnStateMachine: 0 valueOnEnter: 0 valueOnExit: 0 --- !u!1101 &-1567565794043545918 AnimatorStateTransition: m_ObjectHideFlags: 1 @@ -166,6 +272,18 @@ m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 0 m_Controller: {fileID: 0} - m_Name: IsAlive m_Type: 4 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 1 m_Controller: {fileID: 0} - m_Name: CanMove m_Type: 4 m_DefaultFloat: 0 m_DefaultInt: 0 m_DefaultBool: 1 m_Controller: {fileID: 0} m_AnimatorLayers: - serializedVersion: 5 @@ -317,6 +435,31 @@ m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: --- !u!1101 &7389560801624237999 AnimatorStateTransition: m_ObjectHideFlags: 1 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: m_Conditions: - m_ConditionMode: 2 m_ConditionEvent: IsAlive m_EventTreshold: 0 m_DstStateMachine: {fileID: 0} m_DstState: {fileID: -8776216366201631375} m_Solo: 0 m_Mute: 0 m_IsExit: 0 serializedVersion: 3 m_TransitionDuration: 0 m_TransitionOffset: 0 m_ExitTime: 0.75 m_HasExitTime: 0 m_HasFixedDuration: 1 m_InterruptionSource: 0 m_OrderedInterruption: 1 m_CanTransitionToSelf: 0 --- !u!1101 &7462440421188174382 AnimatorStateTransition: m_ObjectHideFlags: 1 Assets/Characters/Player/Player.prefab
@@ -122,7 +122,7 @@ - component: {fileID: 3884295854780712968} - component: {fileID: 2451348752795735853} - component: {fileID: 5338311196462064651} - component: {fileID: 3829651782493779324} - component: {fileID: 2350719025294399868} m_Layer: 0 m_Name: Player m_TagString: Untagged @@ -429,40 +429,26 @@ minNormalAngle: 0 maxNormalAngle: 0 groundDistance: 0.05 wallDistance: 0.2 ceilingDistance: 0.05 rotorGO: {fileID: 1519978218308964847} _isGrounded: 1 --- !u!70 &3829651782493779324 CapsuleCollider2D: _isAtWall: 0 _isAtCeiling: 0 --- !u!114 &2350719025294399868 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3345854317100013954} m_Enabled: 0 m_Density: 1 m_Material: {fileID: 0} m_IncludeLayers: serializedVersion: 2 m_Bits: 0 m_ExcludeLayers: serializedVersion: 2 m_Bits: 0 m_LayerOverridePriority: 0 m_ForceSendLayers: serializedVersion: 2 m_Bits: 4294967295 m_ForceReceiveLayers: serializedVersion: 2 m_Bits: 4294967295 m_ContactCaptureLayers: serializedVersion: 2 m_Bits: 4294967295 m_CallbackLayers: serializedVersion: 2 m_Bits: 4294967295 m_IsTrigger: 0 m_UsedByEffector: 0 m_UsedByComposite: 0 m_Offset: {x: 0, y: 0} m_Size: {x: 0.829981, y: 0.93356335} m_Direction: 0 m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 352737c44bb3905498d44716afca4984, type: 3} m_Name: m_EditorClassIdentifier: _maxHealth: 100 _health: 100 _isAlive: 1 isInvincible: 0 invincibilityTime: 0.25 Assets/Characters/Player/player_death.anim
New file @@ -0,0 +1,72 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!74 &7400000 AnimationClip: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: player_death serializedVersion: 7 m_Legacy: 0 m_Compressed: 0 m_UseHighQualityCurve: 1 m_RotationCurves: [] m_CompressedRotationCurves: [] m_EulerCurves: [] m_PositionCurves: [] m_ScaleCurves: [] m_FloatCurves: [] m_PPtrCurves: - serializedVersion: 2 curve: - time: 0 value: {fileID: 21300000, guid: 3e7d7385969bceb428fecc1b6408737f, type: 3} attribute: m_Sprite path: classID: 212 script: {fileID: 0} flags: 2 m_SampleRate: 1 m_WrapMode: 0 m_Bounds: m_Center: {x: 0, y: 0, z: 0} m_Extent: {x: 0, y: 0, z: 0} m_ClipBindingConstant: genericBindings: - serializedVersion: 2 path: 0 attribute: 0 script: {fileID: 0} typeID: 212 customType: 23 isPPtrCurve: 1 isIntCurve: 0 isSerializeReferenceCurve: 0 pptrCurveMapping: - {fileID: 21300000, guid: 3e7d7385969bceb428fecc1b6408737f, type: 3} m_AnimationClipSettings: serializedVersion: 2 m_AdditiveReferencePoseClip: {fileID: 0} m_AdditiveReferencePoseTime: 0 m_StartTime: 0 m_StopTime: 1 m_OrientationOffsetY: 0 m_Level: 0 m_CycleOffset: 0 m_HasAdditiveReferencePose: 0 m_LoopTime: 1 m_LoopBlend: 0 m_LoopBlendOrientation: 0 m_LoopBlendPositionY: 0 m_LoopBlendPositionXZ: 0 m_KeepOriginalOrientation: 0 m_KeepOriginalPositionY: 1 m_KeepOriginalPositionXZ: 0 m_HeightFromFeet: 0 m_Mirror: 0 m_EditorCurves: [] m_EulerEditorCurves: [] m_HasGenericRootTransform: 0 m_HasMotionFloatCurves: 0 m_Events: [] Assets/Characters/Player/player_death.anim.meta
New file @@ -0,0 +1,8 @@ fileFormatVersion: 2 guid: cec1a898bd6cf1f4f87968928d9016ea NativeFormatImporter: externalObjects: {} mainObjectFileID: 7400000 userData: assetBundleName: assetBundleVariant: Assets/Scripts/AnimationStrings.cs
@@ -5,12 +5,14 @@ { internal class Player { internal static string IsMoving = "IsMoving"; internal static string IsFlying = "IsFlying"; internal static string isMoving = "IsMoving"; internal static string isFlying = "IsFlying"; internal static string IsGrounded = "IsGrounded"; internal static string isGrounded = "IsGrounded"; public static string IsAtWall = "IsAtWall"; public static string IsAtCeiling = "IsAtCeiling"; public static string isAtWall = "IsAtWall"; public static string isAtCeiling = "IsAtCeiling"; } public static string isAlive = "IsAlive"; public static string canMove = "CanMove"; } Assets/Scripts/Damageable.cs
New file @@ -0,0 +1,76 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; public class Damageable : MonoBehaviour { Animator animator; [SerializeField] private int _maxHealth = 100; [SerializeField] private int _health; [SerializeField] private bool _isAlive = true; [SerializeField] private bool isInvincible = false; private float timeSinceHit = 0f; public float invincibilityTime = 0.25f; public int MaxHealth { get { return _maxHealth; } set { _maxHealth = value; } } public int Health { get { return _health; } set { _health = value; if (value <= 0) { IsAlive = false; } } } public bool IsAlive { get { return _isAlive; } private set { _isAlive = value; animator.SetBool(AnimationStrings.isAlive, value); } } private void Awake() { Health = MaxHealth; animator = GetComponent<Animator>(); } private void Update() { if (isInvincible) { if (timeSinceHit > invincibilityTime) { isInvincible = false; timeSinceHit = 0; } else { timeSinceHit += Time.deltaTime; } } } public void Hit(int damage) { if (IsAlive && !isInvincible) { Health -= damage; isInvincible = true; } } } Assets/Scripts/Damageable.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 352737c44bb3905498d44716afca4984 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Assets/Scripts/PlayerController.cs
@@ -24,7 +24,7 @@ private set { _isMoving = value; animator.SetBool(AnimationStrings.Player.IsMoving, value); animator.SetBool(AnimationStrings.Player.isMoving, value); } } @@ -36,8 +36,8 @@ private set { _isFlying = value; animator.SetBool(AnimationStrings.Player.IsFlying, value); animator_rotor.SetBool(AnimationStrings.Player.IsFlying, value); animator.SetBool(AnimationStrings.Player.isFlying, value); animator_rotor.SetBool(AnimationStrings.Player.isFlying, value); } } @@ -56,24 +56,20 @@ } } public bool CanMove { get { return animator.GetBool(AnimationStrings.canMove); } } private void Awake() { rb = GetComponent<Rigidbody2D>(); animator = GetComponent<Animator>(); animator_rotor = rotorGO.GetComponent<Animator>(); touchingDirections = GetComponent<TouchingDirections>(); } // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } private void FixedUpdate() @@ -108,14 +104,22 @@ public void OnMove(InputAction.CallbackContext context) { moveInput = context.ReadValue<Vector2>(); if (CanMove) { moveInput = context.ReadValue<Vector2>(); IsMoving = moveInput.x != 0; IsMoving = moveInput.x != 0; IsFlying = (moveInput.y != 0); IsFlying = (moveInput.y != 0); SetFacingDirection(moveInput); SetFacingDirection(moveInput); } else { IsMoving = false; IsFlying = false; moveInput = Vector2.zero; } } private void SetFacingDirection(Vector2 moveInput) Assets/Scripts/StateMachine.meta
New file @@ -0,0 +1,8 @@ fileFormatVersion: 2 guid: 6e937e1d23a0607419018e509e82c4bf folderAsset: yes DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: Assets/Scripts/StateMachine/FadeRemoveBehaviour.cs
New file @@ -0,0 +1,34 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; public class FadeRemoveBehaviour : StateMachineBehaviour { public float fadeTime = 0.5f; private float timeElapsed = 0; SpriteRenderer spriteRenderer; GameObject objToRemove; Color startColor; // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { timeElapsed = 0f; spriteRenderer = animator.GetComponent<SpriteRenderer>(); objToRemove = animator.gameObject; startColor = spriteRenderer.color; } // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { timeElapsed += Time.deltaTime; float newAlpha = startColor.a * (1 - (timeElapsed / fadeTime)); spriteRenderer.color = new Color(startColor.r, startColor.g, startColor.b, newAlpha); if (timeElapsed > fadeTime) { Destroy(objToRemove); } } } Assets/Scripts/StateMachine/FadeRemoveBehaviour.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 26345c45e327dbe46b644204cb0f8e5b MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Assets/Scripts/StateMachine/SetBoolBehaviour.cs
New file @@ -0,0 +1,61 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; public class SetBoolBehaviour : StateMachineBehaviour { public string boolName; public bool updateOnState; public bool updateOnStateMachine; public bool valueOnEnter, valueOnExit; // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if(updateOnState) { animator.SetBool(boolName, valueOnEnter); } } // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks //override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) //{ // //} // OnStateExit is called when a transition ends and the state machine finishes evaluating this state override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (updateOnState) { animator.SetBool(boolName, valueOnExit); } } // OnStateMove is called right after Animator.OnAnimatorMove() //override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) //{ // // Implement code that processes and affects root motion //} // OnStateIK is called right after Animator.OnAnimatorIK() //override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) //{ // // Implement code that sets up animation IK (inverse kinematics) //} public override void OnStateMachineEnter(Animator animator, int stateMachinePathHash) { if (updateOnStateMachine) { animator.SetBool(boolName, valueOnEnter); } } public override void OnStateMachineExit(Animator animator, int stateMachinePathHash) { if (updateOnStateMachine) { animator.SetBool(boolName, valueOnExit); } } } Assets/Scripts/StateMachine/SetBoolBehaviour.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 40c71d8fcb09c1d4ba6bf7f07a33b574 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Assets/Scripts/TouchingDirections.cs
@@ -31,8 +31,8 @@ set { _isGrounded = value; animator.SetBool(AnimationStrings.Player.IsGrounded, value); animator_rotor.SetBool(AnimationStrings.Player.IsGrounded, value); animator.SetBool(AnimationStrings.Player.isGrounded, value); animator_rotor.SetBool(AnimationStrings.Player.isGrounded, value); } } @@ -45,8 +45,8 @@ set { _isAtWall = value; animator.SetBool(AnimationStrings.Player.IsAtWall, value); animator_rotor.SetBool(AnimationStrings.Player.IsAtWall, value); animator.SetBool(AnimationStrings.Player.isAtWall, value); animator_rotor.SetBool(AnimationStrings.Player.isAtWall, value); } } @@ -59,8 +59,8 @@ set { _isAtCeiling = value; animator.SetBool(AnimationStrings.Player.IsAtCeiling, value); animator_rotor.SetBool(AnimationStrings.Player.IsAtCeiling, value); animator.SetBool(AnimationStrings.Player.isAtCeiling, value); animator_rotor.SetBool(AnimationStrings.Player.isAtCeiling, value); } }