Untitled
//ball using UnityEngine; public class BallScript : MonoBehaviour { [SerializeField] private ScoreManager scoreManager; private float horizontal; private float speed = 12f; private float jumpingPower = 50f; private float wallBounceForce = 100f; [SerializeField] private Rigidbody2D rb; [SerializeField] private Transform groundCheck; [SerializeField] private LayerMask groundLayer; [SerializeField] private LayerMask wallLayer; void Update() { horizontal = Input.GetAxisRaw("Horizontal"); if (Input.GetButtonDown("Jump") && IsGrounded()) { rb.linearVelocity = new Vector2(rb.linearVelocity.x, jumpingPower); } } private void FixedUpdate() { float horizontalForce = horizontal * speed; rb.AddForce(new Vector2(horizontalForce, 0), ForceMode2D.Force); } private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.CompareTag("Wall")) { Vector2 normal = collision.contacts[0].normal; Vector2 currentVelocity = rb.linearVelocity; float extraForce = Mathf.Sign(normal.x) * wallBounceForce; rb.linearVelocity = new Vector2(extraForce, currentVelocity.y); if (scoreManager != null) { scoreManager.IncreaseScore(1); } else { Debug.LogWarning("ScoreManager is not assigned to the Ball script!"); } } } private bool IsGrounded() { ContactFilter2D filter = new ContactFilter2D(); filter.SetLayerMask(groundLayer); Collider2D[] results = new Collider2D[1]; return Physics2D.OverlapCircle(groundCheck.position, 3f, filter, results) > 0; } } //scoreManager using UnityEngine; using TMPro; public class ScoreManager : MonoBehaviour { private int score = 0; [SerializeField] private TMP_Text scoreText; // Assign in Inspector void Start() { UpdateScoreText(); } public void IncreaseScore(int amount) { score += amount; UpdateScoreText(); } void UpdateScoreText() { if (scoreText != null) { scoreText.text = "Score: " + score; } else { Debug.LogWarning("Score Text is not assigned in ScoreManager! Assign it in the Inspector."); } } }
Leave a Comment