@Box222x

Как удалить Audio Listener для остальных игроков кроме себя?

Всем привет, подскажите пожалуйста как удалить Audio Listener для всех пользователей кроме себя? Я делаю многопользовательскую FPS игру с Proton Pun 2... Я прикрепил ошибку чуть ниже. У меня проблема в этой части кода:
63f3a284a81be358870771.png
void Start()
    {
        if (PV.IsMine)
        {
            Destroy(GetComponentInChildren<Camera>().gameObject);
        }
 
    }


Если надо, вот полный скрипт:
using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerController : MonoBehaviour
{
    [SerializeField] GameObject cameraHolder;
 
    [SerializeField] float mouseSensitivity, sprintSpeed, walkSpeed, jumpForce, smoothTime;
 
    float verticalLookRotation;
    bool grounded;
    Vector3 smoothMoveVelocity;
    Vector3 moveAmount;
 
 
    Rigidbody rb;
    PhotonView PV;
 
 
    void Awake()
    {
        rb = GetComponent<Rigidbody>();
        PV = GetComponent<PhotonView>();
 
    }
 
    void Start()
    {
        if (PV.IsMine)
        {
            Destroy(GetComponentInChildren<Camera>().gameObject);
        }
 
    }
 
    void Update()
    {
        if (!PV.IsMine)
            return;
 
 
        Look();
        Jump();
        Move();
 
       
 
    }
 
    void Look()
    {
        if (!PV.IsMine)
            return;
 
        transform.Rotate(Vector3.up * Input.GetAxisRaw("Mouse X") * mouseSensitivity);
 
        verticalLookRotation += Input.GetAxisRaw("Mouse Y") * mouseSensitivity;
        verticalLookRotation = Mathf.Clamp(verticalLookRotation, -90f, 90f);
 
        cameraHolder.transform.localEulerAngles = Vector3.left * verticalLookRotation;
    }
 
    void Move()
    {
        Vector3 moveDir = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical")).normalized;
 
        moveAmount = Vector3.SmoothDamp(moveAmount, moveDir * (Input.GetKey(KeyCode.LeftShift) ? sprintSpeed : walkSpeed), ref smoothMoveVelocity, smoothTime);
    }
 
    void Jump()
    {
        if (Input.GetKeyDown(KeyCode.Space) && grounded)
        {
            rb.AddForce(transform.up * jumpForce);
        }
    }
 
    public void SetGroundedState(bool _grounded)
    {
        grounded = _grounded;
    }
 
    void FixedUpdate()
    {
 
 
        rb.MovePosition(rb.position + transform.TransformDirection(moveAmount) * Time.fixedDeltaTime);
    }
 
}
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
@Ezekiel4
Охотник на пиратов и сборщик монолитов
Ну тут есть два варианта - либо вы удаляете компоненту AudioListener с камеры всех, кто удовлетворяет условию:
using Photon.Pun;
using UnityEngine;

public class FixAudioListener : MonoBehaviour {

	// заполнить ссылки в инспекторе до старта игры
	public AudioListener listener;
	public PhotonView photonView;

	private void Start() {
		if (!photonView.IsMine)
			Destroy(listener); // удалить компоненту с камеры
	}
}


Или вы руками его удаляете до старта игры, а на старте помещаете на камеру игрока:
using Photon.Pun;
using UnityEngine;

public class FixAudioListener : MonoBehaviour {

	// заполнить ссылку в инспекторе до старта игры
	public PhotonView photonView;

	private void Start() {
		if (photonView.IsMine)
			AddComponent<AudioListener>(); // добавить компоненту на камеру
	}
}


С точки зрения логики, логичнее второй вариант, ибо в первом юнити сначала его создаст, а потом поудаляет почти у всех. А во втором он создаст компоненту лишь раз.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы