TowerPersonalProperty.cs
TowerPersonalProperty是塔的标准化攻击组件攻击节奏CD管理子弹发射从对象池获取并配置视觉表现旋转、动画、音效、特效经济交互升级/出售价格计算与金币变更它并不直接处理寻敌而是依赖外部为其设置targetTrans。字段声明1. 值属性可配置或动态字段类型修饰符说明towerLevelintpublic当前塔的等级1级、2级...影响子弹等级和攻击CD计算timeValfloatprotected攻击计时器累加时间达到攻击CD时触发攻击attackCDfloatpublic攻击间隔秒受游戏速度影响sellPriceint[HideInInspector] public出售价格隐藏但仍为公有由price / 2计算upLevelPriceint[HideInInspector] public升级价格隐藏由price * 1.5计算priceintpublic塔的初始购买价格2. 资源字段类型修饰符说明bullectGoGameObjectprotected当前发射的子弹实例引用从对象池取出后暂存3. 引用字段类型修饰符说明towerTower[HideInInspector] public指向控制自己的Tower组件用于调用DestoryTower()targetTransTransformpublic当前锁定的攻击目标怪物或物品的 TransformanimatorAnimatorpublic塔的动画控制器播放 Attack 动画gameControllerGameControllerprivate全局游戏控制器单例引用生命周期方法protected virtual void Start()初始化当前脚本所挂载的物体塔的初始状态获取全局控制器引用gameController GameController.Instance;(游戏核心逻辑的单例方便后续访问全局资源)预计算价格升级价格upLevelPrice (int)(price * 1.5f);强转取整计算出售价格sellPrice price / 2;动画效果查找子物体 tower 上的Animator组件。初始化timeVal attackCD使塔一开始就能立即攻击无需等待首个CD。protected virtual void Update()状态检查若游戏暂停、无目标、游戏结束 → 直接返回。目标有效性若目标物体未激活 → 清空targetTrans并返回攻击逻辑a) 如果timeVal attackCD / gameController.gameSpeed攻击CD受游戏速度缩放timeVal 0;调用Attack()b) 否则累加timeVal Time.deltaTime。if (timeValattackCD/gameController.gameSpeed) { timeVal 0; Attack(); } else { timeVal Time.deltaTime; }旋转逻辑a) 若目标是Item朝向目标位置 Z轴偏移3。否则直接朝向目标位置。使用transform.LookAt。b) 若旋转后 Y 轴为 0则加上 (0,90,0) 修正可能是模型默认朝向问题。其他方法public void Init()清空tower引用可能用于对象池复用时的重置。未被引用public void SellTower()该脚本是一个出售塔的方法。简单说把塔卖掉换成金币并移除塔。当玩家点击出售按钮时调用会播放出售音效。给玩家增加出售塔所得的金钱sellPrice。在塔的位置生成一个“建造/拆除”特效。调用DestoryTower()销毁当前塔包含其游戏对象。public void SellTower() { gameController.PlayEffectMusic(NormalMordel/Tower/TowerSell); gameController.ChangeCoin(sellPrice); // 加钱 GameObject itemGo gameController.GetGameObjectResource(BuildEffect); itemGo.transform.position transform.position; DestoryTower(); // 销毁塔 }public void UpLevelTower()该脚本是一个塔升级的方法。简单说支付升级费用销毁当前低等级塔后续由外部逻辑生成一个更高等级的塔。当玩家点击升级按钮时调用会播放升级音效。从玩家金币中扣除升级所需费用upLevelPrice。在塔的位置生成一个“升级”特效。调用DestoryTower()销毁当前塔通过销毁重建的方式实现升级。可重写方法protected virtual void DestoryTower ()调用tower.DestoryTower()让Tower组件执行真正的销毁/回池逻辑。protected virtual void Attack()若目标为空直接返回。播放动画animator.Play(Attack)。播放攻击音效路径NormalMordel/Tower/Attack/ tower.towerID.ToString()。从对象池获取子弹gameController.GetGameObjectResource(Tower/IDtower.towerID/Bullect/towerLevel)。设置子弹位置为塔的位置。设置子弹的targetTrans为当前锁定的目标。与其它脚本的关联关联脚本关系说明Tower双向引用TowerPersonalProperty持有tower引用用于调用DestoryTower()Tower脚本通常会创建/持有该组件GameController单向依赖获取单例调用ChangeCoin、PlayEffectMusic、GetGameObjectResource等方法Bullect及其子类创建并使用在Attack()中实例化子弹并设置其targetTrans子弹命中后回池对象池BaseFactory间接使用通过GameController.GetGameObjectResource获取子弹、特效等预制体实例动画系统Animator控制动画播放 Attack 状态
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2633543.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!