Попробуйте отключить отдельные входы, когда персонаж сталкивается с боков, так что вы можете перейти на другую сторону после прикосновения к сторонам, вместо установки скорости на 0.
Проблема, которая у вас есть в настоящее время, заключается в том, чтокогда вы сталкиваетесь со стороной, вы устанавливаете скорость на 0, пока вы все еще касаетесь стороны, и вы не можете отойти от стороны, которую вы постоянно касаетесь, потому что скорость равна 0.
public class CharacterMovement : MonoBehaviour {
public float speed = 5f;
public bool touchingLeft;
public bool touchingRight;
void Start() {
}
void Update() {
if (Input.GetKey(KeyCode.W))
{
transform.Translate(0, speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(0, -speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.A) && !touchingLeft)
{
transform.Translate(-speed * Time.deltaTime, 0, 0);
touchingRight = false;
}
if (Input.GetKey(KeyCode.D) && !touchingRight)
{
transform.Translate(speed * Time.deltaTime, 0, 0);
touchingLeft = false;
}
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.name == "leftOffscreen")
{
touchingLeft = true;
}
if else (col.gameObject.name == "rightOffscreen")
{
touchingRight = true;
}
}
}
Однако, есть более эффективные способы сделать это, но я чувствую, что это хорошо работает с вашим существующим кодом.
Если размер экрана изменится, вы, вероятно, захотите ограничить значение x проигрывателяк значениям x края экрана.
Надеюсь, это поможет