Select Git revision
BallBehavior.cs

Sofiane Lasri authored
BallBehavior.cs 2.45 KiB
using System;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Serialization;
public class BallBehavior : MonoBehaviour
{
private PlayerInput _playerInput;
private InputAction _horizontalAction;
private float _horizontalAxis;
public int moveForwardSpeed = 3;
public float keyboardMoveSpeed = 15f;
private int _isKeyboard = 0;
private GameObject ball;
private float ballRadius;
private Vector3 ballBottomPos;
private Boolean gameOver = false;
// Ground Checks
[Header("Ground Checks")]
[SerializeField] private bool isGrounded;
[SerializeField] private float groundCheckDistance = 0.17f;
[SerializeField] private LayerMask groundMask = 0;
void Awake()
{
_playerInput = GetComponent<PlayerInput>();
_horizontalAction = _playerInput.currentActionMap.FindAction("Horizontal");
_horizontalAction.performed += moveActionPerformed;
_horizontalAction.canceled += _ => _horizontalAxis = 0;
}
void Start()
{
ball = GameObject.Find("Ball");
ballRadius = ball.GetComponent<SphereCollider>().radius;
}
void Update()
{
if(!gameOver)
{
Vector3 position = transform.position;
var deltaTime = Time.deltaTime;
position += Vector3.forward * (moveForwardSpeed * deltaTime);
position += Vector3.right * deltaTime * _horizontalAxis;
transform.position = position;
}
ballBottomPos = ball.transform.position + Vector3.down * ballRadius;
isGrounded = Physics.CheckSphere(ballBottomPos, groundCheckDistance, groundMask);
Debug.Log(ball.transform.localPosition.y);
if(ball.transform.position.y < 0.6f && !isGrounded)
{
Debug.Log("Game Over: " + ball.transform.position.y + " " + isGrounded);
gameOver = true;
}
}
private void moveActionPerformed(InputAction.CallbackContext context)
{
if (context.control.device.displayName.Contains("Keyboard"))
{
_isKeyboard = 1;
}
else
{
_isKeyboard = 0;
}
_horizontalAxis = context.ReadValue<float>() * (1 + keyboardMoveSpeed * _isKeyboard);
}
void OnDrawGizmosSelected()
{
// Dessine une boule rouge pour visualier goundCheckDistance
Gizmos.color = Color.red;
Gizmos.DrawSphere(ballBottomPos, groundCheckDistance);
}
}