1) Использовать несколько Raycast
В вашем коде игра обнаруживает платформу только в том случае, если над ней стоит центр вашего игрока. Чтобы постоянно обнаруживать платформу, вы должны использовать две лучевые трансляции в границах коллайдера вашего персонажа.
void Update()
{
// Cast the rays
castRays(transform.localScale.x / 2f);
}
private void castRays(float distanceFromCenter)
{
// Return if the ray on the left hit something
if(castRay(new Vector2(-distanceFromCenter, 0f) == true) { return; }
// Return if the ray on the right hit something
else if(castRay(new Vector2(distanceFromCenter, 0f) == true) { return; }
}
private bool castRay(Vector2 offset)
{
RaycastHit2D hit; // Stores the result of the raycast
// Cast the ray and store the result in hit
hit = Physics2D.Raycast(transform.position + offset, -Vector2.up, 2f, layerMask);
// If the ray hit a collider...
if(hit.collider != null)
{
// Destroy it
Destroy(hit.collider.gameObject);
// Return true
return true;
}
// Else, return false
return false;
}
Необязательно: Луч можно повторно включить в центр, если есть платформы меньше проигрывателя или для обеспечения безопасности.
2) Использовать триггер
Поместите BoxCollider2D
у ног персонажа и установите для isTrigger значение true. Когда он входит в другой коллайдер, он вызывает «OnTriggerEnter2D».
void OnTriggerEnter2D(Collider2D other)
{
Destroy(other.gameObject);
}