private void CreateNPC(IEntityDataStruct entityDataStruct, EntityModelPartial entityModelPartial) { switch (entityModelPartial) { case EntityModelPartial.DataStruct: m_preCreateNPCStructCache.Add(entityDataStruct); break; case EntityModelPartial.GameObject: var sMsgPropCreateEntity_SC_NPC = (SMsgPropCreateEntity_SC_NPC)entityDataStruct; ////TraceUtil.Log("============>>>>>>>>>>.MapID" + sMsgPropCreateEntity_SC_NPC.MapID); ////TraceUtil.Log("============>>>>>>>>>.NPCX" + sMsgPropCreateEntity_SC_NPC.NPCX); ////TraceUtil.Log("============>>>>>>>>>.BaseValue.OBJECT_FIELD_ENTRY_ID" + sMsgPropCreateEntity_SC_NPC.BaseValue.OBJECT_FIELD_ENTRY_ID); ////TraceUtil.Log("============>>>>>>>>>.UnitValue.UNIT_FIELD_DIR" + sMsgPropCreateEntity_SC_NPC.UnitValue.UNIT_FIELD_DIR); ////TraceUtil.Log("============>>>>>>>>>.UnitValue.UNIT_FIELD_LEVEL" + sMsgPropCreateEntity_SC_NPC.UnitValue.UNIT_FIELD_LEVEL); ////TraceUtil.Log("============>>>>>>>>>.NPCValue.CREATURE_FIELD_CAN_TALK" + sMsgPropCreateEntity_SC_NPC.NPCValue.CREATURE_FIELD_CAN_TALK); //string npcName = "NPC_QHY"; //var npcPrefab = this.FindByName(npcName); ////TraceUtil.Log("npcID==========" + sMsgPropCreateEntity_SC_NPC.BaseValue.OBJECT_FIELD_ENTRY_ID); var npcPrefab = NPCConfigManager.Instance.NPCConfigList[sMsgPropCreateEntity_SC_NPC.BaseValue.OBJECT_FIELD_ENTRY_ID].NPCPrefab; var pos = Vector3.zero; pos = pos.GetFromServer(sMsgPropCreateEntity_SC_NPC.NPCX, sMsgPropCreateEntity_SC_NPC.NPCY); //var pos = new Vector3(100, 0, -100); //sMsgPropCreateEntity_SC_NPC.UnitValue.UNIT_FIELD_DIR Quaternion npcDir = Quaternion.Euler(0, (float)sMsgPropCreateEntity_SC_NPC.UnitValue.UNIT_FIELD_DIR / 1000f, 0); ////TraceUtil.Log("NPC333333333333333333333333NPC===" + sMsgPropCreateEntity_SC_NPC.UnitValue.UNIT_FIELD_DIR); var npc = (GameObject)GameObject.Instantiate(npcPrefab, pos, npcDir); var npcBehaviour = npc.GetComponent <NPCBehaviour>(); string npcName = NPCConfigManager.Instance.NPCConfigList[sMsgPropCreateEntity_SC_NPC.BaseValue.OBJECT_FIELD_ENTRY_ID]._szName; string szNpcTitle = NPCConfigManager.Instance.NPCConfigList[sMsgPropCreateEntity_SC_NPC.BaseValue.OBJECT_FIELD_ENTRY_ID]._npcTitle; var npcTitleGo = (GameObject)GameObject.Instantiate(NpcTitle, Vector3.left * 2000, Quaternion.identity); npcTitleGo.transform.parent = BattleManager.Instance.UICamera.transform; npcTitleGo.transform.localScale = new Vector3(20, 20, 20); npcTitleGo.GetComponent <NPCTitle>().SetNpcTitle(npcName, szNpcTitle, npc.transform.FindChild("NPCTitle").position); npcBehaviour.NPCDataModel = sMsgPropCreateEntity_SC_NPC; EntityModel npcDataModel = new EntityModel(); npcDataModel.Behaviour = npcBehaviour; npcDataModel.GO = npc; npcDataModel.EntityDataStruct = sMsgPropCreateEntity_SC_NPC; NPCManager.GetInstance(); EntityController.Instance.RegisteEntity(entityDataStruct.SMsg_Header.uidEntity, npcDataModel); break; } }
private void CreatePlayer(IEntityDataStruct entityDataStruct, EntityModelPartial entityModelPartial) { //if(GameManager.Instance.CurrentState == GameManager.GameState.GAME_STATE_STORYLINE) //{ // return; //} switch (entityModelPartial) { case EntityModelPartial.DataStruct: EntityModel playerDataModel = new EntityModel(); playerDataModel.EntityDataStruct = entityDataStruct; EntityController.Instance.RegisteEntity(entityDataStruct.SMsg_Header.uidEntity, playerDataModel); break; case EntityModelPartial.GameObject: if (null == PlayerManager.Instance.FindPlayerByActorId(((IPlayerDataStruct)entityDataStruct).PlayerActorID)) { return; } //应该按ID或类型读配置加载不同的角色。 bool isHero = entityDataStruct.SMsg_Header.nIsHero == 1; float x = 100, z = -100; byte kind = 0; int fashionId = 0; var playerDataStruct = (IPlayerDataStruct)entityDataStruct; x = playerDataStruct.PlayerX; z = playerDataStruct.PlayerY; kind = (byte)playerDataStruct.GetCommonValue().PLAYER_FIELD_VISIBLE_VOCATION; fashionId = playerDataStruct.GetCommonValue().PLAYER_FIELD_VISIBLE_FASHION; bool inTown = GameManager.Instance.CurrentState == GameManager.GameState.GAME_STATE_TOWN; var configData = inTown ? PlayerDataManager.Instance.GetTownItemData(kind) : PlayerDataManager.Instance.GetBattleItemData(kind); if (configData == null) { TraceUtil.Log("角色类型:" + kind + " 找不到配置信息"); } var fashionItem = ItemDataManager.Instance.GetItemData(fashionId); var player = AssemblyPlayer(configData, kind, isHero, fashionItem == null?null:fashionItem._ModelId); player.layer = isHero?10:18; //Player var heroBehaviour = player.AddComponent <PlayerBehaviour>(); player.AddComponent <PlayerHurtFlash>(); //增加被攻击或者爆气特效脚本 //heroBehaviour.ClickPointEffect = HeroClickPointEffect; 主角点击场面的反馈特效。 var shadowEff = GameObject.Instantiate(configData.ShadowEffect) as GameObject; shadowEff.name = "shadow"; shadowEff.transform.parent = player.transform; shadowEff.transform.localPosition = new Vector3(0, 1, 0); //cache hurt point heroBehaviour.CacheHurtPoint(); heroBehaviour.CacheShadow(); PlayerGenerateConfigData battleConfig = PlayerDataManager.Instance.GetBattleItemData(kind); if (null != battleConfig.RunEffect) { GameObject runEff = GameObject.Instantiate(battleConfig.RunEffect) as GameObject; runEff.name = "run_effect"; runEff.transform.parent = player.transform; runEff.transform.localPosition = Vector3.zero; runEff.transform.localScale = Vector3.one; heroBehaviour.CacheRunEffect(); } var UIConfig = PlayerDataManager.Instance.GetUIItemData(kind); heroBehaviour.HitFlyHeight = UIConfig.HitFlyHeight; heroBehaviour.BeBeAttackBreakLV = UIConfig.BeAttackBreakLV; heroBehaviour.BeHitFlyBreakLV = UIConfig.BeHitFlyBreakLV; heroBehaviour.PlayerKind = kind; var playerPosition = new Vector3(0, 0.1f, 0); playerPosition = playerPosition.GetFromServer(x, z); player.transform.position = playerPosition; Quaternion playerDir = Quaternion.Euler(0, (float)playerDataStruct.GetUnitValue().sMsgPropCreateEntity_SC_UnitVisibleValue.UNIT_FIELD_DIR / 1000.0f, 0); player.transform.rotation = playerDir; TypeID type; heroBehaviour.EntityModel = EntityController.Instance.GetEntityModel(entityDataStruct.SMsg_Header.uidEntity, out type); if (isHero) { player.AddComponent <DontDestroy>(); } else { if (GameManager.Instance.CurrentState == GameManager.GameState.GAME_STATE_BATTLE) { //加入箭头挂载脚本 #if !UNITY_EDITOR ArrowManager.Instance.AddTeammateArrow(player); #endif } } #region 加入称号动画 (去掉) /* * int prestigeLevel = playerDataStruct.GetCommonValue().PLAYER_FIELD_VISIBLE_PRESTIGE_LEVEL; * var prestigeData = PlayerDataManager.Instance.GetPlayerPrestigeList().SingleOrDefault(p => p._pvpLevel == prestigeLevel); * if (prestigeData != null) * { * GameObject medalPrefab = prestigeData._titlePrefab; * if (medalPrefab != null) * { * GameObject medal = (GameObject)Instantiate(medalPrefab); * MedalEffectBehaviour medalBehaviour = medal.AddComponent<MedalEffectBehaviour>(); * medalBehaviour.SetHeroTransform(heroBehaviour.transform); * if (entityDataStruct.SMsg_Header.IsHero) * { * medal.AddComponent<DontDestroy>(); * } * MedalManager.Instance.RegisterMedal(entityDataStruct.SMsg_Header.uidEntity, prestigeLevel, medalBehaviour); * } * } */ #endregion //加入头顶名字 //if (playerDataStruct is SMsgPropCreateEntity_SC_MainPlayer) //{ // CreateTitle(((SMsgPropCreateEntity_SC_MainPlayer)playerDataStruct).Name, isHero, player.transform); //} if (GameManager.Instance.CurrentState != GameManager.GameState.GAME_STATE_PLAYERROOM && playerDataStruct is SMsgPropCreateEntity_SC_OtherPlayer) { var title = CreateTitle(entityDataStruct.SMsg_Header.uidEntity, ((SMsgPropCreateEntity_SC_OtherPlayer)playerDataStruct).Name, isHero, player.transform); heroBehaviour.PlayerTitleRef = title; } //称号 //CreateTitle(entityDataStruct.SMsg_Header.uidEntity,player.transform); PlayerManager.Instance.AttachEntityDataModel(player, entityDataStruct.SMsg_Header.uidEntity); PlayerManager.Instance.AttachEntityDataModel(heroBehaviour, entityDataStruct.SMsg_Header.uidEntity); if (GameManager.Instance.CurrentState == GameManager.GameState.GAME_STATE_BATTLE) { GameManager.Instance.TryFindCameraTarget(); } //根据当前游戏场景,改变玩家的技能,武器挂载等 ////TraceUtil.Log("根据当前游戏场景,改变玩家的技能,武器挂载等在PlayerFactory"); PlayerManager.Instance.PlayerChangeScene(GameManager.Instance.CurrentState, entityDataStruct.SMsg_Header.uidEntity); //PlayerManager.Instance.PlayerCreateProcess(player, heroBehaviour,GameManager.Instance.CurrentState); break; } }