Я учил UNet создавать многопользовательскую игру для локальной сети, и все идет хорошо, кроме урона игрока. Цель здесь состоит в том, чтобы синхронизировать смерть достаточно, чтобы оба клиента поняли, что смерть произошла, и она должна перезагрузить сцену, используя NetworkManager.singleton.ServerChangeScene("SampleScene");
Однако смерть обновляется только на одном клиенте, но появилась новая ошибка. Когда я получаю и вызываю один из методов из моего сценария PlayerDamage, он возвращает сообщение об ошибке, говорящее, что в методе нет аргумента, соответствующего моему конструктору количества с плавающей запятой. Вот код из моего сценария Gun и PlayerDamage. Пистолет:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
public class Gun : NetworkBehaviour {
public float damage = 10f;
public float range = 100f;
public Camera fpsCam;
public AudioSource pistol;
//public ParticleSystem muzzleFlash;
//[SerializeField] private ParticleSystem part;
//public float shotTime = .25f;
private void Update()
{
if (Input.GetButton("Fire1"))
{
Shoot();
pistol.Play();
}
}
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
{
PlayerDamage target = hit.transform.GetComponent<PlayerDamage>();
target.takeDamage();
}
}
}
Урон игрока:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
public class PlayerDamage : NetworkBehaviour {
[SyncVar]
public float health = 50f;
[ClientRpc]
public void CmdTakeDamage(float amount)
{
Debug.Log("took damage" + amount);
}
public void takeDamage(float amount)
{
health -= amount;
CmdTakeDamage(amount);
}
public void Die()
{
NetworkManager.singleton.ServerChangeScene("SampleScene");
}
}
Заранее спасибо, FerretCode