Buenas, tengo un problema a la hora de que los jugadores de una partida en multijugador, vean las balas. Puedo ver a los jugadores moverse y girar, pero cuando le dan a disparar, la bala sólo la ve el jugador que la dispara.
Tengo estos 3 scripts. Jugador_Disparos y Bala_Network está vinculados al prefab del jugador, y Bala, al prefab de la bala.
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class Jugador_Disparos : NetworkBehaviour {
public GameObject go_arma;
public GameObject go_bala;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
siHayDisparo ();
}
void siHayDisparo(){
if (!isLocalPlayer) {
return;
}
if (Input.GetKeyDown (KeyCode.Mouse0)) {
disparo ();
}
}
void disparo(){
Network.Instantiate (go_bala, new Vector3 (go_arma.transform.position.x, go_arma.transform.position.y, go_arma.transform.position.z), transform.rotation, 0);
}
}
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class Bala_Network : NetworkBehaviour {
[SyncVar]private Vector3 syncPos;
[SerializeField] Transform balaTransform;
[SerializeField] float lerpRate = 15;
private Vector3 ultimaPos;
private float threshold = 0.1f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
LerpPosition();
}
void FixedUpdate () {
LlamarPos ();
}
void LerpPosition() {
//Actualiza las posiciones de los jugadores
//if (!isLocalPlayer) {
balaTransform.position = Vector3.Lerp (balaTransform.position, syncPos, Time.deltaTime * lerpRate);
//}
}
[Command]
void CmdEnvioPosServidor (Vector3 pos) {
syncPos = pos;
//Debug.Log ("Comando para posición");
}
[ClientCallback]
void LlamarPos() {
//if (isLocalPlayer && Vector3.Distance(balaTransform.position, ultimaPos) > threshold) {
CmdEnvioPosServidor (balaTransform.position);
ultimaPos = balaTransform.position;
//}
}
}
using UnityEngine;
using System.Collections;
public class Bala : MonoBehaviour {
public float Velocidad = 100f;
public float distancia_maximaxi = -25f;
public float distancia_maximaxd = 75f;
public float distancia_maximazi = -3f;
public float distancia_maximazd = 53f;
// Use this for initialization
void Start () {
transform.Rotate (90, 0, 0);
}
// Update is called once per frame
void Update () {
transform.Translate(new Vector3 (0, 1, 0)*Velocidad*Time.deltaTime);
if (transform.position.z >= distancia_maximazd || transform.position.z <= distancia_maximazi || transform.position.x >= distancia_maximaxd || transform.position.x <= distancia_maximaxi)
Destroy(gameObject);
}
}
¿Alguna idea sobre que puedo estar haciendo mal?