Browse Source

解决多重射击问题

181404010226 4 months ago
parent
commit
9e2f551d0b

+ 1 - 1
assets/resources/data/skill.json

@@ -65,7 +65,7 @@
       "maxLevel": 5,
       "currentLevel": 0,
       "levelEffects": {
-        "multiShotChance":  [0.1, 0.2, 0.3, 0.4, 0.5, 0.6],
+        "multiShotChance":  [0,0.1, 0.2, 0.3, 0.4, 0.5],
         "descriptions": [
           "攻击有10%的几率射出两发子弹。",
           "攻击有20%的几率射出两发子弹。",

+ 7 - 23
assets/scripts/CombatSystem/BallController.ts

@@ -1173,7 +1173,7 @@ export class BallController extends Component {
             
             // 判断是否为多发子弹(散射/连发等)
             const countCfg = finalConfig.bulletConfig.count;
-            const isMultiShot = countCfg && countCfg.type !== 'single' && countCfg.amount > 1;
+            // const isMultiShot = countCfg && countCfg.type !== 'single' && countCfg.amount > 1;
 
             // 查找GameArea(子弹统一添加到此节点)
             const gameArea = find('Canvas/GameLevelUI/GameArea');
@@ -1192,28 +1192,12 @@ export class BallController extends Component {
                 return; // 如果没有可用的预制体则直接退出
             }
 
-            if (isMultiShot) {
-                // 使用批量创建逻辑
-                const bullets = WeaponBullet.createBullets(initData, prefabToUse as any);
-                bullets.forEach(b => {
-                    gameArea.addChild(b);
-                });
-            } else {
-                // 单发逻辑(沿用原流程)
-                const bullet = instantiate(prefabToUse);
-                if (!bullet) {
-                    return;
-                }
-
-                gameArea.addChild(bullet);
-
-                let weaponBullet = bullet.getComponent(WeaponBullet);
-                if (!weaponBullet) {
-                    weaponBullet = bullet.addComponent(WeaponBullet);
-                }
-
-                weaponBullet.init(initData);
-            }
+            // 使用批量创建逻辑
+            const bullets = WeaponBullet.createBullets(initData, prefabToUse as any);
+            bullets.forEach(b => {
+                gameArea.addChild(b);
+            });
+            
             
         }).catch(error => {
             // 武器配置加载失败

+ 7 - 6
assets/scripts/CombatSystem/BulletEffects/BulletCount.ts

@@ -279,7 +279,7 @@ export class BulletCount extends Component {
      * @param originalConfig 原始武器配置
      * @returns 应用技能后的武器配置
      */
-    private static applyMultiShotSkill(originalConfig: any): any {
+    public static applyMultiShotSkill(originalConfig: any): any {
         // 获取SkillManager实例
         const skillManager = SkillManager.getInstance();
         if (!skillManager) {
@@ -287,15 +287,16 @@ export class BulletCount extends Component {
         }
         // 获取多重射击技能等级
         const multiShotSkillLevel = skillManager.getSkillLevel('multi_shots');
+        console.log("技能等级",multiShotSkillLevel);
         if (multiShotSkillLevel <= 0) {
             return originalConfig; // 技能等级为0,返回原配置
         }
-        // 检查是否为单发武器(amount = 1 且 type = 'single')
+        // // 检查是否为单发武器(amount = 1 且 type = 'single')
         const bulletCountConfig = originalConfig.bulletConfig.count;
-        const isSingleShotWeapon = bulletCountConfig.type === 'single' && bulletCountConfig.amount === 1;
-        if (!isSingleShotWeapon) {
-            return originalConfig; // 多发武器不受影响,返回原配置
-        }
+        // const isSingleShotWeapon = bulletCountConfig.type === 'single' && bulletCountConfig.amount === 1;
+        // if (!isSingleShotWeapon) {
+        //     return originalConfig; // 多发武器不受影响,返回原配置
+        // }
         // 计算多重射击几率
         const baseMultiShotChance = 0; // 基础几率为0
         const multiShotChance = SkillManager.calculateMultiShotChance(baseMultiShotChance, multiShotSkillLevel);

+ 3 - 2
assets/scripts/CombatSystem/SkillSelection/SkillManager.ts

@@ -194,8 +194,8 @@ export class SkillManager extends Component {
      */
     public static calculateMultiShotBulletCount(baseBulletCount: number, skillLevel: number): number {
         if (skillLevel <= 0) return baseBulletCount;
-        // 这个方法保持原有逻辑,因为配置中没有对应的子弹数量配置
-        return baseBulletCount + Math.floor(skillLevel / 2);
+        // 多重射击固定为两发子弹
+        return 2;
     }
 
     /**
@@ -235,6 +235,7 @@ export class SkillManager extends Component {
      * 检查是否触发多重射击
      */
     public static rollMultiShot(multiShotChance: number): boolean {
+        console.log("触发概率",multiShotChance);
         return Math.random() < multiShotChance;
     }
 

+ 5 - 2
assets/scripts/CombatSystem/WeaponBullet.ts

@@ -117,11 +117,14 @@ export class WeaponBullet extends Component {
         }
 
         // 获取武器配置
-        const config = initData.weaponConfig || WeaponBullet.getWeaponConfig(initData.weaponId);
-        if (!config) {
+        const originalConfig = initData.weaponConfig || WeaponBullet.getWeaponConfig(initData.weaponId);
+        if (!originalConfig) {
             return [];
         }
         
+        // === 应用多重射击技能 ===
+        const config = BulletCount.applyMultiShotSkill(originalConfig);
+        
         // === 计算基础发射方向 ===
         let direction: Vec3;
         if (initData.direction) {