OnTriggerEnter2D вызывается один раз, при соприкосновении с триггером. В коде, который предоставлен, условие if (transform.position.y.Equals(-3)) выполнится только тогда, когда позиция объекта равна -3 в момент столкновения, а не после. Если триггер включает в себя указанную позицию (-3) и объект продолжает находиться внутри триггера, то можно использовать OnTriggerStay2D, который будет вызываться постоянно, пока объект находится внутри триггера. Вы можете вынести условие перезапуска сцены в OnTriggerStay2D, а остальной код оставить внутри OnCollisionEnter2D. Однако, лучше не зависить от позиции триггера. Например, вы можете добавить следующий код:
using System.Collections;
using System.Collections.Generic;
using UnityEditor.U2D;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerControl : MonoBehaviour
{
private bool _isAlive = true;
public float force;
public float speed;
public Sprite astronaut_2;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Jump();
}
if (!_isAlive && transform.position.y.Equals(-3))
{
SceneManager.LoadScene("level_1");
}
}
void Jump()
{
GetComponent().velocity = new Vector2(speed, 0f);
GetComponent().AddForce(Vector2.up * force);
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "Enemy")
{
GetComponent().velocity = new Vector2(-7f, 0f);
GetComponent().AddForce(Vector2.up * 300);
gameObject.GetComponent().sprite = astronaut_2;
_isAlive = false;
}
}
}
Кроме того, можно проверять, что позиция не равна -3, а меньше или больше в зависимости от направления отбрасывания персонажа. Это поможет избежать проблем, когда персонаж пролетает через заданную точку слишком быстро, и условие не успевает выполниться. Это всего лишь рекомендации, лучше самостоятельно разобраться в коде для лучшего понимания. Удачи!