Robloxのコンバットゲーム向けヒットエフェクト
Roblox向けの無料ヒットエフェクト:クリティカルヒット、パリィ、剣のぶつかり合い、盾へのヒット、パンチ、煙の噴き出しをフリップブックで用意。ヒットした位置に各エフェクトを配置するLuauと、ヒットを重く感じさせるコツも紹介します。
ヒットエフェクトが、攻撃が当たったことをプレイヤーに伝える時間は約10分の1秒です。武器がターゲットに当たった位置に表示され、どの角度からも見やすく、次のヒットまでに消える必要があります。フリップブックならこの3つをすべて満たせます。カメラに向いたパーティクルを接触点に配置し、一度再生して終了します。
すばやく伝わるヒットエフェクト
- 通常ヒットとクリティカルヒット: 刃による攻撃にはSlash Attack Hit、クリティカルにはCritical Hit(白熱した中心部に続いて火花の輪が広がります)、鈍器による一撃にはHit Smoke Puff。
- 防御: タイミングよく防御するにはPerfect Parry、武器同士がぶつかるときにはSword Clash Sparks、バブルシールドが攻撃を受けるときにはShield Impact。
- スタイル: アニメやカートゥーンのゲームにはAnime Hit SparksとCartoon Punch Impact。フラットな色使いとインクの輪郭線が特徴です。
- 大技とフィニッシャー: インパクトフレーム、叩きつけ、雷撃にはアニメVFXがあります。
攻撃が当たった位置にヒットエフェクトを配置する
多くのコンバットシステムでは、攻撃者の前方にボックスを置き、workspace:GetPartBoundsInBoxを使ってヒットを検出します。エフェクトには、2人のキャラクターの間でターゲットに近い位置を使います。カメラの位置にかかわらず、攻撃者に向いたターゲットの側面に表示されます。
-- Server: a simple hitbox in front of the attacker
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local hitFx = ReplicatedStorage:WaitForChild("HitFx") -- a RemoteEvent
local function swing(attacker: Model, damage: number)
local root = attacker:FindFirstChild("HumanoidRootPart") :: BasePart
local params = OverlapParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
params.FilterDescendantsInstances = { attacker }
local hit = {}
for _, part in workspace:GetPartBoundsInBox(root.CFrame * CFrame.new(0, 0, -3), Vector3.new(5, 5, 5), params) do
local target = part:FindFirstAncestorOfClass("Model")
local humanoid = target and target:FindFirstChildOfClass("Humanoid")
if humanoid and not hit[humanoid] and humanoid.Health > 0 then
hit[humanoid] = true
humanoid:TakeDamage(damage)
local targetRoot = target:FindFirstChild("HumanoidRootPart")
local at = if targetRoot then targetRoot.Position:Lerp(root.Position, 0.3) else part.Position
hitFx:FireAllClients(if damage >= 25 then "Critical Hit" else "Slash Attack Hit", at)
end
end
endHitFxを受け取るLocalScriptは、アニメVFXにあるものです。名前付きのエフェクトを位置に複製し、後で削除します。エフェクトをサーバー側で選ぶことで(ここでは強い攻撃にクリティカルを選択)、すべてのプレイヤーに同じエフェクトが表示されます。
ヒットを重く感じさせる
- ヒットストップ: ヒット時に攻撃者とターゲットのアニメーションを0.05 to 0.1 s停止させます。再生中の各AnimationTrackに
AdjustSpeed(0)を設定し、その後AdjustSpeed(1)に戻します。格闘ゲームで感じる重みの多くは、この停止から生まれます。 - カメラシェイク: 強い攻撃のときだけ攻撃者のカメラを短く揺らします。そうしないと、効果がなくなります。
- 同じ見た目を繰り返さない: ヒットごとにエミッターのRotationをランダムな角度に設定します。
NumberRange.new(math.random(0, 359))を使うと、ヒットが繰り返されてもスタンプのように見えません。 - 効果音も一緒に: ヒット音をエフェクトのパーツに入れて、そこで再生します。音とエフェクトが必ず同時に届きます。
ヒットエフェクトの設定
- 体の前に表示: ヒットエフェクトはターゲットに表示されるため、体に半分隠れます。ZOffsetを1または2に設定すると、画面上のサイズを変えずに、パーティクルをカメラに近い位置に描画できます。
- 発光: Slash Attack Hit、Critical Hit、Perfect Parry、Shield ImpactはGlowをオンにして書き出されます(LightEmission 1)。Hit Smoke PuffとSword Clash Sparksには煙があり、カートゥーン系のヒットにはインクの輪郭線があるため、Glowをオフにして書き出されます。オンにすると暗い部分が消えてしまいます。
- サイズ: ほとんどのヒットエフェクトは4 to 6 studsです。クリティカルは通常のヒットより少し大きくし、プレイヤーが見分けられるようにします。
- くっきりしたフレーム: 長さが0.75 s以下のエフェクトは、256 pxのフレームを使った4x4グリッドになります。Perfect ParryとSlash Attack Hitはこの設定で書き出されます。それ以外は、スタジオの書き出し設定で4x4を選べます。
フリップブックPNGは無料です。各エフェクトページのROBLOXボタンはアカウント不要で使えます。また、無料アカウントでもスタジオから、グリッドとテクスチャサイズを選んで書き出せます(1日3エフェクト)。エミッターを設定済みで再生用Scriptが付いた.rbxmxの準備済みモデルと、UI用のUIFlipbook.luauは、月額$7.99からのすべてのプランに含まれます。
ゲームに取り込む
すべての設定と、無料のPNGまたはすぐ使えるモデルという2つの導入方法は、Robloxセットアップページにあります。ジャンル別のエフェクトは無料のRoblox VFXをご覧ください。エフェクトは書き出し前にスタジオで変更できます。武器や属性ごとにヒットの色を変えられます。
よくある質問
ヒットエフェクトはどこに表示すればよいですか?
接触点、つまり攻撃者に向いたターゲットの側面です。2人のキャラクターの間でターゲットに近い位置にすれば、どのカメラ角度からも表示できます。
ヒットエフェクトがキャラクターの中に隠れるのはなぜですか?
パーティクルがターゲットの体の中央を通って描画されています。エミッターのZOffsetを1または2に上げて、体の前に描画されるようにしてください。
Robloxでヒットを強く感じさせるにはどうすればよいですか?
ヒット時に両方のキャラクターのアニメーションを数フレーム停止し(AnimationTrack:AdjustSpeed(0)、その後1に戻します)、強い攻撃ではカメラを短く揺らし、クリティカルにはより大きく明るいエフェクトを使います。
Robuxを獲得できるゲームで、これらのエフェクトを使えますか?
はい。ライブラリから開始したものを含め、書き出したエフェクトはクレジット表記なしで、商用ゲームを含むあらゆるプロジェクトに使用できます。ただし、ライブラリ自体をエフェクトパックとして再販売することは禁止されています。







