Top.Mail.Ru
Ответы

Срочно помогите пожалуйста с RayCasting в Roblox Studio!!

У меня возникла проблема что RayCastResult = Nil, Я пытался множеством способов исправить это но нечего не получалось я искал сайты с информацией о такой проблеме но нечего не нашёл.

for _, Part in WalkersPointFolder:GetChildren() do
local Orig = script.Parent.Position
local To = Part.Position
local RayCastParams = RaycastParams.new ()
RayCastParams.FilterType = Enum.RaycastFilterType.Exclude
RayCastParams.FilterDescendantsInstances = {script.Parent.Parent}

RayCast = game.Workspace:Raycast(Orig , To, RayCastParams)

print(RayCast) -- тут выдаёт nil

if RayCast then


if RayCast.Instance == Part then
table.insert(WalkersPoint, Part)

end

В этом скрипте мне надо посмотреть видит ли Монстр блоки для ходьбы, если да то он выбирает рандомный парт и идёт туда, но проблема сама в том что RayCastResult выдаёт Nil.

Помогите пожалуйста так как я пытался разными способами это исправить но нечего не получалось

Ещё добавлю может что то вам это даст, иногда он всё же выдавал RayCastResult но Сам RayCast попадал не в блоки ходьбы а в карту + Монстр это модель от которого идёт луч а блок для ходьбы находится в папке с остальными такими же блоками!

По дате
По рейтингу
Аватар пользователя
Мыслитель

Ошибка заключается в неудачном использовании функции `game.Workspace:Raycast()`. У вас отсутствует проверка наличия попадания и использования возвращаемого значения. Вместо этого, вы напрямую пытаетесь вызвать `print(RayCast)`, но так как `RayCast` имеет значение `nil`, поэтому вы получаете его в результате вывода.

Чтобы исправить эту ошибку и получить правильный результат, вы должны проверить наличие попадания через условный оператор (`if`) и проверить, что `RayCast` не равен `nil`. Вот исправленный код:

```lua
for _, Part in pairs(WalkersPointFolder:GetChildren()) do
local Orig = script.Parent.Position
local To = Part.Position
local RayCastParams = RaycastParams.new ()
RayCastParams.FilterType = Enum.RaycastFilterType.Exclude
RayCastParams.FilterDescendantsInstances = {script.Parent.Parent}
RayCast = game.Workspace:Raycast(Orig, To, RayCastParams)

if RayCast then
if RayCast.Instance == Part then
table.insert(WalkersPoint, Part)
end
end
end
```

Теперь код будет корректно проверять наличие попадания (`RayCast`) и добавлять `Part` в `WalkersPoint`, только если `RayCast.Instance` равно `Part`.

если помог https://www.donationalerts.com/r/rxf360