public static DisplayOwner CreateUnit(int unitType, CreateActorParam otherParam) { VOBase vo = new VOBase(); switch (unitType) { case (int)ObjectID.ObjectType.MyJiDi: vo = new JiDiVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.MyJiDi); break; case (int)ObjectID.ObjectType.EnemyJiDi: vo = new JiDiVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.EnemyJiDi); break; case (int)ObjectID.ObjectType.MySoldier: vo = new FightVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.MySoldier); break; case (int)ObjectID.ObjectType.EnemySoldier: vo = new FightVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.EnemySoldier); break; case (int)ObjectID.ObjectType.MyTower: vo = new TurretVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.MyTower); break; case (int)ObjectID.ObjectType.EnemyTower: vo = new TurretVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.EnemyTower); break; case (int)ObjectID.ObjectType.MyTank: vo = null; break; case (int)ObjectID.ObjectType.EnemyTank: vo = null; break; case (int)ObjectID.ObjectType.MyObstacle: vo = null; break; case (int)ObjectID.ObjectType.EnemyObstacle: vo = null; break; case (int)ObjectID.ObjectType.NPCObstacle: vo = new VOBase(); vo.ObjID = new ObjectID(ObjectID.ObjectType.NPCObstacle); break; } return(DataManager.Single.Create(vo, otherParam)); }
/// <summary> /// 创建单位 /// </summary> /// <param name="soldier">单位数据</param> /// <param name="param">数据参数</param> /// <returns></returns> private DisplayOwner CreateSoldier(FightVO soldier, CreateActorParam param) { if (soldier.ObjID.ObjType == ObjectID.ObjectType.MySoldier) { _mySoldiersDict.Add(soldier.ObjID.ID, soldier); } if (soldier.ObjID.ObjType == ObjectID.ObjectType.EnemySoldier) { _enemySoldiersDict.Add(soldier.ObjID.ID, soldier); } // 设置数据 var soldierId = param.SoldierID; var config = SData_armybase_c.Single.GetDataOfID(soldierId); soldier.SetSoldierData(config); //var display = DP_FightPrefabManage.InstantiateAvatar(param); //通过对象池创建角色 var display = DisplayerManager.Single.CreateAvatar(soldier); display.transform.position = new Vector3(param.X, 0, param.Y); // 设置父级 ParentManager.Instance().SetParent(display, ParentManager.ClusterParent); // 创建渲染器 // var mfa = display.GetComponent<MFAModelRender>(); // mfa.ObjId = soldier.ObjID; // 创建集群数据 var cluster = display.AddComponent<ClusterData>(); cluster.SetDataValue(soldier); // mfa.Cluster = cluster; // 设置空地高度 switch (soldier.GeneralType) { // 空中单位高度 case Utils.GeneralTypeAir: cluster.Height = SData_Constant.Single.GetDataOfID(Utils.AirTypeConstantId).Value; cluster.CollisionGroup = Utils.AirCollisionGroup; break; // 地面单位高度 case Utils.GeneralTypeBuilding: case Utils.GeneralTypeSurface: cluster.Height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value; cluster.CollisionGroup = Utils.SurfaceCollisionGroup; break; } //Debug.Log("类型: " + soldier.GeneralType + "高度: " + mfa.Cluster.Height); // 添加至ClusterManager中 //cluster.Diameter *= ClusterManager.Single.UnitWidth; cluster.StopMove(); // ClusterManager.Single.Add(mfa.Cluster); // 创建外层持有类 var displayOwner = new DisplayOwner(display, cluster); DisplayerManager.Single.AddElement(soldier.ObjID, displayOwner); // 创建RanderControl var randerControl = display.AddComponent<RanderControl>(); randerControl.PosObj = cluster; displayOwner.RanderControl = randerControl; // 挂载事件处理器 var triggerRunner = display.AddComponent<TriggerRunner>(); // 设置数据 triggerRunner.Display = displayOwner; // 设置目标选择权重数据 var aimData = SData_armyaim_c.Single.GetDataOfID(soldier.ArmyID); cluster.AllData.SelectWeightData = new SelectWeightData(aimData); if (soldier.AttackType == Utils.BulletTypeScope) { // 加载单位的AOE数据 var aoeData = SData_armyaoe_c.Single.GetDataOfID(soldier.ArmyID); cluster.AllData.AOEData = new ArmyAOEData(aoeData); } // 加载单位Effect数据 var effectData = SData_effect_c.Single.GetDataOfID(soldier.ArmyID); cluster.AllData.EffectData = new EffectData(effectData); // 加载单位 var armyTypeData = SData_UnitFightData_c.Single.GetDataOfID(soldier.ArmyID); cluster.AllData.ArmyTypeData = new ArmyTypeData(armyTypeData); cluster.AllData.ArmyTypeData.Camp = (short) soldier.Camp; // 加载并设置技能 displayOwner.ClusterData.AllData.SkillInfoList = SkillManager.Single.CreateSkillInfoList(new List<int>() { soldier.Skill1, soldier.Skill2, soldier.Skill3, soldier.Skill4, soldier.Skill5, }, displayOwner); // 创建单位是将技能属性(如果有)附加到单位上 foreach (var skill in displayOwner.ClusterData.AllData.SkillInfoList) { SkillManager.Single.AttachSkillAttribute(skill, displayOwner.ClusterData.AllData.MemberData); } return displayOwner; }