Bullect.cs(bullet)——子弹基类

该脚本定义了一个带有对象池支持、可命中怪物或物品的子弹基类,子类可重写移动逻辑、特效或销毁行为。主要服务于塔防游戏中标准直线追踪型子弹。

声明

  • 目标物体的Transform( HideInInspector)子弹当前锁定的目标物体的 Transform

  • 子弹移动速度。

  • 子弹攻击力。

  • 所属塔的ID。(用于资源路径拼接)

  • 塔的等级。(用于加载对应等级的子弹模型和特效)

方法

protected virtual void Update()

游戏结束检查:

GameController.Instance.gameover,若游戏结束则调用DestoryBullect(),销毁子弹。

游戏暂停检查:

GameController.Instance.isPause,若暂停则return,子弹停止移动。

目标有效性检查:

检查目标是否为空或未激活(!targetTrans.gameObject.activeSelf),若无效则销毁。

子弹移动与转向:

根据目标标签(是"Item")计算移动位置:使用Vector3.Lerp,使子弹向目标移动并朝向目标。

  • Vector3.Lerp(start, target, speed * Time.deltaTime / distance)

调用 transform.LookAt 使子弹朝向目标

强制修正朝向

如果子弹的欧拉角y==0,则设置y 为 90(2D视角调整)。

核心方法

protected virtual void DestoryBullect()

销毁子弹的方法

  • 清空 targetTrans 引用。

  • 调用 GameController.Instance.PushGameObjectToFactory() 将子弹放回对象池。

  • 路径格式:"Tower/ID{塔id}/Bullect/{塔等级}"

protected virtual void CreateEffect()

创建击中特效的方法

  • 从对象池获取击中特效:GameController.Instance.GetGameObjectResource("Tower/ID{塔id}/Effect/{等级}")

  • 将特效位置设置为子弹当前位置(特效自动播放,无需额外代码)。

protected virtual void OnTriggerEnter2D(Collider2D collision)

2D触发检测的方法

触发条件:子弹进入 2D 触发器。
逻辑流程:

  1. 判断碰撞体标签是否为 "Monster""Item",且自身激活。

  2. 如果目标位置无效,或(碰撞体的标签是 "Item"GameController.Instance.targetTrans 等于null)→ 提前返回。

  3. 如果碰撞体是怪物,或(碰撞体的标签是 "Item"GameController.Instance.targetTrans 等于该碰撞体)→

· 向碰撞体发送 "TakeDamage" 消息,参数为 attackValue
· 调用 CreateEffect() 生成特效。
· 调用 DestoryBullect() 销毁子弹。

依赖的外部类

  • GameController:单例,提供全局状态(gameOver, isPause, gameSpeed)以及资源管理方法(GetGameObjectResource, PushGameObjectToFactory)。

  • targetTrans 指向的物体必须响应 TakeDamage 消息(通常为怪物类或可破坏物品类)。


拼写错误:类名 Bulle``c``t、方法 DestoryBullect 应为 Bullet / DestroyBullet

层次依赖 :资源路径硬编码为 "Tower/ID.../Bullect/...",需确保对象池中对应路径存在。

相关推荐
淡海水12 小时前
12-01-YooAsset工程化-Unity资源管理规范
unity·c#·游戏引擎·yooasset
BuHuaX18 小时前
U3D抖微小游戏开发流程 (一)
unity·c#·游戏引擎·游戏策划
_ZHOURUI_H_1 天前
Unity MyFramework 用法说明(二十三):使用 PrefabPoolManager 复用预设实例
unity·游戏引擎·游戏开发·游戏ui·手游开发
冰凌糕1 天前
Unity3D Shader 法线与基础光照
unity
新手unity自用笔记1 天前
unity网络基础_1
网络·unity·游戏引擎
谢斯2 天前
[vscode] 使用unity打开vscode的取消.csproj的显示
ide·vscode·unity
魔术师Dix2 天前
StartGame:Unity TDD 外部工程指南
学习·游戏·unity·c#·测试驱动开发
hsw8157739433 天前
第10章 软件架构的演化和维护 — 系统架构设计师
unity·系统架构·游戏引擎
tealcwu3 天前
【尝鲜】Unity 6.7alpha版本测试
unity·游戏引擎