Unity Networking enemy spawning is not working

时间:2018-04-20 00:51:57

标签: unity3d networking

I am making a multiplayer MMO with unity and I am stuck on syncing up enemy spawning between clients. Basically the enemies spawn as intended, but only on the user that spawned them. Here is my code (Sorry it is a bit long, just wanted to include any information that could be relevant, as the is my first time with networking):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

[System.Serializable]
public class EnemySpawn {
    public GameObject prefab;
    public int difficulty;
    public int rarity;
    [HideInInspector()]
    public GameObject instance;
}

public class EnemySpawner : NetworkBehaviour {

    public EnemySpawn[] enemys;
    public int maxDiff = 8;
    public int spawnDistMin = 15;
    public int spawnDistMax = 35;

    public int spawnLvlDist = 30;

    private int diffOnScreen;
    private EnemySpawn enemyToSpawn;
    public List<EnemySpawn> enemysOnScreen = new List<EnemySpawn>();

    void Start() {
        StartCoroutine (Spawn());
    }

    void Update() {
        List<EnemySpawn> newEnemysOnScreen = new List<EnemySpawn>();
        foreach(EnemySpawn c in enemysOnScreen) {
            if (c.instance == null) {
                diffOnScreen -= c.difficulty;
            } else {
                newEnemysOnScreen.Add (c);
            }
        }
        enemysOnScreen = newEnemysOnScreen;
    }


     //IMPORTANT PART!!! \/\/\/
    [Command]
    void CmdSpawn(Vector3 pos) {
    GameObject spawning = Instantiate (enemyToSpawn.prefab, pos, Quaternion.identity);
    NetworkServer.Spawn (spawning);
    diffOnScreen += enemyToSpawn.difficulty;
    enemysOnScreen.Insert (0,enemyToSpawn);
    enemysOnScreen [0].instance = spawning;

    spawning.GetComponent<MonsterMain>().lvl = Mathf.RoundToInt(spawning.transform.position.magnitude / spawnLvlDist);
}

IEnumerator Spawn() {
    while (true) {
        int n = 0;
        while (n != 1) {
            enemyToSpawn = enemys [Random.Range (0, enemys.Length)];
            n = Random.Range (1, enemyToSpawn.rarity);
        }
        while (maxDiff - diffOnScreen <= enemyToSpawn.difficulty) {
            yield return null;
        }
        yield return null;
        Transform player = Player.localPlayer.transform;
        Vector2 randomOffset = Random.insideUnitCircle.normalized * Random.Range (spawnDistMin, spawnDistMax);


        CmdSpawn(player.position + new Vector3(randomOffset.x,randomOffset.y,0));

    }
}

}

I am using Unity 2017.1.3.3p3, and I am building this to IOS. It is a 2d game and I am using unity's build in networking system. Again everything works except that the enemies only spawn on one screen. I am connecting one phone to the editor. Any help is appreciated. thank you!

0 个答案:

没有答案