/
Veteread
/
Packer
Обзор
Документация
Войти
/
Veteread
/
Packer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
BlockThrowSystem.cs
85 строк
2 KB
Veteread
upload files
04 май 2025, 10:49
04 май 2025, 10:49
a5dcff3
Код
Авторство
О чём код?
using UnityEngine; using UnityEngine.UI; public class BlockThrowSystem : MonoBehaviour { [Header("Settings")] [SerializeField] private float minAngle = 15f; [SerializeField] private float maxAngle = 165f; [SerializeField] private float maxPower = 20f; [SerializeField] private float chargeSpeed = 5f; [Header("UI")] [SerializeField] private Image powerBar; [SerializeField] private GameObject powerUI; [Header("Effects")] [SerializeField] private ParticleSystem chargeEffect; [SerializeField] private AudioSource throwSound; public bool IsThrowing { get; private set; } private float currentAngle; private float currentPower; private Vector2 startSwipePos; public void StartAiming(Vector2 touchPos) { IsThrowing = true; startSwipePos = touchPos; powerUI.SetActive(true); powerBar.fillAmount = 0f; } public bool TrySetDirection(Vector2 currentPos) { Vector2 direction = currentPos - startSwipePos; if (direction.magnitude > 0.5f) { currentAngle = Mathf.Clamp( Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg, minAngle, maxAngle); StartCharging(); return true; } return false; } private void StartCharging() { powerUI.SetActive(true); chargeEffect.Play(); } public void ChargePower() { currentPower = Mathf.Min(currentPower + chargeSpeed * Time.deltaTime, maxPower); powerBar.fillAmount = currentPower / maxPower; if (currentPower >= maxPower * 0.9f) { chargeEffect.startColor = Color.red; } } public void ExecuteThrow(Block block) { float angleRad = currentAngle * Mathf.Deg2Rad; Vector2 direction = new Vector2(Mathf.Cos(angleRad), Mathf.Sin(angleRad)); block.EnablePhysics(); block.GetComponent<Rigidbody2D>().AddForce(direction * currentPower, ForceMode2D.Impulse); throwSound.Play(); ResetThrow(); } private void ResetThrow() { IsThrowing = false; currentPower = 0f; powerUI.SetActive(false); chargeEffect.Stop(); } }