Tool

๊ฐœ์š”

Tool์€ ์บ๋ฆญํ„ฐ๊ฐ€ ์ง์ ‘ ์žฅ์ฐฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ Instance์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์บ๋ฆญํ„ฐ๋Š” ๋ฌด๊ธฐ๋‚˜ ์žฅ๋น„๋ฅผ ์†์— ๋“ค๊ฑฐ๋‚˜, ํฌ์…˜๊ณผ ๊ฐ™์€ ์•„์ดํ…œ์˜ ์‚ฌ์šฉ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Tool์€ ์žฅ์ฐฉ๊ณผ ํ•ด์ œ์˜ ๊ณผ์ •์„ ํ†ตํ•ด ์บ๋ฆญํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๊ฒŒ์ž„ํ”Œ๋ ˆ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Tool์˜ ๋™์ž‘ ์›๋ฆฌ

  • Tool์€ ์บ๋ฆญํ„ฐ ๋ชจ๋ธ๊ณผ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ์žฅ์ฐฉ๊ณผ ํ•ด์ œ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • ์บ๋ฆญํ„ฐ์˜ ์˜ค๋ฅธ์†์— ์žฅ์ฐฉ๋˜๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ Handle Part๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Handle์ด ์—†๋Š” Tool์„ ๋งŒ๋“ค ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์žฅ์ฐฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Handle์„ ๊ธฐ์ค€์œผ๋กœ Tool์„ ๊ตฌ์„ฑํ•˜๋Š” MeshPart ๋ฐ ๋‹ค๋ฅธ Part์˜์ ์ ˆํ•œ ์œ„์น˜ ์กฐ์ •์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Tool์˜ ์†์„ฑ

์•„๋ž˜๋Š” ์ฃผ์š” ์†์„ฑ ๋ฐ ๊ด€๋ จ ์„ค๋ช…์ž…๋‹ˆ๋‹ค:

์†์„ฑ
์„ค๋ช…

TextureId

Backpack GUI์—์„œ ๋ณด์—ฌ์ง€๋Š” Tool์˜ ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

CanBeDropped

Tool์˜ Parent๋ฅผ Workspace๋กœ ๋ณ€๊ฒฝ ํ•˜์˜€์„ ๋•Œ, ์ž๋™์œผ๋กœ ํ”Œ๋ ˆ์ด์–ด ์•ž์œผ๋กœ Tool์„ ๋“œ๋กญ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

Enabled

Enabled ์†์„ฑ์€ Tool์„ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•˜๋ฉฐ, false๋กœ ์„ค์ •ํ•˜๋ฉด Tool์˜ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ๋ฉ”์„œ๋“œ์™€ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ๊ฐ€ ์ฐจ๋‹จ๋˜์–ด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ Tool์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Grip

์บ๋ฆญํ„ฐ๊ฐ€ Tool์„ ์žฅ์ฐฉํ•  ๋•Œ์˜ ์†์žก์ด ์œ„์น˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. (CFrame ์ด์šฉ)

GripForward

๊ทธ๋ฆฝ์ด ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ, Grip CFrame ํšŒ์ „ ํ–‰๋ ฌ์˜ R02, R12, R22 ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, GripUp, GripRight, GripPos ์†์„ฑ๊ณผ ํ•จ๊ป˜ Tool.Grip ์†์„ฑ์˜ CFrame ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

GripPos

๊ทธ๋ฆฝ์˜ ์œ„์น˜๋กœ Handle์—์„œ์˜ ๊ทธ๋ฆฝ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

GripRight

๊ทธ๋ฆฝ์˜ ์ธก๋ฉด ๋ฐฉํ–ฅ์œผ๋กœ, Grip CFrame ํšŒ์ „ ํ–‰๋ ฌ์˜ R00, R10, R20 ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, GripUp, GripForward, GripPos ์†์„ฑ๊ณผ ํ•จ๊ป˜ Tool.Grip ์†์„ฑ์˜ CFrame ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

GripUp

๊ทธ๋ฆฝ์˜ ์ƒ๋‹จ ๋ฐฉํ–ฅ์œผ๋กœ, Grip CFrame ํšŒ์ „ ํ–‰๋ ฌ์˜ R01, R11, R21 ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, GripRight, GripForward, GripPos ์†์„ฑ๊ณผ ํ•จ๊ป˜ Tool.Grip ์†์„ฑ์˜ CFrame ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

ManualActivationOnly

ManualActivationOnly ์†์„ฑ์€ Tool:Activate()๋ฅผ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ๋งŒ Tool.Activated ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ์ œ์–ดํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

Tool์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

1. Tool ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

  1. ๋ ˆ๋ฒจ ๋ธŒ๋ผ์šฐ์ €(Workspace)์—์„œ Tool ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  2. Tool ํ•˜์œ„์— Part๋ฅผ ์ƒ์„ฑ ํ›„, ํ•ด๋‹น ์ด๋ฆ„์„ Handle๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  3. ์†์— ์žฅ์ฐฉ๋  ๋„๊ตฌ์ธ MeshPart ๋˜๋Š” Part๋ฅผ Handle ํ•˜์œ„์— ๋ฐฐ์น˜ํ•˜๊ณ , ๋„๊ตฌ์˜ ์†์žก์ด ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ CFrame์„ ์กฐ์ •ํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ์žฅ์ฐฉ ์œ„์น˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

2. Tool ์žฅ์ฐฉ ํ…Œ์ŠคํŠธ

  1. ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•˜๊ณ  ์บ๋ฆญํ„ฐ๋ฅผ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  2. Workspace์— ๋ฐฐ์น˜ํ•œ Tool์„ ์บ๋ฆญํ„ฐ๊ฐ€ Touch(์ ‘์ด‰) ํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  3. Handle์— ์ ‘์ด‰ํ•˜๋ฉด ์บ๋ฆญํ„ฐ๊ฐ€ ํ•ด๋‹น Tool์„ ์˜ค๋ฅธ์†์— ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    • ์ •์ƒ์ ์ธ ์œ„์น˜์— ์žฅ์ฐฉ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, Handle ํ•˜์œ„์˜ MeshPart ๋˜๋Š” Part์˜ ์œ„์น˜์™€ ๋ฐฉํ–ฅ์„ ์ˆ˜์ •ํ•˜์—ฌ ์žฌ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•œ Tool ์žฅ์ฐฉ ๋ฐ ํ•ด์ œ

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

์–ด๋–ค ํŠธ๋ฆฌ๊ฑฐ(Trigger)๋‚˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ๋งŒ Tool์„ ์žฅ์ฐฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ Tool์„ ์žฅ์ฐฉํ•˜๊ฑฐ๋‚˜ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Tool ์žฅ์ฐฉ์„ ์œ„ํ•œ ๋ฐฉ๋ฒ•

์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ Tool์„ ์บ๋ฆญํ„ฐ์—๊ฒŒ ์žฅ์ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. Humanoid:EquipTool ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ

    • ๋‹ค์Œ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์บ๋ฆญํ„ฐ๊ฐ€ ์ง์ ‘ Tool์„ ์žฅ์ฐฉํ•˜๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์˜ˆ์ œ ์ฝ”๋“œ:

local function Equip(player)
     local character = player.Character or player.CharacterAdded:Wait()
     local humanoid = character:FindFirstChild("Humanoid")
     local myTool = game.Workspace:FindFirstChild("MyTool")

     if humanoid and myTool then
         humanoid:EquipTool(myTool)
     end
end
  1. Tool.Parent ๋ณ€๊ฒฝ

    • Tool์˜ ๋ถ€๋ชจ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์—ฌ ์žฅ์ฐฉํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์˜ˆ์ œ ์ฝ”๋“œ:

local function Equip(player)
     local myTool = game.Workspace:FindFirstChild("MyTool")
     local character = player.Character

     if character and myTool then
         myTool.Parent = Character
     end
end

Tool ํ•ด์ œ

Tool์„ ํ•ด์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค:

  1. ๊ธฐ๋ณธ ํ•ด์ œ: ์บ๋ฆญํ„ฐ๊ฐ€ Tool ํ•ด์ œ ํ›„ Backpack์— ๋‹ค์‹œ ๋ณด๊ด€๋ฉ๋‹ˆ๋‹ค.

  2. ์‚ญ์ œ(Destroy): ํ•„์š” ์—†๋Š” Tool ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์˜ˆ์ œ ์ฝ”๋“œ:

     local myTool = game.Workspace:FindFirstChild("MyTool")
     if myTool then
         myTool:Destroy()
     end
  1. ๋‚ด๋ ค๋†“๊ธฐ(Drop) :CanBeDropped๊ฐ€ True์ธ ๊ฒฝ์šฐ Tool์˜ Parent๋ฅผ Workspace๋กœ ์ง€์ •ํ•˜์—ฌ ํ”Œ๋ ˆ์ด์–ด ์•ž์— ๋‚ด๋ ค๋†“์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์˜ˆ์ œ ์ฝ”๋“œ:

     local myTool = game.Workspace:FindFirstChild("MyTool")
     if myTool then
         myTool.Parent = game.Workspace
     end

์ด๋ฒคํŠธ๋ฅผ ํ™œ์šฉํ•œ Tool ์ƒํ˜ธ์ž‘์šฉ ์‘์šฉ

Tool์—๋Š” ์žฅ์ฐฉ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์บ๋ฆญํ„ฐ๊ฐ€ ํŠน์ • Tool์„ ์žฅ์ฐฉํ•  ๋•Œ ํŠน์ •ํ•œ ์‹œ๊ฐ ํšจ๊ณผ(VFX)๋‚˜ ๋™์ž‘์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ParticleEmitter ์ƒ์„ฑ: Handle๋˜๋Š” ํŒŒํ‹ฐํด ํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜์•ผ ํ•˜๋Š” ์œ„์ง€์— ParticleEmitter๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  2. ParticleEmitter ์†์„ฑ ํŽธ์ง‘ : ํŒจํ‹ฐํด์˜ ํฌ๊ธฐ, ๋ฐฉํ–ฅ, ํŒŒํ‹ฐํด ๊ฐœ์ˆ˜ ๋“ฑ ํŒŒํ‹ฐํด ๊ด€๋ จ ์„ค์ •์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  3. ParticleEmitter Enabled ๋น„ํ™œ์„ฑํ™” : ์™„์„ฑ๋œ ParticleEmitter Enabled๋ฅผ false๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์žฅ์ฐฉ ์ „์—๋Š” ํŒŒํ‹ฐํด ํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  4. ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ: ๋ฌด๊ธฐ๊ฐ€ ์žฅ์ฐฉ๋˜์—ˆ์„ ๋•Œ์—๋งŒ ParticleEmitter ํ™œ์„ฑํ™” ๋˜๋„๋ก ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

local Tool = script.Parent
local Emitter = Tool.Handle.LightSaber.ParticleEmitter
Tool.Equipped:Connect(function()   
     if Emitter then
         Emitter.Enabled = true
     end
 end)
 
 Tool.Unequipped:Connect(function()   
     if Emitter then
         Emitter.Enabled = false
     end
 end)

Last updated