/
arti4
/
CourseWork
Обзор
Документация
Войти
/
arti4
/
CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Scriptes/Bullet.cs
171 строка
6 KB
arti4
09 июн 2025, 08:22
09 июн 2025, 08:22
12896e4
Код
Авторство
О чём код?
using Unity.Collections.LowLevel.Unsafe; using UnityEngine; using UnityEngine.Audio; public class Bullet : MonoBehaviour { [SerializeField] private float speed; [SerializeField] private float lifetime; [SerializeField] private float distance; [SerializeField] public int damage = 10; public int increaseDamage = 0; [SerializeField] private LayerMask[] whatIsSolid; [SerializeField] public bool enemyBullet; public GameObject bloodEffect; public GameObject splinterEffect; public GameObject barbwireEffect; private float traveledDistance = 0f; private float timeAlive = 0f; private Rigidbody2D rb; private Collider2D bulletCollider; [Header("Audio Settings")] public AudioMixer audioMixer; private float currentVolume; [SerializeField] private AudioSource audioSource; [SerializeField] private AudioClip hitSound; [SerializeField] private AudioClip destroySound; private void Start() { rb = GetComponent<Rigidbody2D>(); if (rb == null) { rb = gameObject.AddComponent<Rigidbody2D>(); } bulletCollider = GetComponent<Collider2D>(); if (bulletCollider == null) { bulletCollider = gameObject.AddComponent<CircleCollider2D>(); } bulletCollider.isTrigger = true; audioMixer.GetFloat("Game", out currentVolume); //Изменение урона пули игрока if (!enemyBullet) { int level = LevelProgress.GetReachedLevel(); if (level == 2) { damage += increaseDamage; } else if (level == 3) { damage += increaseDamage * 2; } else if (level >= 4) { damage += increaseDamage * 3; } } } private void Update() { if (timeAlive >= lifetime || traveledDistance >= distance) { Destroy(gameObject); return; } float moveDistance = speed * Time.deltaTime; rb.linearVelocity = transform.right * speed; traveledDistance += moveDistance; timeAlive += Time.deltaTime; } private void OnTriggerEnter2D(Collider2D collision) { //Обработка касаний вражеской пули if (enemyBullet) { if (collision.CompareTag("Player")) { PlaySound(hitSound); collision.GetComponent<PlayerHealth>().TakeDamage(damage); GameObject effect = Instantiate(bloodEffect, transform.position, Quaternion.identity); Destroy(effect, 0.2f); Destroy(gameObject); } else { PlaySound(destroySound); GameObject effect = Instantiate(splinterEffect, transform.position, Quaternion.identity); Destroy(effect, 0.2f); Destroy(gameObject); } } //Обработка касаний пули игрока if (!enemyBullet) { if ((collision.CompareTag("Rifleman") || collision.CompareTag("Swordsman"))) { PlaySound(hitSound); if (collision.GetComponentInParent<Swordsman>() != null) { Swordsman swordsman = collision.GetComponentInParent<Swordsman>(); swordsman.TakeDamage(damage); GameObject effect = Instantiate(bloodEffect, transform.position, Quaternion.identity); Destroy(effect, 0.2f); } else if (collision.GetComponentInParent<Rifleman>() != null) { Rifleman rifleman = collision.GetComponentInParent<Rifleman>(); rifleman.TakeDamage(damage); GameObject effect = Instantiate(bloodEffect, transform.position, Quaternion.identity); Destroy(effect, 0.2f); } Destroy(gameObject); } else if (collision.CompareTag("Bomb")) { PlaySound(destroySound); Destroy(gameObject); GameObject effect = Instantiate(splinterEffect, transform.position, Quaternion.identity); Destroy(effect, 0.2f); } else if (collision.CompareTag("Barbwire")) { PlaySound(destroySound); Barbwire barbwire = collision.GetComponent<Barbwire>(); if (barbwire != null) { barbwire.TakeDamage(damage); } GameObject effect = Instantiate(barbwireEffect, transform.position, Quaternion.identity); Destroy(effect, 0.2f); Destroy(gameObject); } else { PlaySound(destroySound); GameObject effect = Instantiate(splinterEffect, transform.position, Quaternion.identity); Destroy(effect, 0.2f); Destroy(gameObject); } } } //Проигрывание звуков уничтожения private void PlaySound(AudioClip clip) { float volume = Mathf.Pow(10f, currentVolume / 20f); AudioSource.PlayClipAtPoint(clip, transform.position, volume); } }