About train lags using physics

I created a steam locomotive with hinge and rod constraints.
The locomotive can change the value of Vectorforce and adjust the speed by Script.
When I run 7 locomotives, the lag is so bad that it doesn’t show up properly.
When you sit on the locomotive Vehicle seat, only that train will move at normal speed.

In my opinion, the other trains seem to be controlled on the server side, but how can I control this on the client?
Should I use LocalScript instead of Script?

Movie:https://twitter.com/i/status/1346030996710297600

You can actually see it here:Look at SL - Roblox

twitterを見たところ日本人っぽいので日本語で書きますね。
ラグがひどいのはserverで処理されてるので遅いので、BasePart:SetNetworkOwnerを使ってパーツの処理をローカルに任せられますが、全てをlocalに任せるとlocal側が遅くなるので注意です

English

The lag is terrible because it is processed server, so it is slow, so use BasePart:SetNetworkOwner to process the part locally, but be careful as leaving everything to local will slow down the local side.

Thank you for your polite Japanese reply.
I will try what you have taught me.

Another question is, are there too many 3100 movable joints?
I don’t know which one is the limit, but I’m curious because there are other people who are making steam locomotives using physics.

スクリーンショット 2021-01-04 19.30.06
スクリーンショット 2021-01-04 19.30.09
スクリーンショット 2021-01-04 19.30.20

えっとですね、サーバーには処理のリミットがあるのでリミットがかかってる気がします

The server has a processing limit, so I feel that the limit is applied.

ちなみに自分は日本人です(笑)

まさかの日本人とは有り難いです :slight_smile:
リミットというのはPhysicsRealが100%になっているところですかね?
だとするともうすでにゲームエンジンの限界にきているということになりますが…。

joint数が多いというのもあると思います。
localで任せた方が速いのがrobloxなのでいったんlocalに任せてみたらいいのではないでしょうか?

サーバースクリプトを扱うのは初めてなので時間がかかりますが挑戦してみます。
Thank you for your support.

上手く動きました!ありがとうございます!

It worked! Thank you!

1 Like

sorry.
It seemed to work, but the behavior is still jerky.
I wrote the following script with reference to this URL and put it in ServerScriptService. Is this enough?

script:
game.Players.PlayerAdded:Connect(function(player)

game.Workspace.Model.PrimaryPart:SetNetworkOwner(player)

end)
日本語

大変申し訳ないのですが…。
上手く動いたように見えましたがまだ挙動がギクシャクしているようです。
URL参考にスクリプトを書き、ServerScriptServiceに置いたのですが、これだけでは何か足りないのでしょうか?

コードを見せてもらえますかね? 書き方に問題があるのかも…?

スクリプトは先ほどの投稿のscript内にあります。それだけしか書いていません。
これはもしかして連結されている客車などすべての車両に適用しないといけないということでしょうか…?

そうですね。 こんなコードを使って一気にオーナーを設定できますよ:

local pathtomodel = --列車へのパス
local pathtoplayer = --プレイヤーインスタンス

for _,part in pairs(pathromodel:GetDescendants()) do
    part:SetNetworkOwner(pathtoplayer)
end

ごめんなさい…超初歩的になってしまいますけどプレイヤーインスタンスというのは自身が操作するキャラのことですよね?
単に(Players)ではだめなのでしょうか…?
それともやはりGame.Players.(個々の名前)みたいに指定してあげないとだめなのですかね?

そうなのですが、大きい何人も人が入るゲームだと処理を分散させるため近くにいるプレイヤーをOwnerにします

That’s right, but if it’s a big game with many people, you should make nearby player owner in order to distribute the processing.

localを使うのは好きではないね。hackerごめんなさい、あのことばはわかりませんよは電車の速度を大変増やすことができます。パーツ数を減らすべきだと思います。

English

I don’t like using local. Hackers can greatly increase the speed of the train. I think you should decrease the number of parts. Sorry for any mistakes in my Japanese!


こんな感じにしてみましたが、エラーを吐いてしまいました。。
根本的に知識が不足しているみたいです。申し訳ないです…。

I’m sorry to have a conversation in Japanese.

自分の書いたコードが間違ってました…

local pathtomodel = --列車へのパス
local pathtoplayer = --プレイヤーインスタンス

for _,part in pairs(pathromodel:GetDescendants()) do
    if part:IsA("BasePart") then
        part:SetNetworkOwner(pathtoplayer)
    end
end

こっちはうまく動くと思います。

良いですね!日本語をまなびますよ!

でも、それを読みました?

①列車へのパスはModelでも大丈夫でしょうか?
どこかの記事にBasePartしか実行できないと書いてありましたので…
②プレイヤーインスタンスがよく分かりません。。
getPlayerServiceで取得するとplayerかnilしかダメですとエラーが出ました。

Of course I read it. Thanks for the advice.
However, I really want to run a locomotive in physics, so I am asking questions knowing that it is impossible.

1 Like

大丈夫です。 コードはmodelのパスを指定するようにできてます。

まあ、まずは

game.Players.PlayerAdded:Connect(function(player)
    local pathtomodel = --列車へのパス
    local pathtoplayer = player
   ...
end)

でやればいいと思います :slight_smile:

1 Like