关于part旋转的实现方式(包含采用local 或server脚本哪种效率和效果更好的问题)

在制作一个技能,表现效果为,技能释放过程,有一段需要让剑(part)围绕玩家旋转的动画效果
1、这个动画效果是整个技能表现得一部分
2、这个效果需要同步给所有其他玩家看到
3、希望效果实现方式尽量local实现,比如通过remove保证同步,但旋转逻辑在local
4、围绕角色转2圈以上

求助问题:
1、使用tween服务,但貌似不能达到效果,Orientation属性旋转360得问题,以及可控性比较差,逻辑上应该是可以,但没有深入研究。
2、当前采用了server脚本实现,循环设置cframe,但自己认为循环次数可能太多,若多玩家同时释放时,会不会出现消耗太大得问题
bandicam 2020-12-07 19-35-28-055

--围绕玩家转圈
			local Offset = player.Character.PrimaryPart.CFrame:inverse() * jian5.CFrame
			for i = 0,60 do
				local NewCFrame = player.Character.PrimaryPart.CFrame * CFrame.Angles(0,math.rad(i*12),0)
				jian5.CFrame = NewCFrame  * Offset
				wait()
			end
5赞

理论上来讲,使用服务端脚本不一定会产生很大 (服务器) 的消耗,但可能会造成让网络/性能比较差的玩家有延迟
So, to resolve this, 你可以:

  • 对自己的游戏进行优化
    • 限制玩家可以看到的距离
    • 可以为移动端玩家添加一个“低特效”模式
    • 让玩家自行调整特效
    • 等等等等…
  • 减少一个服务器中最大玩家容量
7赞

谢谢意见 :smiley: :grinning: :smiley:

3赞

使用Tween来控制Orientation要注意这是一个Vecrot3值,不能单独去改Orientation.X(Y/Z)

正确的用法如下:

local Tween = game:GetService("TweenService")
local part = game.Workspace.Part
wait(3)
Info = TweenInfo.new(1, Enum.EasingStyle.Sine,Enum. EasingDirection.Out, 0, false, 0)
-- 一些创建Tween要用到的东西
Tween:Create(part,Info,{Orientation = Vector3.new( 0, 0, 720)}):Play()
-- 注意这里Orientation的写法

保证同步的话,RemoteEvent有FireAllClients的方法

但是玩家延迟高的话好像还是会不同步……性能消耗之类的我也没什么研究 :sweat_smile:

:pray:希望能帮到你 ~

3赞