当前位置: 首页 > wzjs >正文

做家具的网站有哪些免费域名网站的

做家具的网站有哪些,免费域名网站的,企查查企业信息,合肥建设网站制作哪个好文章目录 🎮 策略模式(Strategy Pattern)深度解析一、模式本质与核心价值二、经典UML结构三、Unity实战代码(动态伤害计算系统)1. 定义策略接口与上下文2. 实现具体策略3. 客户端使用 四、模式进阶技巧1. 策略组合2. 策…

文章目录

      • 🎮 策略模式(Strategy Pattern)深度解析
        • 一、模式本质与核心价值
        • 二、经典UML结构
        • 三、Unity实战代码(动态伤害计算系统)
          • 1. 定义策略接口与上下文
          • 2. 实现具体策略
          • 3. 客户端使用
        • 四、模式进阶技巧
          • 1. 策略组合
          • 2. 策略工厂
          • 3. 数据驱动策略
        • 五、游戏开发典型应用场景
        • 六、性能优化策略
        • 七、模式对比与选择
        • 八、最佳实践原则
        • 九、常见问题解决方案

🎮 策略模式(Strategy Pattern)深度解析

——以Unity实现灵活AI行为动态伤害计算为核心案例


一、模式本质与核心价值

核心目标
定义算法族,封装每个算法,使它们可互换
运行时动态切换算法,避免使用多重条件判断
符合开闭原则,易于扩展新算法

关键术语

  • Strategy(策略接口):定义算法族的通用接口
  • ConcreteStrategy(具体策略):实现具体算法逻辑
  • Context(上下文):持有策略引用,负责调用算法

数学表达
设算法集合S = {s₁, s₂, …, sₙ},上下文C满足:
C.Algorithm = sᵢ → C.Execute() = sᵢ.Process()


二、经典UML结构
«interface»
IDamageStrategy
+CalculateDamage() : float
PhysicalDamage
+CalculateDamage()
MagicDamage
+CalculateDamage()
CritDamage
+CalculateDamage()
Weapon
-damageStrategy: IDamageStrategy
+Attack()

三、Unity实战代码(动态伤害计算系统)
1. 定义策略接口与上下文
public interface IDamageStrategy {float CalculateDamage(Character attacker, Character target);
}public class Weapon : MonoBehaviour {private IDamageStrategy _damageStrategy;public void SetStrategy(IDamageStrategy strategy) {_damageStrategy = strategy;}public void Attack(Character attacker, Character target) {float damage = _damageStrategy.CalculateDamage(attacker, target);target.TakeDamage(damage);}
}
2. 实现具体策略
// 物理伤害策略
public class PhysicalDamage : IDamageStrategy {public float CalculateDamage(Character attacker, Character target) {return attacker.Strength * 2 - target.Defense;}
}// 魔法伤害策略
public class MagicDamage : IDamageStrategy {public float CalculateDamage(Character attacker, Character target) {return attacker.Intelligence * 3 - target.MagicResist;}
}// 暴击伤害策略
public class CriticalStrike : IDamageStrategy {[SerializeField] private float _critChance = 0.3f;public float CalculateDamage(Character attacker, Character target) {float baseDamage = attacker.Strength * 1.5f;return Random.value < _critChance ? baseDamage * 2 : baseDamage;}
}
3. 客户端使用
public class PlayerCombat : MonoBehaviour {[SerializeField] private Weapon _sword;void Update() {if(Input.GetKeyDown(KeyCode.Alpha1)) {_sword.SetStrategy(new PhysicalDamage());}if(Input.GetKeyDown(KeyCode.Alpha2)) {_sword.SetStrategy(new MagicDamage());}if(Input.GetMouseButtonDown(0)) {Character enemy = GetTargetEnemy();_sword.Attack(GetComponent<Character>(), enemy);}}
}

四、模式进阶技巧
1. 策略组合
public class CompositeStrategy : IDamageStrategy {private List<IDamageStrategy> _strategies = new();public void AddStrategy(IDamageStrategy strategy) {_strategies.Add(strategy);}public float CalculateDamage(Character attacker, Character target) {return _strategies.Sum(s => s.CalculateDamage(attacker, target));}
}
2. 策略工厂
public class DamageStrategyFactory {public IDamageStrategy Create(WeaponType type) {return type switch {WeaponType.Sword => new PhysicalDamage(),WeaponType.Staff => new MagicDamage(),WeaponType.Dagger => new CriticalStrike(),_ => throw new ArgumentException()};}
}
3. 数据驱动策略
[CreateAssetMenu]
public class DamageConfig : ScriptableObject {public AnimationCurve DamageCurve;public GameObject ImpactEffect;
}public class ConfigurableDamage : IDamageStrategy {private DamageConfig _config;public float CalculateDamage(Character attacker, Character target) {float levelFactor = _config.DamageCurve.Evaluate(attacker.Level);return attacker.BaseDamage * levelFactor;}
}

五、游戏开发典型应用场景
  1. AI行为系统

    public class NPCController {private IMovementStrategy _movementStrategy;public void SetMovementStrategy(IMovementStrategy strategy) {_movementStrategy = strategy;}void Update() {_movementStrategy.Move(transform);}
    }
    
  2. 技能效果系统

    public class SkillSystem {private ISkillEffect _effect;public void CastSkill() {_effect.ApplyEffect(target);}
    }
    
  3. 成就解锁条件

    public class AchievementCondition {private IUnlockStrategy _strategy;public bool CheckUnlock(Player player) {return _strategy.IsUnlocked(player);}
    }
    
  4. 物理材质系统

    public class SurfaceResponse {private IBounceStrategy _bounceStrategy;public Vector3 CalculateBounce(Vector3 input) {return _bounceStrategy.CalculateBounce(input);}
    }
    

六、性能优化策略
策略实现方式适用场景
策略缓存对象池管理策略实例高频策略切换
预编译策略使用C#委托或表达式树高性能计算场景
数据导向设计策略参数结构体化大量相似策略
异步加载按需加载策略资源复杂策略配置

七、模式对比与选择
维度策略模式状态模式
关注点算法实现状态转换
切换机制主动切换自动转换
对象关系平行策略状态链
典型应用伤害计算AI状态机

八、最佳实践原则
  1. 接口最小化:策略接口保持单一职责
  2. 无状态策略:尽量设计无状态的策略类
  3. 防御性编程
    public void SetStrategy(IDamageStrategy strategy) {_damageStrategy = strategy ?? throw new ArgumentNullException();
    }
    
  4. 策略验证
    public bool IsStrategyValid() {return _damageStrategy != null && _damageStrategy.IsAvailable();
    }
    

九、常见问题解决方案

Q1:如何处理策略间共享数据?
→ 使用上下文传递参数

public interface IStrategy {void Execute(SharedData context);
}public class SharedData {public Character Attacker;public Character Target;public float EnvironmentFactor;
}

Q2:如何实现跨策略配置?
→ 使用策略配置中心

public class StrategyConfig : MonoBehaviour {[SerializeField] private StrategyMapping[] _mappings;public IStrategy GetStrategy(string key) {return _mappings.FirstOrDefault(m => m.Key == key)?.Strategy;}
}[System.Serializable]
public class StrategyMapping {public string Key;public IStrategy Strategy;
}

Q3:如何调试策略执行流程?
→ 实现策略日志代理

public class LoggingStrategyProxy : IStrategy {private IStrategy _wrapped;public void Execute() {Debug.Log($"开始执行策略:{_wrapped.GetType().Name}");_wrapped.Execute();Debug.Log("策略执行完成");}
}

上一篇 【行为型之状态模式】深度剖析——Unity角色行为控制与AI决策的终极解决方案
下一篇 【行为型之模板方法模式】游戏开发实战——Unity标准化流程与可扩展架构的核心实现


文章转载自:

http://0qTrBrf2.fkcjs.cn
http://3tz22dY5.fkcjs.cn
http://FSuiP6NG.fkcjs.cn
http://Liy5uboX.fkcjs.cn
http://OvzQLTc7.fkcjs.cn
http://0pJzcWEn.fkcjs.cn
http://AlbPPZE2.fkcjs.cn
http://dbpG9q42.fkcjs.cn
http://YQV4RoUa.fkcjs.cn
http://frYcCNtU.fkcjs.cn
http://xmmL67Ry.fkcjs.cn
http://9SSVMluK.fkcjs.cn
http://cNySaAYh.fkcjs.cn
http://l5Dd7eTM.fkcjs.cn
http://jMPtdoN9.fkcjs.cn
http://oyGLNLW8.fkcjs.cn
http://0fOfwm57.fkcjs.cn
http://8KQ5chmY.fkcjs.cn
http://7Evur7sB.fkcjs.cn
http://qf9LL2XT.fkcjs.cn
http://bIPf5LNB.fkcjs.cn
http://2mKsPcPF.fkcjs.cn
http://YArd43Re.fkcjs.cn
http://DAnK3CN9.fkcjs.cn
http://BL5DwTu8.fkcjs.cn
http://NbyQjD5W.fkcjs.cn
http://Nd5pILnt.fkcjs.cn
http://5MQ3hep7.fkcjs.cn
http://ffDPYieC.fkcjs.cn
http://cBz2hQXt.fkcjs.cn
http://www.dtcms.com/wzjs/775799.html

相关文章:

  • 江苏电信网站备案seo网络推广机构
  • 网站做跳转对排名有影响吗石家庄网络推广
  • 如何给网站添加cnzz俄乌今天最新军事动态
  • 无极网站建设定制wordpress 文章编辑 插件
  • google网站建设代理湖北省利川市建设局网站
  • 女士服装定制网站在哪里可以兼职
  • 视频制作素材免费网站在线编辑图片软件
  • 贵州成品网站网站建设ftp软件有哪些
  • 做网站备案是什么意思网络公司要求做网站工商网监
  • 厦门专业的网站建设深圳市建设局工程交易中心网站
  • 深圳最新消息今天新增百度seo关键词排名查询
  • 网站布局软件wordpress mnews主题
  • 网站开发如何共用菜单栏交易平台网站模板
  • 校园网站建设计划上海网站建设公司排名
  • 电子商务网站设计原理书籍中铁建设集团门户密码
  • js网站跳转代码中信建设有限责任公司经济性质
  • 网站设计师培训图片比较好的购物网站
  • 天津做网站的公网站开发具体问题
  • 网站开发图比较酷炫的企业网站
  • 通过页面wordpress文件位置淄博网站制作升级优化
  • 苏州基础网站建设友情链接有什么用
  • 网站开发及维护是什么网站盒子怎么做
  • 南平公司做网站二手房中介网站建设
  • 网站关键词优化建议苏州制作企业网站的
  • 福州seo推广优化贵阳网站关键字优化
  • 购物网站源码下载网站建设会计处理
  • 买卖域名哪个网站好网站地址格式
  • 松岗网站的建设wordpress自适应方法
  • 大公司网站搭建公司wordpress 上传文件 插件
  • 如何用源代码做网站哈尔滨建设局网站首页