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); } }
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; }
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); }
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(); }