So I'm working on a combat system and I know how to make blocking and stuff work, but my issue is that I don't know how to make it so if you punch the person that's blocking from behind it breaks their block. If anyone could help me with this issue I'd greatly appreciate it, all I need is a function to see if a player is facing another player or a small example to work off of.
✓ ANSWER ACCEPTED
How do I make blocks one directional?
2 answers
✓ Accepted answer
You can use Dot Products to see if a part is seen in another part's field of view. It basically returns 0.5 to 1 if the part is in front of another part and returns 0 or less if it's in the side/back. Here's a YouTube tutorial if you want.
local part1 = workspace.Part1
local part2 = workspace.Part2
while true do
task.wait(1)
local partToPart = (part2.Position - part1.Position).Unit
local dotProduct = partToPart:Dot(part1.CFrame.LookVector)
if dotProduct >= 0.5 then -- if part is within the part1's field of view
print("Part2 is within Part1's FOV")
else
print("Part2 cannot be seen in Part1's FOV")
end
end
Use raycasting.
local part1 = workspace.Part1
local part2 = workspace.Part2
local params = RaycastParams.new()
params.FilterType = Enum.FilterType.Blacklist
params.FilterDescendantsInstances = {part1}
local length = 50
while true do
local hit = workspace:Raycast(part1.Position, part1.CFrame.LookVector * length)
if hit and hit.Instance then
--do code
end
task.wait(0.2)
end
This discussion is preserved as it was. New answers, comments, and votes are closed.

1 comment
Dot products :)