Source file unity-csharp/arcade-classics/breakout/Paddle2D.cs from the GDnD code examples. Download raw file

// GDnD wiki example
// Demonstrates: horizontal player input clamped to the screen — the same input/clamp pattern as Pong, on the X axis
// Related pages: [[overview-arcade-classics-as-learning-projects]], [[unity-input]], [[unity-transform]]
 
using UnityEngine;
 
// Player paddle. Reads a horizontal axis and clamps to the play area so it
// cannot leave the screen.
public class Paddle2D : MonoBehaviour
{
    [SerializeField] private float speed = 14f;
    [SerializeField] private string horizontalAxis = "Horizontal";
 
    private float halfWidth;
    private float halfSize;
    private Camera cachedCamera;
 
    private void Awake()
    {
        cachedCamera = Camera.main;
        halfSize = GetComponent<SpriteRenderer>().bounds.extents.x;
    }
 
    private void Update()
    {
        float move = Input.GetAxisRaw(horizontalAxis);
        Vector3 position = transform.position;
        position.x += move * speed * Time.deltaTime;
 
        halfWidth = cachedCamera.orthographicSize * cachedCamera.aspect - halfSize;
        position.x = Mathf.Clamp(position.x, -halfWidth, halfWidth);
        transform.position = position;
    }
}