Как проигрывать звук только на определенном расстоянии (Photon)?

Для проигрывания звуков только на определенном расстоянии с использованием Photon в Unity, вам потребуется создать скрипт, который будет управлять проигрыванием звуков и синхронизировать его с другими игроками.

Вот пошаговая инструкция о том, как это можно сделать:

Шаг 1: Создайте пустой объект и прикрепите к нему компонент AudioSource. Этот компонент будет отвечать за воспроизведение звука.

Шаг 2: В настройках AudioSource выберите нужную аудиодорожку, которую вы хотите проигрывать. Настройте параметры звука, такие как громкость и позиционирование звука.

Шаг 3: Создайте скрипт, который будет управлять проигрыванием звука. В этом скрипте вам потребуется использовать класс PhotonView, чтобы синхронизировать проигрывание звука с другими игроками.

Вот пример скрипта:

using UnityEngine;
using Photon.Pun;

public class PlaySoundOnDistance : MonoBehaviourPunCallbacks, IPunObservable
{
    private AudioSource audioSource;
    private float distanceThreshold = 10f;

    private void Awake()
    {
        audioSource = GetComponent<AudioSource>();
    }

    private void Update()
    {
        // Вычисляем расстояние между этим объектом и локальным игроком
        float distance = Vector3.Distance(transform.position, PhotonNetwork.LocalPlayer.transform.position);
        
        // Если расстояние меньше порогового значения - включить звук
        if (distance <= distanceThreshold)
        {
            if (!audioSource.isPlaying)
                audioSource.Play();
        }
        else
        {
            if (audioSource.isPlaying)
                audioSource.Stop();
        }
    }

    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.IsWriting)
        {
            // Отправляем состояние воспроизведения звука другим игрокам
            stream.SendNext(audioSource.isPlaying);
        }
        else if (stream.IsReading)
        {
            // Получаем состояние воспроизведения звука от удаленных игроков
            bool isPlaying = (bool)stream.ReceiveNext();
            
            if (isPlaying)
            {
                if (!audioSource.isPlaying)
                    audioSource.Play();
            }
            else
            {
                if (audioSource.isPlaying)
                    audioSource.Stop();
            }
        }
    }
}

Шаг 4: Прикрепите созданный скрипт к объекту, который будет проигрывать звук.

Теперь, когда вы запустите проект в режиме многопользовательской игры через Photon, звук будет проигрываться только на определенном расстоянии. Вся логика будет синхронизироваться с другими игроками, что позволит им слышать звук только в ближайшем окружении объекта.

Обратите внимание, что для успешной работы этого кода у вас должен быть настроен и подключен Photon в вашем проекте Unity.