fix: 修复技能碰撞检测和英雄prefab配置问题
修复技能碰撞检测逻辑,确保正确应用伤害并过滤同组碰撞 调整多个英雄prefab的_enabled状态和碰撞组配置 优化技能视图的日志输出和伤害应用逻辑 移除不必要的prefab组件和调试日志
This commit is contained in:
@@ -51,7 +51,7 @@ export class HeroViewComp extends CCComp {
|
||||
const collider = this.node.getComponent(BoxCollider2D);
|
||||
this.scheduleOnce(()=>{
|
||||
if (collider) collider.enabled = true; // 先禁
|
||||
},1)
|
||||
},0.1)
|
||||
// let anm = this.node.getChildByName("anm")
|
||||
// anm.setScale(anm.scale.x*0.8,anm.scale.y*0.8);
|
||||
}
|
||||
|
||||
@@ -37,7 +37,6 @@ export class Monster extends ecs.Entity {
|
||||
/** 加载角色 */
|
||||
load(pos: Vec3 = Vec3.ZERO,scale:number = 1,uuid:number=1001,lv:number=1,monType:MonType=MonType.NORMAL, buffs: BuffConf[] = [],is_call=false) {
|
||||
scale=-1
|
||||
let box_group=BoxSet.MONSTER
|
||||
var scene = smc.map.MapView.scene;
|
||||
var path = "game/heros/"+HeroInfo[uuid].path;
|
||||
var prefab: Prefab = oops.res.get(path, Prefab)!;
|
||||
@@ -55,7 +54,7 @@ export class Monster extends ecs.Entity {
|
||||
let hero = HeroInfo[uuid]; // 共用英雄数据
|
||||
// 设置 View 层属性(表现相关)
|
||||
view.scale = scale;
|
||||
view.box_group = box_group;
|
||||
view.box_group = BoxSet.MONSTER;
|
||||
|
||||
// 设置 Model 层属性(数据相关)
|
||||
model.hero_uuid = uuid;
|
||||
|
||||
@@ -166,6 +166,8 @@ export class SACastSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
||||
|
||||
// 这里可以调用 SkillConComp 的目标选择逻辑
|
||||
// 暂时返回默认位置
|
||||
if (caster==null ) return
|
||||
if(caster.ent == null) return
|
||||
const heroAttrs = caster.ent.get(HeroAttrsComp);
|
||||
const fac = heroAttrs?.fac ?? 0;
|
||||
const defaultX = fac === 0 ? 400 : -400;
|
||||
|
||||
@@ -38,7 +38,6 @@ export class SkillView extends CCComp {
|
||||
if(collider) {
|
||||
collider.group = this.group;
|
||||
collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);
|
||||
console.log(`[skillView] ${this.sData.caster.ent.get(HeroAttrsComp).hero_name}的 ${this.SConf.name} 碰撞组 ${this.group}`)
|
||||
}
|
||||
if(this.node.getComponent(Animation)){
|
||||
let anim = this.node.getComponent(Animation);
|
||||
@@ -48,18 +47,16 @@ export class SkillView extends CCComp {
|
||||
|
||||
}
|
||||
onBeginContact (seCol: Collider2D, oCol: Collider2D) {
|
||||
console.log(`[skillView] ${this.sData.caster.ent.get(HeroAttrsComp).hero_name}的 ${this.SConf.name} 碰撞了 ${oCol.getComponent(HeroViewComp).ent.get(HeroAttrsComp).hero_name}`);
|
||||
if(oCol.group==this.group) return
|
||||
if (!this.SConf) return;
|
||||
if(this.SConf.EType!=EType.collision) return
|
||||
let target = oCol.getComponent(HeroViewComp)
|
||||
if(target == null) return;
|
||||
let model=target.ent.get(HeroAttrsComp)
|
||||
if(!model) return
|
||||
if(model.is_dead) return
|
||||
if(oCol.group!=this.group){
|
||||
if(target == null) return;
|
||||
if (!this.SConf) return;
|
||||
if(this.SConf.EType==EType.collision){
|
||||
this.apply_damage(target)
|
||||
}
|
||||
}
|
||||
// console.log(`[skillView] 碰撞5[${this.sData.caster.box_group}][${this.sData.caster.ent.get(HeroAttrsComp).hero_name}][${this.sData.caster.ent.eid}]的[${this.group}] [${this.SConf.name}]碰撞了 [${oCol.group}][ ${oCol.getComponent(HeroViewComp).ent.get(HeroAttrsComp).hero_name}][${oCol.getComponent(HeroViewComp).ent.eid}]`);
|
||||
this.apply_damage(target)
|
||||
}
|
||||
|
||||
onAnimationFinished(){
|
||||
@@ -98,11 +95,9 @@ export class SkillView extends CCComp {
|
||||
const distanceB = Math.abs(this.node.position.x - b.node.position.x);
|
||||
return distanceA - distanceB;
|
||||
});
|
||||
|
||||
// 限制目标数量
|
||||
const maxTargets = Math.min(hitNum, IRTargets.length);
|
||||
const sTargets = IRTargets.slice(0, maxTargets);
|
||||
|
||||
sTargets.forEach(target => {
|
||||
this.apply_damage(target, false);
|
||||
});
|
||||
@@ -120,7 +115,8 @@ export class SkillView extends CCComp {
|
||||
apply_damage(target:HeroViewComp,is_range:boolean=false){
|
||||
if(target == null) return;
|
||||
if (!this.SConf) return;
|
||||
|
||||
console.log(`[skillView] 伤害 [${this.group}][${this.sData.caster.ent.get(HeroAttrsComp).hero_name}][${this.sData.caster.ent.eid}]的 [${this.SConf.name}]对 [${target.box_group}][ ${target.ent.get(HeroAttrsComp).hero_name}][${target.ent.eid}]`);
|
||||
// if(this.sData.hit_count > this.SConf.hit_num) return 不能超出 最大伤害数量
|
||||
// 使用伤害队列系统处理伤害
|
||||
DamageQueueHelper.addDamageToEntity(
|
||||
target.ent,
|
||||
@@ -128,12 +124,8 @@ export class SkillView extends CCComp {
|
||||
this.sData.caster,
|
||||
this.sData.s_uuid
|
||||
);
|
||||
|
||||
// console.log(`[SkillCom]: ${this.sData.caster.ent.get(HeroAttrsComp).hero_name}[${this.sData.caster.ent.get(HeroAttrsComp).fac}:${ this.sData.fac}:${target.ent.get(HeroAttrsComp).fac}] 对 ${target.ent.get(HeroAttrsComp).hero_name} 释放技能 ${this.SConf.name}`)
|
||||
|
||||
// 更新技能命中次数
|
||||
this.sData.hit_count++
|
||||
|
||||
// 检查技能是否应该销毁
|
||||
if( this.sData.hit_count>=(this.SConf.hit+ this.sData.Attrs[Attrs.PUNCTURE])&&(this.SConf.DTType!=DTType.range)&&(this.SConf.EType!=EType.animationEnd)&&(this.SConf.EType!=EType.timeEnd)) this.ent.destroy// 技能命中次数
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user