/
arti4
/
CourseWork
Обзор
Документация
Войти
/
arti4
/
CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Scriptes/Barbwire.cs
120 строк
4 KB
arti4
Загрузить файлы в «»
01 июн 2025, 11:56
01 июн 2025, 11:56
6a254d9
Код
Авторство
О чём код?
using UnityEngine; public class Barbwire : MonoBehaviour { public int attackDamage; public int barbwireHealth; private Rigidbody2D rb; private bool playerInTrigger = false; private float damageCooldown = 1f; private float lastDamageTime; private Collider2D playerCollider; private Transform player; public float maxHearingDistance = 15f; [SerializeField] private AudioSource audioSource; [SerializeField] private AudioClip destroySound; private int groundContactCount = 0; void Start() { rb = GetComponent<Rigidbody2D>(); } void Update() { //Урон игроку при касании проволоки if (playerInTrigger && playerCollider != null && Time.time - lastDamageTime >= damageCooldown) { lastDamageTime = Time.time; PlayerHealth playerHealth = playerCollider.GetComponent<PlayerHealth>(); if (playerHealth != null) { playerHealth.TakeDamage(attackDamage); } } //Физика падения if (groundContactCount <= 0) { rb.gravityScale = 1f; } else { rb.gravityScale = 0f; rb.linearVelocity = Vector2.zero; } AdjustSoundVolume(); } //Радиус для отладки private void OnDrawGizmosSelected() { Gizmos.color = Color.green; Gizmos.DrawWireSphere(transform.position, maxHearingDistance); } //Настройка громкости private void AdjustSoundVolume() { if (audioSource == null || player == null) return; float distance = Vector2.Distance(transform.position, player.position); if (distance > maxHearingDistance) { audioSource.volume = 0; return; } if (distance <= maxHearingDistance / 2) { audioSource.volume = 1; return; } // Если игрок в первой половине дистанции — увеличиваем звук float volumeFactor = Mathf.Clamp01(1 - ((distance - (maxHearingDistance / 2)) / (maxHearingDistance / 2))); audioSource.volume = volumeFactor; } //Получение урона public void TakeDamage(int damage) { barbwireHealth -= damage; if (barbwireHealth <= 0) { AudioSource.PlayClipAtPoint(destroySound, transform.position, 1.0f); Destroy(gameObject); } } //Обрабокта начала касаний private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) { playerInTrigger = true; playerCollider = other; lastDamageTime = Time.time - damageCooldown; } if (other.CompareTag("Ground") || other.CompareTag("Barbwire") || other.CompareTag("Box")) { groundContactCount++; } } //Обработка конца касаний private void OnTriggerExit2D(Collider2D other) { if (other.CompareTag("Player")) { playerInTrigger = false; playerCollider = null; } if (other.CompareTag("Ground") || other.CompareTag("Barbwire") || other.CompareTag("Box")) { groundContactCount = Mathf.Max(0, groundContactCount - 1); } } }