Unity-Networking: префабы не видны за пределами клиента на сервере
Я пытаюсь заставить игроков создавать сюрикены, однако они появляются только на клиенте, которым они были сделаны. Я добавил сетевой идентификатор в префаб shuriken и добавил префаб shuriken к зарегистрированным порождаемым префабам в сетевом менеджере. Ниже приведена следующая команда в скрипте проигрывателя для создания префабов сюрикена:
void CmdThrowShuriken(){
//creates knife
shurikenCount -= 1;
myAnimator.SetTrigger("throw");
if (shurikenCount != 0) {
if (facingRight) {
GameObject tmp = (GameObject)Instantiate (knifePrefab, transform.position, Quaternion.identity);
NetworkServer.Spawn(tmp);
tmp.GetComponent<Shuriken> ().Initialize (Vector2.left);
} else {
GameObject tmp = (GameObject)Instantiate (knifePrefab, transform.position, Quaternion.identity);
NetworkServer.Spawn(tmp);
tmp.GetComponent<Shuriken> ().Initialize (Vector2.right);
}
}
}
И сценарий сюрикена:
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class Shuriken_net : NetworkBehaviour {
// Use this for initialization
private float speed = 10;
private Rigidbody2D myRigidbody;
private Vector2 direction;
void Start () {
myRigidbody = GetComponent<Rigidbody2D> ();
}
// Update is called once per frame
void FixedUpdate(){
}
void RotateRight () {
transform.Rotate (Vector3.forward * 45);
}
public void Initialize(Vector2 direction){
this.direction = direction;
}
[ServerCallback]
void Update () {
myRigidbody.velocity = direction * speed;
RotateRight ();
}
void OnCollisionEneter(Collision other){
if (PlayerNet.Instance.health != 0) {
PlayerNet.Instance.health -= 5;
}
if (!isServer) {
return;
}
if (other.gameObject.tag != "Ninja") {
return;
}
if (PlayerNet.Instance.health != null) {
PlayerNet.Instance.TakeDamage(5);
}
}
void OnBecameInvisible(){
NetworkServer.Destroy (gameObject);
}
}