Esempio n. 1
0
    /// <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();
 }