Esempio 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);
        }
    }
Esempio n. 2
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();
    }