Если вы пытаетесь справиться со столкновением, когда игрок касается части ногами, ваш код в порядке, но если вы хотите определить, когда игрок стоит на земле или нет, то это не так..
Лучшим подходом было бы следующее:
Пример:
IsOnGround=function()
local b=false;
local range=6;
local char=game:service("Players").LocalPlayer.Character;
local root=char:WaitForChild("HumanoidRootPart",1);
if root then
local ray=Ray.new(root.CFrame.p,((root.CFrame*CFrame.new(0,-range,0)).p).unit*range);
local ignore={char};
local hit,pos=workspace:FindPartOnRayWithIgnoreList(ray,ignore,false,false);
pcall(function()
if hit then
b=true;
end
end)
else
print("root not found");
end
return b;
end
Хотя этот метод неt самый надежный, он не похож ни на символы R15, ни на ходьбу.
Метод, который будет работать как 99% времени и прост в использовании, это FloorMaterial.
FloorMaterialявляется собственностью Гуманоида персонажа.Это свойство будет равно нулю, если игрок не стоит ни на чем (другими словами, не касается земли!). Этот метод можно включить в цикл, чтобы постоянно определять, стоите ли вы на блоке или нет.Этот метод также работает как для R15, так и для R6, и он менее сложен, чем при использовании .Touched соединения.
Пример:
coroutine.wrap(function()
while wait()do
local floor=humanoid.FloorMaterial
if(tostring(floor)=="Enum.Material.Air")or(floor==nil)then
print("on air");
else
print("stepping over something");
end
end
end)()
Надеюсь, мой ответ поможет.