/// <summary> /// 根据Id创建SimpleBullet原型 /// </summary> /// <param name="bulletId"></param> /// <returns></returns> private GameObject CreateEnemySimpleProtoType(string bulletId) { GameObject original = Resources.Load <GameObject>("BulletPrefab/SimpleBullet"); GameObject protoType = GameObject.Instantiate <GameObject>(original); EnemyBulletDefaultCfg cfg = BulletsManager.GetInstance().GetBulletDefaultCfgById(bulletId); string protoTypeName = "EnemySimpleBullet" + bulletId; // 设置sprite以及material protoType.name = protoTypeName; SpriteRenderer sp = protoType.transform.Find("BulletSprite").GetComponent <SpriteRenderer>(); if (cfg.aniFrameCount == 0) { sp.sprite = ResourceManager.GetInstance().GetSprite(Consts.STGBulletsAtlasName, cfg.spriteName); } else { sp.sprite = ResourceManager.GetInstance().GetSprite(Consts.STGBulletsAtlasName, cfg.spriteName + "_0"); } if (cfg.blendMode != eBlendMode.Normal) { sp.material = ResourceManager.GetInstance().GetSpriteMatByBlendMode(cfg.blendMode); } UIManager.GetInstance().AddGoToLayer(protoType, LayerId.EnemyBarrage); // 添加原型到缓存池中 ObjectsPool.GetInstance().AddProtoType(bulletId, protoType); #if LogCreateBulletProto Logger.Log("Create Bullet ProtoType " + protoTypeName); #endif return(protoType); }
public override void SetStyleById(string id) { // 根据传入的id读取配置,重新生成数据 EnemyBulletDefaultCfg cfg = BulletsManager.GetInstance().GetBulletDefaultCfgById(id); if (cfg == null) { Logger.LogError("Bullet ChangeStyle Fail! SysId " + id + " is not exist!"); return; } if (_bullet != null) { // 回收现有的prefab ObjectsPool.GetInstance().RestorePrefabToPool(_prefabName, _bullet); } _cfg = cfg; _prefabName = _cfg.id; _bullet = BulletsManager.GetInstance().CreateBulletGameObject(_type, _cfg.id); _trans = _bullet.transform; _spRenderer = _trans.Find("BulletSprite").GetComponent <SpriteRenderer>(); SetPosition(_curPos.x, _curPos.y); SetRotatedByVelocity(cfg.isRotatedByVAngle); SetSelfRotation(cfg.selfRotationAngle); GrazeDetectParas grazeParas = new GrazeDetectParas { type = GrazeDetectType.Rect, halfWidth = cfg.grazeHalfWidth, halfHeight = cfg.grazeHalfHeight, }; _collisionHalfWidth = cfg.collisionRadius * _scaleX; _collisionHalfHeight = cfg.collisionRadius * _scaleY; _collisionRadius = cfg.collisionRadius * _scaleX; // 计算用于擦弹以及碰撞检测的两个数值 // 擦弹 float value = Global.PlayerGrazeRadius + _collisionRadius; _detGrazeValue = value * value; // 碰撞 value = Global.PlayerCollisionVec.z + _collisionRadius; _detCollisonValue = value * value; SetGrazeDetectParas(grazeParas); _aniFrameCount = _cfg.aniFrameCount; _aniFrameInterval = _cfg.aniFrameInterval; _curAniTimeCounter = 0; _curAniIndex = 0; }
public override void Clear() { if (_appearEffect != null) { _appearEffect.FinishEffect(); _appearEffect = null; } SetOrderInLayer(0); if (_curAlpha != 1 || !_isOriginalColor) { _spRenderer.color = new Color(1, 1, 1, 1); } if (_scaleX != 1 || _scaleY != 1) { _trans.localScale = Vector3.one; } _spRenderer = null; _cfg = null; base.Clear(); }