У меня есть этот скрипт из многопользовательского шутера, который я делаю, и у меня есть вопрос об использовании атрибута [Command]
Это код:
[Command]
public void CmdShoot()
{
//Creat the bullet
GameObject Bullet = (GameObject)Instantiate(bulletPrefab, Barrle.transform.position, Barrle.transform.rotation);
BulletController bc = Bullet.GetComponent<BulletController>();
bc.SetOrigin(this.transform.name);
NetworkServer.Spawn(Bullet);
//Shoot the bullet
Rigidbody rb = Bullet.GetComponent<Rigidbody>();
rb.AddForce(cam.transform.forward * BulletForce, ForceMode.VelocityChange);
}
//Called from the bullet when it hit something
[Command]
public void CmdHit(GameObject other,GameObject _bullet)
{
Debug.Log(other.transform.name);
GameObject bullet = _bullet;
if (other.GetComponent<NetworkIdentity>() != null)
{
//Destroy the coin if you hit it
if (other.transform.name.Equals("Coin"))
{
NetworkServer.Destroy(other.gameObject);
}
//Apply dmg to other player if hit it
else if (other.transform.tag.Equals("Player"))
{
Player playerHit = GameManager.GetPlayer(other.transform.name);
playerHit.TakeDamage(BulletForce);
}
}
//Destroy the bullet if you hit anything
NetworkServer.Destroy(bullet.gameObject);
}
Теперь, если я уберу атрибут [Command] из CmdShoot, удаленный игрок не сможет стрелять, потому что у него нет NetworkServer (насколько я понимаю)
Я предполагаю, что это будет то же самое для CmdHit, и удаленный игрок не сможет уничтожить пулю или монету, потому что у него нет NetworkServer.
Но... CmdHit отлично работает даже без атрибута [Command], и мне интересно, почему?