public abstract class WeaponMechanic : ScriptableObject {
public abstract void OnProjectileSpawn(Projectile proj);
public abstract void OnProjectileHit(Projectile proj, Enemy target);
}
// 示例:反弹机制
public class BounceMechanic : WeaponMechanic {
public int maxBounces = 3;
public override void OnProjectileHit(Projectile proj, Enemy target) {
proj.bounceCount++;
\text{if} (proj.bounceCount < maxBounces) {
Enemy nextTarget = FindNearestEnemy(proj.transform.position);
proj.Redirect(nextTarget.transform.position);
} else {
proj.Destroy();
}
}
}
// 示例:分裂机制
public class SplitMechanic : WeaponMechanic {
public int splitCount = 3;
public override void OnProjectileHit(Projectile proj, Enemy target) {
for (int i = 0; i < splitCount; i++) {
float angle = (360f / splitCount) * i;
SpawnProjectile(proj.transform.position, angle);
}
proj.Destroy();
}
}