using System.Collections; using System.Collections.Generic; using UnityEngine; public class TouchingDirections : MonoBehaviour { public ContactFilter2D castFilter; public float groundDistance = 0.05f; public float wallDistance = 0.2f; public float ceilingDistance = 0.05f; private Vector2 wallCheckDirection => gameObject.transform.localScale.x > 0 ? Vector2.right : Vector2.left; Rigidbody2D rb; public GameObject rotorGO; BoxCollider2D touchingCol; Animator animator; Animator animator_rotor; RaycastHit2D[] groundHits = new RaycastHit2D[5]; RaycastHit2D[] wallHits = new RaycastHit2D[5]; RaycastHit2D[] ceilingHits = new RaycastHit2D[5]; [SerializeField] private bool _isGrounded; public bool IsGrounded { get { return _isGrounded; } set { _isGrounded = value; animator.SetBool(AnimationStrings.Player.isGrounded, value); animator_rotor.SetBool(AnimationStrings.Player.isGrounded, value); } } [SerializeField] private bool _isAtWall; public bool IsAtWall { get { return _isAtWall; } set { _isAtWall = value; animator.SetBool(AnimationStrings.Player.isAtWall, value); animator_rotor.SetBool(AnimationStrings.Player.isAtWall, value); } } [SerializeField] private bool _isAtCeiling; public bool IsAtCeiling { get { return _isAtCeiling; } set { _isAtCeiling = value; animator.SetBool(AnimationStrings.Player.isAtCeiling, value); animator_rotor.SetBool(AnimationStrings.Player.isAtCeiling, value); } } void Awake() { rb = GetComponent(); touchingCol = rb.GetComponent(); animator = rb.GetComponent(); animator_rotor = rotorGO.GetComponent(); } // Start is called before the first frame update void Start() { } void FixedUpdate() { IsGrounded = touchingCol.Cast(Vector2.down, castFilter, groundHits, groundDistance) > 0; IsAtWall = touchingCol.Cast(wallCheckDirection, castFilter, wallHits, wallDistance) > 0; IsAtCeiling = touchingCol.Cast(Vector2.up, castFilter, ceilingHits, ceilingDistance) > 0; } }