private FlockAgent CreateNewAgent(bool randomZ) { if (!randomZ) { //Debug.Log("添加星空块。"); } // 获取数据 //FlockData data = _daoService.GetFlockData(_dataType,_manager);\ FlockData data = _daoService.GetFlockDataByScene(_dataType, _manager.SceneIndex); // 获取出生位置 Vector2 randomPosition = UnityEngine.Random.insideUnitSphere; Vector3 position = new Vector3(); position.x = (randomPosition.x / 2 + 0.5f) * _manager.GetScreenRect().x; position.y = (randomPosition.y / 2 + 0.5f) * _manager.GetScreenRect().y; // 获取长宽 Sprite logoSprite = data.GetCoverSprite(); float width = _sceneUtil.ResetTexture(new Vector2(logoSprite.rect.width, logoSprite.rect.height)).x; float height = _sceneUtil.ResetTexture(new Vector2(logoSprite.rect.width, logoSprite.rect.height)).y; //FlockAgent go = _itemFactory.Generate(position.x, position.y, position.x, position.y, 0, 0, // width, height, data, AgentContainerType.StarContainer); FlockAgent go = FlockAgentFactoryInstance.Generate(_manager, position, AgentContainerType.StarContainer, position.x, position.y, 0, 0, width, height, data, _sceneConfig.daoTypeEnum); go.UpdateImageAlpha(0); // 星空效果不会被物理特效影响 //go.CanEffected = false; go.flockStatus = FlockStatusEnum.STAR; go.isStarEffect = true; // 设置Z轴 float z; if (randomZ) { z = Mathf.Lerp(_manager.cutEffectConfig.StarEffectOriginPoint, _manager.cutEffectConfig.StarEffectEndPoint, UnityEngine.Random.Range(0f, 1f)); } else { z = _manager.cutEffectConfig.StarEffectOriginPoint; } go.GetComponent <RectTransform>().anchoredPosition3D = go.GetComponent <RectTransform>().anchoredPosition3D + new Vector3(0, 0, z); go.Z = z; go.name = "Agent-" + Mathf.RoundToInt(go.Z); _activeAgents.Add(go); return(go); }
/// <summary> /// 创建的代理 /// </summary> private void CreateItem(DataTypeEnum type) { // 初始化 config _displayBehaviorConfig = new DisplayBehaviorConfig(); _sceneUtil = new SceneUtils(_manager, _sceneConfig.isKinect); _row = _manager.cutEffectConfig.FrontBackRow; int itemHeight = _sceneUtil.GetFixedItemHeight(); float gap = _sceneUtil.GetGap(); float w = _manager.mainPanel.rect.width; // 获取总宽度 int column = 0; // 列数 int generate_x = 0; // 生成新 agent 的位置 // 按列创建, 隔行创建 while (generate_x < w) { // 获取列数奇数状态 bool isOddColumn = column % 2 == 0; float generate_x_temp = 0; for (int i = 0; i < _row; i++) { // 获取行数奇数状态 bool isOddRow = i % 2 == 0; // 获取要创建的内容 FlockData agent = _manager.daoServiceFactory.GetDaoService(_sceneConfig.daoTypeEnum).GetFlockDataByScene(type, _manager.SceneIndex); Sprite coverSprite = agent.GetCoverSprite(); float imageWidth = coverSprite.rect.width; float imageHeight = coverSprite.rect.height; // 得到调整后的长宽 Vector2 imageSize = _sceneUtil.ResetTexture(new Vector2(imageWidth, imageHeight)); imageSize.x = (imageSize.x * 1.5f); imageSize.y = (imageSize.y * 1.5f); //Vector2 imageSize = AppUtils.ResetTexture(new Vector2(imageWidth, imageHeight), // _manager.displayFactor); FlockAgent go; float ori_y = _sceneUtil.GetYPositionByFixedHeight(itemHeight, i); float ori_x = generate_x + gap + imageSize.x / 2; if (ori_x + gap + imageSize.x / 2 > generate_x_temp) { generate_x_temp = ori_x + gap + imageSize.x / 2; } // 定义生成位置 float gen_x, gen_y; gen_x = _manager.mainPanel.rect.width + imageSize.x + gap; gen_y = ori_y; if ((isOddColumn && isOddRow) || (!isOddRow && !isOddColumn)) { // 创建前排 //go = ItemsFactory.Generate(gen_x, gen_y, ori_x, ori_y, i, column, // imageSize.x, imageSize.y, agent, AgentContainerType.MainPanel); go = FlockAgentFactoryInstance.Generate(_manager, new Vector2(gen_x, gen_y), AgentContainerType.MainPanel , ori_x, ori_y, i, column, imageSize.x, imageSize.y, agent, _sceneConfig.daoTypeEnum); } else { // 创建后排 float width = imageSize.x * 0.6f; float height = imageSize.y * 0.6f; //go = ItemsFactory.Generate(gen_x, gen_y, ori_x, ori_y, i, column, // imageSize.x, imageSize.y, agent, AgentContainerType.BackPanel); //go = ItemsFactory.Generate(gen_x, gen_y, ori_x, ori_y, i, column, // width, height, agent, AgentContainerType.BackPanel); go = FlockAgentFactoryInstance.Generate(_manager, new Vector2(gen_x, gen_y), AgentContainerType.BackPanel , ori_x, ori_y, i, column, width, height, agent, _sceneConfig.daoTypeEnum); } //go.NextVector2 = new Vector2(gen_x, gen_y); go.flockStatus = FlockStatusEnum.RUNIN; // 装载延迟参数 go.DelayX = 0; go.DelayY = 0; } // 更新 generate_x 的值 generate_x = Mathf.RoundToInt(generate_x_temp); // 第二列的开始在第一列的最右侧 column++; } _displayBehaviorConfig.generatePositionX = generate_x; _displayBehaviorConfig.generatePositionXInBack = generate_x; _displayBehaviorConfig.Column = column; _displayBehaviorConfig.ColumnInBack = column; // 调整启动动画的时间 _entranceDisplayTime += _startDelayTime; // 创建结束 _displayBehaviorConfig.dataType = _dataTypeEnum; _displayBehaviorConfig.Manager = _manager; _displayBehaviorConfig.sceneUtils = _sceneUtil; _displayBehaviorConfig.sceneConfig = _sceneConfig; _onCreateAgentCompleted.Invoke(_displayBehaviorConfig); }