miepzerino
2023-12-15 448b5092206ccd9db760b00aeb9ab2233270bd6e
Added damageable script + death animations
5 files modified
9 files added
557 ■■■■ changed files
Assets/Characters/Player/AC_Player.controller 149 ●●●●● patch | view | raw | blame | history
Assets/Characters/Player/Player.prefab 48 ●●●●● patch | view | raw | blame | history
Assets/Characters/Player/player_death.anim 72 ●●●●● patch | view | raw | blame | history
Assets/Characters/Player/player_death.anim.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Scripts/AnimationStrings.cs 12 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Damageable.cs 76 ●●●●● patch | view | raw | blame | history
Assets/Scripts/Damageable.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/PlayerController.cs 44 ●●●● patch | view | raw | blame | history
Assets/Scripts/StateMachine.meta 8 ●●●●● patch | view | raw | blame | history
Assets/Scripts/StateMachine/FadeRemoveBehaviour.cs 34 ●●●●● patch | view | raw | blame | history
Assets/Scripts/StateMachine/FadeRemoveBehaviour.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/StateMachine/SetBoolBehaviour.cs 61 ●●●●● patch | view | raw | blame | history
Assets/Scripts/StateMachine/SetBoolBehaviour.cs.meta 11 ●●●●● patch | view | raw | blame | history
Assets/Scripts/TouchingDirections.cs 12 ●●●● patch | view | raw | blame | history
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);
        }
    }