/// <summary> /// 创建净数据对象 /// </summary> /// <param name="_id"></param> /// <returns></returns> public static CGPlayer CreateDummy(PlayerBaseInfo _info) { GameObject newGO = null; if (GameCenter.instance.dummyOpcPrefab != null) { newGO = Instantiate(GameCenter.instance.dummyOpcPrefab) as GameObject; newGO.name = "Dummy CG Player [" + _info.ServerInstanceID + "]"; } else { newGO = new GameObject("Dummy CG Player[" + _info.ServerInstanceID + "]"); } newGO.tag = "Player"; newGO.SetMaskLayer(LayerMask.NameToLayer("CGPlayer")); newGO.AddComponent <ActorMoveFSM>(); CGPlayer newOPC = newGO.AddComponent <CGPlayer>(); newOPC.isDummy_ = true; newOPC.id = _info.ServerInstanceID; newOPC.actorInfo = _info; newOPC.typeID = ObjectType.CGObject; newOPC.curMoveSpeed = newOPC.actorInfo.StaticSpeed * MOVE_SPEED_BASE; newOPC.CurRealSpeed = newOPC.curMoveSpeed; newOPC.transform.localRotation = new Quaternion(0, _info.RotationY, 0, 0); GameCenter.curGameStage.PlaceGameObjectFromServer(newOPC, (int)_info.ServerPos.x, (int)_info.ServerPos.y, (int)newOPC.transform.localEulerAngles.y); GameCenter.curGameStage.AddObject(newOPC); return(newOPC); }
IEnumerator CreateAsync() { if (isDummy_ == false) { GameSys.LogError("You can only start create other player in dummy: " + actorInfo.ServerInstanceID); yield break; } // isDownloading_ = true; //判断是否正在下载,防止重复创建 CGPlayer opc = null; bool faild = false; pendingDownload = Create(actorInfo, delegate(CGPlayer _opc, EResult _result) { if (_result != EResult.Success) { faild = true; return; } opc = _opc; pendingDownload = null; }); while (opc == null || opc.inited == false) { if (faild) { yield break; } yield return(null); } pendingDownload = null; isDownloading_ = false; if (!actorInfo.IsAlive) { opc.Dead(); } }