ボディポジションを使用する必要がありますか? ボディベロシティ? 助けてください
6 に答える
あなたが何を試みたいかを理解していれば、このようなことをする方法はたくさんあります。効果的に「別のレンガに滑り込んで消える」ためには、次の 2 つのことを行うことができます。
1) CanCollide が 0 の他のブリックの方向に強力な BodyVelocity を設定します。ブリックが他のブリックと接触すると、短時間待機してから自身を取り除きます。
2) CFrame を使用してレンガを移動し、CFrame.new(Brick1.Pos, Brick2.Pos) を使用して角度を見つけ、フレーム システムを使用してその CFrame を Brick1 CFrame に追加し、「動き」の効果を作成できます。「フレーム」が終了したら、レンガを取り外します。
私の知る限り、CFrameを使用したいと思います。2つのブリックを同じスペースで移動できるようにするには(両方のブリックがCanCollide = trueである場合)、CFrameを使用する必要があります。すべての「Body」インスタンス(BodyVelocity、BodyPosition)はブリックに力を加えるため、同じスペースでブリックを移動させることはできません。
引き戸が必要な場合は、次のスクリプトを使用できます。
local StartPosition = script.Parent.CFrame
local ToPosition = workspace.TargetPart.CFrame -- Make sure this is right
function Open()
for i=0,100,1 do
script.Parent.CFrame = StartPosition + CFrame.new(StartPosition.p,ToPosition.p).lookVector * ((StartPosition.p-ToPosition.p).magnitude/100) * i
wait(0.01)
end
end
function Close()
for i=100,0,-1 do
script.Parent.CFrame = StartPosition + CFrame.new(StartPosition.p,ToPosition.p).lookVector * ((StartPosition.p-ToPosition.p).magnitude/100) * i
wait(0.01)
end
end
local Moving = false
local IsOpen = false
function Toggle()
if Moving then return end
Moving = true
if IsOpen then
Close()
else
Open()
end
IsOpen = not IsOpen
Moving = false
end
-- Following code is just for testing
Toggle()
wait(1)
Toggle()
2番目のレンガが最初のレンガよりも大きいことを確認してください。
「別のものに消える」とはどういう意味ですか? スライドをシミュレートするには、さまざまな方法を使用できます。CFrame、BodyVelocity、BodyForce、さらには BodyPosition を使用できます。摩擦のないレンガを作って、その上を滑らせることもできます。他に知っておくべきことはありますか?もしそうなら、コメントしてください。
もっと現実的で失敗する可能性が低い方法がもう 1 つあります。単純にレンガを作成し、onClick() などの関数で透明度を使用して、ブロックを非表示にし、固定されたレンガを表示し、元のレンガを nonCanCollide にすることができます。 、および新しい代替の位置は方向に移動します。また、BodyPosition を使用する傾向があります。これは、位置に対して機能し、固定されたレンガと固定されていないレンガに使用できるため (固定されていないレンガには適していません)、bodyvelocity は固定されていないレンガが移動するためのものです。ちょっと退屈な方向で、まあ、失敗する可能性は低いと言います。代替が失敗した場合、元のブリックはまだそこにあり、サブが壊れた場合にそれを保存するバックアップスクリプトを作成できるからです。
これのいくつかが役に立てば幸いです。-オルビアン。
コンベヤーベルトを使用してスライドさせ、レンガを衝突させて、cよりも太くします。