【Roblox】TweenServiceでModelを滑らかに回転させる

コインなどのモデルを滑らかに回転させたいときに使うときのコード例です。設定を失敗すると1周後の次の回転が綺麗につながらなかったり、回転しているように見えなかったりして、結構面倒なので、上手くできた例を残しておきます。

-- モデルを滑らかに回転させたいときに呼ぶ関数
local function rotateModel(model)
	if not model:IsA("Model") or not model.PrimaryPart then return end

	local spininfo = TweenInfo.new(2, Enum.EasingStyle.Linear) 

	local goal={}

	local tween = TweenService:Create(model.PrimaryPart, spininfo, goal)
	
	goal.CFrame=model.PrimaryPart.CFrame * CFrame.Angles(0,math.rad(120),0)
	local Spin1 = TweenService:Create(model.PrimaryPart,spininfo,goal)
	
	goal.CFrame=model.PrimaryPart.CFrame * CFrame.Angles(0,math.rad(240),0)
	local Spin2 = TweenService:Create(model.PrimaryPart,spininfo,goal)

	goal.CFrame=model.PrimaryPart.CFrame * CFrame.Angles(0,math.rad(360),0)
	local Spin3 = TweenService:Create(model.PrimaryPart,spininfo,goal)
	
	Spin1:Play()
	Spin1.Completed:Connect(function()Spin2:Play() end)
	Spin2.Completed:Connect(function()Spin3:Play() end)
	Spin3.Completed:Connect(function()Spin1:Play() end)
end

goal.CFrame=model.PrimaryPart.CFrame * CFrame.Angles(0,math.rad(360),0)と、TweenInfoにrepeatCount = -1(無限)の設定で行けそうな気がしますが、それだと回転は発生せず静止しているように見えてしまいます。
回転が終わってる状態を繰り返すとみなすのかな?

この記事が気に入ったらサポートをしてみませんか?