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="turretVo">防御塔数据</param> /// <param name="otherParam">其他参数</param> /// <returns></returns> private DisplayOwner CreateTurret(TurretVO turretVo, CreateActorParam otherParam) { if (turretVo == null || otherParam == null) { return null; } DisplayOwner result = null; // 加载数据 var turretConfig = SData_armybase_c.Single.GetDataOfID(Utils.TurretBaseId + otherParam.Level); turretVo.SetSoldierData(turretConfig); //通过对象池创建角色 var turretObj = DisplayerManager.Single.CreateAvatar(turretVo); turretObj.transform.position = new Vector3(otherParam.X, 0, otherParam.Y); // 设置父级 ParentManager.Instance().SetParent(turretObj, ParentManager.BuildingParent); // 区分阵营加载不同皮肤 switch (turretVo.Camp) { case Utils.MyCamp: // 我方阵营 // 放入列表 _myTurretDict.Add(turretVo.ObjID.ID, turretVo); // 旋转角度 turretObj.transform.Rotate(new Vector3(0, 90, 0)); break; case Utils.EnemyCamp: // 敌方阵营 // 放入列表 _enemyTurretDict.Add(turretVo.ObjID.ID, turretVo); // 旋转角度 turretObj.transform.Rotate(new Vector3(0, -90, 0)); break; } // 设置位置 var height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value; turretObj.transform.position = new Vector3(otherParam.X, height, otherParam.Y); // 添加ClusterData // TODO 添加BuildingClusterData var cluster = turretObj.AddComponent<FixtureData>(); // 设置在地面上 cluster.Height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value; cluster.CollisionGroup = Utils.SurfaceCollisionGroup; cluster.AllData.MemberData = turretVo; cluster.X = otherParam.X; cluster.Y = otherParam.Y; cluster.StopMove(); // 设置目标选择权重数据 var aimData = SData_armyaim_c.Single.GetDataOfID(turretVo.ArmyID); cluster.AllData.SelectWeightData = new SelectWeightData(aimData); // 创建外层持有类 result = new DisplayOwner(turretObj, cluster); DisplayerManager.Single.AddElement(turretVo.ObjID, result); // 加载单位Effect数据 var effectData = SData_effect_c.Single.GetDataOfID(turretVo.ArmyID); cluster.AllData.EffectData = new EffectData(effectData); // 创建RanderControl var randerControl = turretObj.AddComponent<RanderControl>(); randerControl.PosObj = cluster; result.RanderControl = randerControl; // 启动RanderControl randerControl.Begin(); // 创建事件检查器 var triggerRunner = turretObj.AddComponent<TriggerRunner>(); triggerRunner.Display = result; return result; }