@Senture

Как исправить «Trying to send command for object without authority.» в мультиплеере?

Здравствуйте!
Имеется 2 класса, Bullet и PlayerShoot:
PlayerShoo(скрипт весит на игроке):t:
using UnityEngine;
using UnityEngine.Networking;

public class PlayerShoot : NetworkBehaviour
{
    public Weapon weapon;

    [SerializeField]
    private Transform bullet; // префаб пули
    [SerializeField]
    private Transform pivot; // пустой оъбект для спавна пули по координатам данного объекта

    public int speed = 600; // скорость пули
    public float damage = 10f; // урон пули

	void Start ()
    {
        speed = 600;
        damage = 10f;
        if (cam == null)
        {
            Debug.LogError("No camera");
            this.enabled = false;
        }
	}
	

	void Update ()
    {
        if(Input.GetButtonDown("Fire1"))
        {
            Shoot();
        }
     }

    [Client]
    void Shoot()
    {
        Instantiate(bullet, pivot.position, pivot.rotation); // Спавн пули
    }

    [Command]
    void CmdPlayerShoot(string _ID, float damage)
    {
        Debug.Log(_ID + " поврежден!");

        Player player = GameManager.GetPlayer(_ID);
        player.TakeDamage(damage);
    }
}


Bullet(скрипт весит на пуле):
using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class Bullet : MonoBehaviour
{

    private Rigidbody rb;

    private Vector3 lastPos;

    public GameObject goPlayer;

    [SerializeField]
    private LayerMask mask;

    PlayerShoot playerShoot;

    private int speed;
    private float damage;
    // Задаем настройки для пули
    void Start ()
    {
        rb = GetComponent<Rigidbody>();

        playerShoot = goPlayer.GetComponent<PlayerShoot>();
        int courrentSpeed = playerShoot.speed;
        speed = courrentSpeed;
        damage = playerShoot.damage;

        lastPos = transform.position;
    }

    // Запускаем пулю вперед и если она поппадает в объект с тегом "Player" снимаем hp у игрока в которого попали
    void Update ()
    {
        rb.transform.Translate(Vector3.right * speed * Time.deltaTime);

        RaycastHit _hit;
        if (Physics.Linecast(lastPos, transform.position, out _hit, mask))
        {
            Destroy(gameObject);
            if (_hit.collider.tag == "Player")
            {
                //playerShoot.ReadShoot(_hit);
                goPlayer.GetComponent<PlayerShoot>().ReadShoot(_hit); // Вот тут ошибка: см. ниже
            }
        }

        lastPos = transform.position;
    }
}


ошибка: Trying to send command for object without authority.
UnityEngine.Networking.NetworkBehaviour:SendCommandInternal(NetworkWriter, Int32, String)
PlayerShoot:CallCmdPlayerShoot(String, Single)
PlayerShoot:ReadShoot(RaycastHit) (at Assets/Scripts/PlayerShoot.cs:68)
Bullet:Update() (at Assets/Scripts/Bullet.cs:67)

Как исправить? Помогите пожалуйста.

P.S. Спасибо большое!
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы