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/...",需确保对象池中对应路径存在。

相关推荐
mxwin18 小时前
unity shader中 ddx ddy是什么
unity·游戏引擎·shader
郝学胜-神的一滴20 小时前
[简化版 GAMES 101] 计算机图形学 08:三角形光栅化上
c++·unity·游戏引擎·godot·图形渲染·opengl·unreal
nnsix21 小时前
Unity ILRuntime 笔记
unity·游戏引擎
nnsix1 天前
Unity API 兼容的 .NET Standard 2.1 和 .NET Framework 区别
unity·游戏引擎·.net
mxwin1 天前
Unity Shader 制作半透明物体 使用多Pass提前写入深度的方式 避免穿模
unity·游戏引擎
nnsix1 天前
Unity HybridCLR 笔记
笔记·unity·游戏引擎
nnsix1 天前
Unity Addressables 笔记
unity·游戏引擎
RReality1 天前
【Unity Shader URP】视差贴图 实战教程
ui·平面·unity·游戏引擎·图形渲染·贴图
小清兔2 天前
Addressable的设置打包流程
笔记·游戏·unity·c#