Ejemplo n.º 1
0
    public void recvDamage(float damage)
    {
        Debug.LogWarning("Enemy Hit!" + EnemyGenerator.enemys.IndexOf(this));
        if (state == EnemyState.STAY)
        {
            //hp -= (int)damage;

            MultiplayerCtrl.getLocalPlayer().GetComponent <MultiplayerCtrl>().CmdRecvDamageEnemy(EnemyGenerator.enemys.IndexOf(this), damage);
        }
    }
Ejemplo n.º 2
0
    public void RpcSpawnEnemy(Vector3 _pos, Quaternion _rotate, uint _targetId)
    {
        if (_targetId == MultiplayerCtrl.getLocalNetId()) //代表是自己產生的敵人,不再重複生成
        {
            return;
        }
        if (EnemyGenerator.enemys.Count == SingleObj <EnemyGenerator> .obj.enemyMaxCount)     //取得client獨立的怪物產生器,檢查怪物是否超過max數量
        {
            var delEnemy = EnemyGenerator.enemys[0];
            EnemyGenerator.enemys.RemoveAt(0);
            Destroy(delEnemy.gameObject);                         //移除最早出現的敵人
        }
        var spawnEnemy = Instantiate(enemyPrefab, _pos, _rotate); //client生成敵人,新敵人加入Queue中

        EnemyGenerator.enemys.Add(spawnEnemy.GetComponent <Enemy>());
        GameObject.Find("CAsDebugText").GetComponent <UnityEngine.UI.Text>().text += "enemy = " + EnemyGenerator.enemys.IndexOf(spawnEnemy.GetComponent <Enemy>()) + "\n";
        spawnEnemy.GetComponent <EnemyMultiplayerCtrl>().targetId = _targetId;
    }
Ejemplo n.º 3
0
    public GameObject createEnemy(Vector3 pos)
    {
        GameObject enemy = null;

        if (FindObjectsOfType <Enemy>().Length < enemyMaxCount)
        {
            enemy = Instantiate(enemyPrefab, pos, Quaternion.identity);
        }
        else
        {
            var delEnemy = enemys[0];
            enemys.RemoveAt(0);
            Destroy(delEnemy.gameObject);  //移除最早出現的敵人
            enemy = Instantiate(enemyPrefab, pos, Quaternion.identity);
        }

        enemy.GetComponent <EnemyMultiplayerCtrl>().targetId = MultiplayerCtrl.getLocalNetId();
        return(enemy);
    }
Ejemplo n.º 4
0
    public IEnumerator ResolvingCloudAnchors()    //啟動解析功能
    {
        if (sessionID == string.Empty)
        {
            yield break;
        }
        //初始化
        initiateCloudAnchorPrefabs();
        yield return(StartCoroutine(loadResolveSet(sessionID, true)));

        // No Cloud Anchor for resolving.
        if (resolveSet.Count == 0)
        {
            yield break;
        }

        // ARCore session is not ready for resolving.
        if (Session.Status != SessionStatus.Tracking)
        {
            yield break;
        }

        //先預載入要解析的地圖集,等待旗標才可進行解析(resolveStartFlag = true)
        while (!resolveStartFlag)
        {
            yield return(0);
        }

        Debug.LogWarning("resolve start");

        pendingTask = new List <string>();
        //註冊雲錨資料,並開始解析
        foreach (var _cloudanchor in resolveSet)
        {
            pendingTask.Add(_cloudanchor.Key);
            XPSession.ResolveCloudAnchor(_cloudanchor.Key).ThenAction(result =>
            {
                pendingTask.Remove(result.Anchor.CloudId);
                if (result.Response != CloudServiceResponse.Success)
                {
                    Debug.LogFormat("Faild to resolve cloud anchor {0} for {1}",
                                    result.Anchor, result.Response);
                }
                else
                {
                    GameObject tmpObj;
                    Pose virtualPos = SingleObj <MRGun.CloudAnchor.ARCoreWorldOriginHelper> .obj.
                                      _WorldToAnchorPose(new Pose(result.Anchor.transform.position, result.Anchor.transform.rotation));
                    if (cloudAnchorPrefabsMatch.TryGetValue(_cloudanchor.Value, out tmpObj))
                    {
                        GameObject _tempObj = null;
                        if (tmpObj.tag == Constants.tagEnemy)
                        {
                            try
                            {
                                _tempObj = SingleObj <EnemyGenerator> .obj.createEnemy(virtualPos.position);
                                if (_tempObj != null)
                                {
                                    _tempObj.transform.SetParent(null);
                                    //_enemy.transform.position += (Camera.main.transform.position - Frame.Pose.position);
                                    _tempObj.GetComponent <ProjectileCus>().closeAutoCalibrate();
                                }

                                MultiplayerCtrl.getLocalPlayer().GetComponent <MultiplayerPCACtrl>().CmdSyncPCA(result.Anchor.CloudId);
                            }
                            catch (System.Exception e)
                            {
                                GameObject.Find("CAsDebugText").GetComponent <UnityEngine.UI.Text>().text += "\n" + e.StackTrace;
                            }
                        }
                        else
                        {
                            _tempObj = Instantiate(tmpObj);
                            _tempObj.transform.SetParent(null);
                            _tempObj.transform.position = virtualPos.position;
                        }

                        GameObject.Find("CAsDebugText").GetComponent <UnityEngine.UI.Text>().text += string.Format(
                            "\n{0} pos{1}", _tempObj.name, _tempObj.transform.position);
                        if (_tempObj)
                        {
                            //CreateAnchor(_tempObj.transform);
                        }
                    }
                }
            });
        }
        resolveSet.Clear();
    }