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="jidiVo">基地数据</param> /// <param name="otherParam">其他参数</param> /// <returns></returns> private DisplayOwner CreateBase(JiDiVO jidiVo, CreateActorParam otherParam) { DisplayOwner result = null; if (jidiVo == null || otherParam == null) { return result; } // 根据等级获得对应数据 var baseConfig = SData_armybase_c.Single.GetDataOfID(Utils.BaseBaseId + otherParam.Level); jidiVo.SetSoldierData(baseConfig); // 创建基地模型 // 通过对象池创建角色 var baseObj = DisplayerManager.Single.CreateAvatar(jidiVo); baseObj.transform.position = new Vector3(otherParam.X, 0, otherParam.Y); // 设置父级 ParentManager.Instance().SetParent(baseObj, ParentManager.BuildingParent); switch (jidiVo.Camp) { case Utils.MyCamp: _myJidiDict.Add(jidiVo.ObjID.ID, jidiVo); // 旋转角度 baseObj.transform.Rotate(new Vector3(0, 90, 0)); break; case Utils.EnemyCamp: _enemyJidiDict.Add(jidiVo.ObjID.ID, jidiVo); // 旋转角度 baseObj.transform.Rotate(new Vector3(0, -90, 0)); break; } // 获取距离地面高度 var height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value; baseObj.transform.position = new Vector3(otherParam.X, height, otherParam.Y); // TODO 添加BuildingClusterData var cluster = baseObj.AddComponent<FixtureData>(); // 设置在地面上 cluster.Height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value; cluster.CollisionGroup = Utils.SurfaceCollisionGroup; cluster.AllData.MemberData = jidiVo; cluster.X = otherParam.X; cluster.Y = otherParam.Y; cluster.StopMove(); // 保存基地位置 FightManager.Single.SetMemberPos(jidiVo.Camp, FightManager.MemberType.Base, new Vector3(cluster.X, cluster.Height, cluster.Y)); // 创建外层持有类 result = new DisplayOwner(baseObj, cluster); DisplayerManager.Single.AddElement(jidiVo.ObjID, result); // 创建RanderControl var randerControl = baseObj.AddComponent<RanderControl>(); randerControl.PosObj = cluster; result.RanderControl = randerControl; randerControl.Begin(); // 创建事件检查器 var triggerRunner = baseObj.AddComponent<TriggerRunner>(); triggerRunner.Display = result; return result; }