NPCにダメージをあたえよう
前回は大剣で斬るアニメーションを作ったから、今回は大剣がNPCに当たったらダメージを与えるプログラミングをしていくよ。また、NPCに当たった時と素振りした時の音を切り替えてみよう。
NPCにダメージを与えるプログラミング
今回特に準備するものはないから早速スクリプトを編集していくよ。アニメーション作成用の自分をコピーしたModelをNPCとしてサンドバッグになってもらおう( ´艸`)
local Tool = script.Parent local Sword = Tool:WaitForChild('Handle') local idleAnim1 local idleAnim2 local Event local Debounce = true local CanDamage = false -- Animations local idle = Tool.Handle.idle local moving = Tool.Handle.moving local slash1 = Tool.Handle.slash1 -- Sounds local SlashMiss1 = Tool.Handle.Slash1 local SlashHit1 = Tool.Handle.Slash2 Sword.Touched:Connect(function(hit) local Humanoid = hit.Parent:FindFirstChild("Humanoid") if Humanoid and CanDamage then hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - 10 SlashHit1:Play() CanDamage = false end end) Tool.Equipped:Connect(function() (中略) end) Tool.Activated:Connect(function() local humanoid = Tool.Parent:FindFirstChildWhichIsA("Humanoid") local playanim = humanoid:LoadAnimation(slash1) if Debounce then Debounce = false CanDamage = true if idleAnim1 then idleAnim1:Stop() end if idleAnim2 then idleAnim2:Stop() end playanim:Play() SlashMiss1:Play() wait(1) Debounce = true end end) Tool.Unequipped:Connect(function() (中略) end)
「local Sword = Tool:WaitForChild(‘Handle’)」まずツールから「Handle」のPart部分の変数と「local CanDamage = false」ダメージ制御用変数を準備しているよ。
「Sword.Touched:Connect(function(hit)」今回はこの関数で「Buster Sword」の「Handle」のPartが触れたもの(hit)が「Humanoid」だったらダメージを与える処理にするよ。
「hit.Parent:FindFirstChild(“Humanoid”)」これで「Handle」のPartが触れたものに「Humanoid」があるか探しにいくよ。
今回のサンドバッグはWorkspaceに置いてある自分のキャラクター(Kei_Labo)がParentだからその中に「Humanoid」が見つかるね。
見つかったら「Humanoid」変数に格納するよ。
次のIF文で「Humanoid」が「true」(空でなければ「true」の判定になる)かつ「CanDamage」が「true」だったら「end」までの処理を実行。
次に処理の中身だ。
hit.Parent.Humanoid.Health = hit.Parent.Humanoid.Health - 10
これは「Handle」のPartが触れた「Humanoid」のHealthプロパティを10引いた数値で上書きしているよ。
サンドバッグの「Humanoid」のPropertiesを見ると「MaxHealth」が100ってことがわかるね。ダメージを与えると「Health」の100が減っていくんだ。
次にサンドバッグにHitしたとき用のサウンドを再生して、「CanDamage」をfalseに切り替えてるね。ところで「CanDamage」はいつ「true」にするかというと前回追加した「クリックしたときの処理」で「Debounce」変数が「true」だったら「CanDamage」も「true」にしてるよ。
今回特に大剣の振り下ろしたあとのディレイが長いから、この制御をしないとサンドバッグに大剣が触れている間ダメージを与え続けちゃうんだ。
それじゃあ。実際にテストしてよう。
Hit用のサウンドに切り替わって、サンドバッグのHPバーが減っていけば成功だ!
次回はサンドバッグじゃなくて、敵のNPCを作っていくよ~♪
それじゃ~またね~。(@^^)/~~~
コメント