跳转至

GFProjectileEmitter3D

API Reference / Combat / 类索引

  • 路径:addons/gf/extensions/combat/projectiles/gf_projectile_emitter_3d.gd
  • 模块:Combat
  • 继承:Node3D
  • API:public
  • 类别:运行时句柄 (runtime_handle)
  • 首次版本:3.17.0

通用 3D 发射体生成节点。 负责按场景目录和生成点模式实例化发射体,并把本次发射上下文交给 发射体的 launch()。它不解释伤害、阵营、弹药、冷却或特效规则。

成员概览

类型 名称 签名
信号 projectile_emitted signal projectile_emitted(projectile: Node, projectile_context: Dictionary)
信号 projectile_emit_failed signal projectile_emit_failed(reason: StringName, details: Dictionary)
属性 projectile_scene var projectile_scene: PackedScene = null
属性 projectile_catalog var projectile_catalog: GFProjectileCatalog = null
属性 default_projectile_id var default_projectile_id: StringName = &""
属性 spawn_pattern var spawn_pattern: GFProjectileSpawnPattern3D = null
属性 default_context var default_context: Dictionary = {}
属性 spawn_parent_path var spawn_parent_path: NodePath = NodePath("")
属性 launch_after_spawn var launch_after_spawn: bool = true
属性 disable_auto_launch_before_add var disable_auto_launch_before_add: bool = true
属性 use_object_pool var use_object_pool: bool = false
属性 release_pooled_projectile_on_finish var release_pooled_projectile_on_finish: bool = true
属性 object_pool_utility var object_pool_utility: GFObjectPoolUtility = null
方法 emit_projectile func emit_projectile(projectile_context: Dictionary = {}, projectile_id: StringName = &"") -> Node:
方法 emit_projectiles func emit_projectiles( projectile_context: Dictionary = {}, projectile_id: StringName = &"", emit_count: int = -1 ) -> Array[Node]:
方法 resolve_projectile_scene func resolve_projectile_scene(projectile_id: StringName = &"") -> PackedScene:
方法 resolve_spawn_parent func resolve_spawn_parent() -> Node:
方法 prewarm_projectiles func prewarm_projectiles(count: int, projectile_id: StringName = &"") -> bool:

信号

projectile_emitted

  • API:public
signal projectile_emitted(projectile: Node, projectile_context: Dictionary)

发射体已生成。

参数:

名称 说明
projectile 生成的发射体节点。
projectile_context 本次发射上下文。

结构:

  • projectile_context: Dictionary,本次发射上下文副本,包含默认上下文、调用方上下文和 spawn 信息。

projectile_emit_failed

  • API:public
signal projectile_emit_failed(reason: StringName, details: Dictionary)

发射失败时发出。

参数:

名称 说明
reason 失败原因。
details 失败细节。

结构:

  • details: Dictionary,失败上下文,通常包含 projectile_id、spawn_index 等诊断字段。

属性

projectile_scene

  • API:public
var projectile_scene: PackedScene = null

默认发射体场景。未使用目录或目录缺少 ID 时使用。

projectile_catalog

  • API:public
var projectile_catalog: GFProjectileCatalog = null

可选发射体目录。

default_projectile_id

  • API:public
var default_projectile_id: StringName = &""

默认目录 ID。

spawn_pattern

  • API:public
var spawn_pattern: GFProjectileSpawnPattern3D = null

3D 发射点模式。为空时使用发射器自身全局变换。

default_context

  • API:public
var default_context: Dictionary = {}

默认上下文。每次发射会深拷贝后再合并调用方上下文。

结构:

  • default_context: Dictionary,默认发射上下文;每次发射会深拷贝后合并调用方上下文。

spawn_parent_path

  • API:public
var spawn_parent_path: NodePath = NodePath("")

可选生成父节点路径。为空时优先使用发射器父节点。

launch_after_spawn

  • API:public
var launch_after_spawn: bool = true

是否在生成后调用发射体的 launch(context)。

disable_auto_launch_before_add

  • API:public
var disable_auto_launch_before_add: bool = true

生成前是否关闭常见发射体的 auto_launch_on_ready,避免进入树时使用空上下文启动。

use_object_pool

  • API:public
var use_object_pool: bool = false

是否使用 GFObjectPoolUtility 获取节点。池化场景应把 projectile 的 auto_launch_on_ready 设为 false。

release_pooled_projectile_on_finish

  • API:public
var release_pooled_projectile_on_finish: bool = true

使用对象池时,是否在 projectile_finished 后自动归还节点。

object_pool_utility

  • API:public
var object_pool_utility: GFObjectPoolUtility = null

可选对象池工具。为空时会从注入架构或最近的 GFNodeContext 查询。

方法

emit_projectile

  • API:public
func emit_projectile(projectile_context: Dictionary = {}, projectile_id: StringName = &"") -> Node:

发射单个发射体。

参数:

名称 说明
projectile_context 本次发射上下文。
projectile_id 可选目录 ID;为空时使用 default_projectile_id。

返回:生成的发射体节点;失败时返回 null。

结构:

  • projectile_context: Dictionary,本次发射上下文;会与 default_context 合并后传给发射体。

emit_projectiles

  • API:public
func emit_projectiles( projectile_context: Dictionary = {}, projectile_id: StringName = &"", emit_count: int = -1 ) -> Array[Node]:

按当前模式发射一批发射体。

参数:

名称 说明
projectile_context 本次发射上下文。
projectile_id 可选目录 ID;为空时使用 default_projectile_id。
emit_count 请求生成数量;小于等于 0 时由 spawn_pattern 决定。

返回:成功生成的发射体节点列表。

结构:

  • projectile_context: Dictionary,本次发射上下文;会与 default_context 合并后传给每个发射体。

resolve_projectile_scene

  • API:public
func resolve_projectile_scene(projectile_id: StringName = &"") -> PackedScene:

解析当前要使用的发射体场景。

参数:

名称 说明
projectile_id 可选目录 ID。

返回:找到时返回 PackedScene,否则返回 null。

resolve_spawn_parent

  • API:public
func resolve_spawn_parent() -> Node:

解析发射体生成父节点。

返回:有效父节点;找不到时返回 null。

prewarm_projectiles

  • API:public
func prewarm_projectiles(count: int, projectile_id: StringName = &"") -> bool:

预热对象池。

参数:

名称 说明
count 预热数量。
projectile_id 可选目录 ID。

返回:预热请求被接受时返回 true。