using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerRaycaster : MonoBehaviour
{
#region Init
//Variables
[SerializeField] private float _rayCastLength;
private ContactFilter2D _myFilter;
private List<RaycastHit2D> _hits = new List<RaycastHit2D>(); //Only used as a parameter
// Start is called before the first frame update
void Start()
{
//SEtup because the example we saw said so
_myFilter = new ContactFilter2D
{
useTriggers = false,
useLayerMask = true //Not needed, only keeping here in case we want to modify further
};
_myFilter.SetLayerMask(LayerMask.GetMask("Platform")); //Sets the raycast to only return hits on the Player
}
#endregion
#region Update - Draw Ray (Debug only)
// Update is called once per frame
void Update()
{
float _dir = Mathf.Sign(transform.localScale.x); //Used to determine direction char is facing, this is used to find x offset as the ray was not directly over player
//Draw ray for debug
Vector2 _startRayPos = new Vector2(this.transform.position.x + (0.5f * _dir), this.transform.position.y); //0.5f is x offset
Vector2 _endRayPos = new Vector2(0.0f, _rayCastLength);
Debug.DrawRay(_startRayPos, _endRayPos, Color.red);
}
#endregion
#region FixedUpdate Raycast
void FixedUpdate()
{
//Raycast - Look for platform
float _dir = Mathf.Sign(transform.localScale.x); //Used to determine direction char is facing, this is used to find x offset as the ray was not directly over player
//Setup Raycast Vectors
Vector2 _startRayPos = new Vector2(this.transform.position.x + (0.5f * _dir), this.transform.position.y); //RayCast Start = 0.5f is x offset
Vector2 _endRayPos = new Vector2(0.0f, _rayCastLength);
//Check for hits by launching raycast
int _raycastReturn = Physics2D.Raycast(_startRayPos, _endRayPos, _myFilter, _hits, _rayCastLength);
if (_raycastReturn > 0)
{
Debug.Log("Raycast hit a platform above us");
foreach (var item in _hits)
{
Debug.Log($"Hit: {item.collider.tag}");
}
}
}//End FixedUpdate
#endregion
}//End Class
Comments