/
arti4
/
CourseWork
Обзор
Документация
Войти
/
arti4
/
CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Scriptes/Shooting.cs
113 строк
3 KB
arti4
Загрузить файлы в «Scriptes»
01 июн 2025, 11:57
01 июн 2025, 11:57
3eddd7a
Код
Авторство
О чём код?
using UnityEngine; public class Shooting : MonoBehaviour { [SerializeField] private Transform shootPosition; [SerializeField] private GameObject bullet; [SerializeField] private Transform armPivot; [SerializeField] private float autoShootDelay; [SerializeField] private float singleShootDelay; [SerializeField] private Transform character; private bool isRightSide = true; private bool autoShootEnabled = false; private float lastShootTime = 0f; private float lastSingleShootTime = 0f; [SerializeField] private AudioSource audioSource; [SerializeField] private AudioClip shootSound; private bool isPaused = false; private void Start() { isRightSide = character.localScale.x > 0; } private void Update() { if (isPaused) return; if (Input.GetKeyDown(KeyCode.T)) { ToggleAutoShoot(); } if (Input.GetMouseButtonDown(0) && Time.time - lastSingleShootTime >= singleShootDelay) { Shoot(); lastSingleShootTime = Time.time; } RotateArmTowardsMouse(); } //������� �� ����� private void RotateArmTowardsMouse() { Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); mousePosition.z = 0; Vector2 direction = mousePosition - armPivot.position; float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; float angleArm = isRightSide ? angle : angle + 180f; angleArm = ClampAngle(angleArm); armPivot.rotation = Quaternion.Euler(0, 0, angleArm); if ((angle > 95 || angle < -95) && isRightSide) { Spin(); } else if ((angle < 85 && angle > -85) && !isRightSide) { Spin(); } } //������ ���� �������� private float ClampAngle(float angle) { angle = angle % 360; if (angle < 0) angle += 360; if (angle > 45 && angle < 135) { return 45; } else if (angle > 225 && angle < 315) { return 315; } return angle; } //������� private void Spin() { isRightSide = !isRightSide; Vector3 localScale = character.localScale; localScale.x = Mathf.Abs(localScale.x) * (isRightSide ? 1 : -1); character.localScale = localScale; } //�������� private void Shoot() { audioSource.PlayOneShot(shootSound); GameObject bullet = Instantiate(bullet, shootPosition.position, shootPosition.rotation); if (!isRightSide) { bullet.transform.Rotate(0, 0, 180f); } } //��������� ����� public void SetPause(bool paused) { isPaused = paused; } }